Adyen付款:保存卡令牌,稍后从令牌付款

sri*_*thi 2 php adyen

可以允许adyen保留信用卡详细信息,并根据令牌或客户ID而不是信用卡信息向客户付款.我检查了adyen标记化方法,我找不到任何api文档的标记化方法(类似于条带化支付).

任何人请建议我.

luk*_*e_b 5

要扩展uselight的答案,您绝对可以将卡详细信息标记出来.

Adyen使用购物者概念作为存储桶来存储已保存的详细信息.这shopperReference是由您定义的,任何支持经常性费用的支付方法都可以存储在此ID中.

要存储信用卡,首先您需要使用CSE(客户端加密)接受卡详细信息.这将在客户端浏览器上将卡详细信息加密,然后再将其提交给您自己的服务器,并允许您完全控制输入字段的外观.这是一个示例表单:

<script type="text/javascript" src="https://test.adyen.com/hpp/cse/js/adyen.encrypt.js"></script>
<form method="POST" action="payment-request-handler.php" id="adyen-encrypted-form">
    <input type="text" size="20" data-encrypted-name="number"/>
    <input type="text" size="20" data-encrypted-name="holderName"/>
    <input type="text" size="2" data-encrypted-name="expiryMonth"/>
    <input type="text" size="4" data-encrypted-name="expiryYear"/>
    <input type="text" size="4" data-encrypted-name="cvc"/>
    <input type="hidden" value="[generate this timestamp server side]" data-encrypted-name="generationtime"/>
    <input type="submit" value="Pay"/>
</form>
<script>
// The form element to encrypt.
var form = document.getElementById('adyen-encrypted-form');
// See https://github.com/Adyen/CSE-JS/blob/master/Options.md for details on the options to use.
var options = {};
// Bind encryption options to the form.
adyen.createEncryptedForm(form, options);
</script>
Run Code Online (Sandbox Code Playgroud)

具有该data-encrypted-name属性的所有字段将被删除并替换为单个字段adyen-encrypted-data.从这里,你的php服务器可以使用我们提供的php api库来执行授权调用.要保存稍后的详细信息,请包括shopperEmail,shopperReference(您为购物者指定的ID),以及recurring.contract.经常性合同价值通常是RECURRING.请务必稍后存储pspReference,因为这将用于匹配保存的详细信息.

$client = new \Adyen\Client();
$client->setApplicationName("Adyen PHP Api Library Example");
$client->setUsername("[YOUR USERNAME]");
$client->setPassword("[YOUR PASSWORD]");
$client->setEnvironment(\Adyen\Environment::TEST);

$service = new Service\Payment($client);

$json = '{
  "amount": {
    "value": 999,
    "currency": "USD"
  },
  "reference": "payment-test",
  "merchantAccount": "[YOUR MERCHANT ACCOUNT]",
  "additionalData": {
    "card.encrypted.json": ' . $_POST['adyen-encrypted-data'] . '
  },
  "shopperEmail" : "wyldstallyns@email.com",
  "shopperReference" : "shopperref123456",
  "recurring" : {
    "contract" : "RECURRING"
  }
}'

$params = json_decode($json, true);

$result = $service->authorise($params);
$pspReference = $result.pspReference;
Run Code Online (Sandbox Code Playgroud)

收到AUTHORIZED的结果后,您可以执行查找shopperReference以获取用于通过listRecurringDetails调用重复收费的令牌.

$service = new Service\Recurring($client);
$recurring = array('contract' => \Adyen\Contract::RECURRING);
$params = array('merchantAccount' => '[Your Merchant Account]', 
  'recurring' => $recurring, 
  'shopperReference' => 'shopperref123456'
);
$result = $service->listRecurringDetails($params);

$recurringToken = '';
foreach($result['details'] as $detail) {
    if($detail['RecurringDetail']['firstPspReference'] == $pspReference) {
            $recurringToken = $detail['RecurringDetail']['recurringDetailReference'];
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用它recurringDetailReference来执行将来的费用.

$service = new Service\Payment($client);

$json = '{
  "amount": {
    "value": 999,
    "currency": "USD"
  },
  "reference": "recurring-test",
  "merchantAccount": "[YOUR MERCHANT ACCOUNT]",
  "selectedRecurringDetailReference":' . $recurringToken . '
  "shopperEmail" : "wyldstallyns@email.com",
  "shopperReference" : "shopperref123456",
  "recurring" : {
    "contract" : "RECURRING"
  }
}'

$params = json_decode($json, true);

$result = $service->authorise($params);
Run Code Online (Sandbox Code Playgroud)

希望这很有帮助.查看定期文档.