Let's look at this requirement a little differently. Currently it looks like this:
As the owner of the product for website X, I want the system to temporarily store customer details so that I can restore the sale that was rejected by CC
Ppl tends to think like this and request functions this way. Now I think that your requirement is more convenient to describe as follows:
As a user, I want website X to be able to repeat the payment for my purchase, so I have no hassle to go through the verification process again, which is a real pain in ...
So, is there no explicit requirement to store anything (on your side)? Its only implied
Payment providers can provide software APIs for your trading account and the ability to attempt to reauthorize for a delayed attempt. I think @bashmohandes slipped away from this earlier
Not all payment providers can do this, but I think that it depends on their relationship with the banks involved. This is what you want to avoid, i.e. having a close relationship with banks.
Scenario 1: Assume Everything I Say Is True
You do not need to store anything except a link to an authorization attempt. Some payment providers even give you the sweet backoffice tool, so you don’t have to do your own to do re-authorizations. I think paygate does it
Your best bet, I think, is an interview with several payment providers. they should know this, like the backs of hands. This is potentially a null-code solution.
Scenario 2: Assuming I am completely wrong, but legally this is keeping CC files in order
So, you should temporarily store this data. I advise:
- use a two-way encryption method (of course) that is not vendor specific, so you can use any language / platform for encryption / decryption.
- separate the encryption / decryption service from your application and treat it as a black box
- use public / private keys for authentication for this service
- put this computer on a private network with your own firewall rules (it doesn't have to be a hardware firewall, but the hardware is better).
- your application servers will contact this machine via ssl (you can leave with a self-signed certificate, since it is located on your private LAN).
All that I suggested in scenario 2 is an obstacle, but in the end, perseverance wins the race to get to your data. The only way to absolutely protect the data is to disconnect your server from the air, but this option is a bit radical :-)
Scenario 1 will be enjoyable. Is not it?