我收到了许多客户的要求,他们希望在线获取客户的信用卡号,然后在终端的POS处处理付款。我想知道这样做的最佳方法是什么。
我不想以明文形式在服务器上存储信用卡号码,我也不想以纯文本形式发送包含该号码的电子邮件。
由于在线支付处理器的成本较高且额外费用较高且客户不想注册在线支付帐户。此外,两位客户都不能在线收费,因为由于缺货产品或客户要求的问题,总数可能会发生变化。
我还有其他选择吗?
我将使用PHP。如果规则对我应该使用哪种方法有任何影响,我也在加拿大。
答案 0 :(得分:4)
我通过构建GPG的前端并允许网站所有者生成自己的GPG密钥来解决这个问题。然后,所有信用卡数据都经过GPG加密,并且只能使用网站所有者的私钥进行解密,如果需要,可以将其保存在服务器之外。
答案 1 :(得分:4)
我建议使用Authorize.net(只是因为我使用过的)。您可以将信用卡信息发布到Authorize.net以捕获(我相信AUTH_CAPTURE)要收取的信用卡信息。然后,您的客户端可以登录Authorize.net虚拟终端,并根据可用的库存收取或取消每笔付款。
请勿将信用卡信息(即使已加密)存储在可通过互联网访问的数据库中。我不知道PCI合规的起点和终点在哪里,但我知道如果您的客户存储信用卡信息,那么他们必须与他们接受的信用提供商进行PCI兼容。 PCI合规性是一种痛苦,我推荐的方法是我发现的最简单的方法。并且对客户来说头痛最少。
答案 2 :(得分:3)
有很多支付处理器供我推荐使用POS机。大多数评论是PayPal,Authorize.net,CyberSource ...都有编程API,可以让您与您的网站进行交互。
其次,我使用Rijndael加密,因为我认为它是存储卡数据最安全的方式。我竭尽全力在Web配置之外隐藏加密密钥(单独的文件,reg密钥等)。
最后,但可能最重要的是,您应该强烈关注PCI(支付卡行业)合规性认证(https://www.pcisecuritystandards.org/)。我相信这很快成为在线接受卡数据的要求(如果还没有)。将来,对于那些不遵守规定的人可能会处以罚款。
答案 3 :(得分:1)
您可以使用MySql AES_ENCRYPT函数将信用卡数据存储在MySql数据库中(其他可能有用,但我不熟悉),以加密卡号,然后在检索时AES_DECRYPT。使用强密钥并在处理完数据库后删除它们。
可能有一种方法可以使用PHP进行AES en / decryption,但我不知道原生方式。
答案 4 :(得分:1)
您最好的选择是使用非对称加密。生成RSA公钥和私钥对。将私钥放在SECURE位置。将公钥放在您的网络服务器上。当客户想要提交他们的信用卡详细信息时,请将公钥推送给他们。在此客户端使用公钥加密数据。在OpenSSL中,查看Envelope例程(EVP _ **)。
这样,恢复明文信用卡数据的唯一方法就是使用非常安全的解密,从未放置在线,从未见过互联网连接的计算机私钥。
您可以使用OpenSSL创建一个非常简单的独立应用程序。
考虑到您要加密的少量数据,我认为这是一个相当实用的解决方案。
更高效但更复杂的解决方案是AES使用密钥生成的客户端加密数据。然后如上所述加密此AES密钥(在我的上述解决方案中用AES密钥替换信用卡。)
答案 5 :(得分:1)
完全存储信用卡将符合PCI合规要求。 PCI的规则和规则是有趣和详细的。这不是一个简单的问题。如果我不得不重新做一遍,我会考虑购买符合PCI标准的购物车并安装它并完成它。
答案 6 :(得分:0)
我知道您要求的解决方案不涉及支付处理器,但是在加拿大有一个名为CurePay的信用卡处理器,据我所知,它相对便宜(我自己不使用它)。 www.curepay.com。可能值得给他们一个大喊,至少要了解定价。
此外,我似乎还记得有关采取信用卡号码的某种合规性。存储信用卡或“错误地”处理信用卡可能会让您面临法律纠纷。不要试图吓唬你,只要确保你无论如何都要考虑这样的事情。