我只需要存储4位数的信用卡

时间:2014-07-25 19:07:20

标签: java javascript payment-gateway credit-card braintree

我正在使用Braintree作为支付网关 我有一个要求,我只需要存储信用卡的最后4位数,到期日期(根据PCI Complaince)。
我已经在javascript中实现了前端代码,并且在向服务器发送数据时,信用卡信息被加密 无论如何我可以在后端获得最后四位数,到期日期和卡片类型,还是可以解密它?

<form name="paymentForm" action="/createtransaction" method="post" id="braintree-payment-form">
   <p>
     <label style="color:white">Card Number</label>
     <input type="text" size="20" ng-model="userDetails.number" autocomplete="off" data-encrypted-name="number" />
   </p>
   <p>
     <label style="color:white">CVV</label>
     <input type="text" size="4" ng-model="userDetails.cvv" autocomplete="off" data-encrypted-name="cvv" />
   </p>
   <p>
     <label style="color:white">Expiration (MM/YYYY)</label>
     <input type="text" size="2" ng-model="userDetails.month" data-encrypted-name="month" /> / <input type="text" size="4" ng-model="userDetails.year" data-encrypted-name="year" />
   </p>
   <input type="submit" id="submit" />

2 个答案:

答案 0 :(得分:5)

(披露,我为Braintree工作)

由于您使用的是客户端加密,因此在创建事务之前,您将无法获取加密信息。但是,一旦您完成了交易,结果对象将包含卡号的前六位/后四位和到期日期。然后,您可以将这些值存储在数据库中。

看起来像是:

Result<Transaction> result = gateway.transaction().sale(
  ...
);
Transaction transaction = result.getTarget();
CreditCard creditCart = transaction.getCreditCard();
String last4 = creditCard.getLast4();
String expiration = creditCard.getExpirationDate();

答案 1 :(得分:0)

由于您使用的是Braintree的客户端加密流程,因此根据他们的文档,您无法访问敏感信息的未加密版本(即信用卡号)。这是有目的的,这样您就可以降低安全风险并保持PCI合规性。

Braintree states in this post

  

用户按下包含其表单的表单上的“提交”按钮   信用卡信息,您使用Braintree提供的JavaScript   在表单发布之前加密敏感字段的库   你的服务器。敏感的非加密数据不包含在   提交的表单,因此永远不会通过您的表单   系统。但是,您可以使用所有其他字段。这意味着   您可以执行自定义验证,格式化和记录到您的   心脏的内容,而不会暴露自己的安全风险和   具有未加密信用卡的额外PCI合规性要求   数据通过您的环境。

另请注意,由于您无法访问解密密钥,因此无法解密数据。

如果您想获得对实际敏感信用卡数据的访问权限,那么我认为您必须采取不同的方法。 服务器到服务器流程看起来是您最好的选择。布伦特里说:

  

S2S的工作方式与通过HTTP访问任何API的方式类似。第一,   您在网站上创建一个用户输入其信用卡的表单   卡数据,账单信息等。当用户提交表格时,   内容将发送到您的服务器。使用您收到的数据,   您使用其中一个客户端库对Braintree进行API调用,   检查结果并向用户显示必要的信息。