Adyen Payment: сохраните карточный токен и сделайте оплату позже с токена

Возможно позволить adyen хранить данные кредитной карты и осуществлять платежи от клиентов на основе токена или идентификатора клиента вместо информации о кредитной карте.
Я проверил метод токенизации Adyen, я не могу найти документацию API для метода токенизации (аналогичен полосовой оплате).

Любой Пожалуйста, предложите мне.

2

Решение

Чтобы расширить ответ uselight, вы можете однозначно указать данные карты.

Adyen использует концепцию покупателя, которая действует как корзина для хранения сохраненных деталей. Это shopperReference определяется вами, и любой метод оплаты, который поддерживает повторяющиеся платежи, может быть сохранен с этим идентификатором.

Для хранения кредитной карты сначала необходимо принять данные карты с помощью CSE (Client Side Encryption). Это зашифрует данные карты в браузере клиента перед отправкой на ваш собственный сервер и позволит вам полностью контролировать внешний вид полей ввода. Вот пример формы:

<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>

Все поля с data-encrypted-name атрибут будет удален и заменен одним adyen-encrypted-data, Отсюда ваш php сервер может использовать наш библиотека php api выполнить авторизацию вызова. Чтобы сохранить детали на потом, включите shopperEmail, shopperReference (это идентификатор, который вы указываете для покупателя), и 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;

После того, как вы получите результат 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'];
}
}

Вы используете это 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);

Надеюсь, это полезно. Проверьте Периодическая документация также.

5

Другие решения

Похоже, вы ищете регулярные платежи. Если это так, вы можете сделать это, передавая данные карты через шифрование на стороне клиента:

curl -u "ws@Company.YourCompany":"YourWsPassword" \
-H "Content-Type: application/json" \
-X POST --data \
'{
"additionalData": {
"card.encrypted.json":"adyenjs_0_1_4p1$..."},
"amount" : {
"value" : 20000,
"currency" : "EUR"},
"reference" : "Your Reference Here",
"merchantAccount" : "TestMerchant",
"shopperEmail" : "s.hopper@test.com",
"shopperReference" : "Simon Hopper",
"recurring" : {
"contract" : "RECURRING"}
}' \
https://pal-test.adyen.com/pal/servlet/Payment/v18/authorise

Чтобы использовать эти детали позже, вы должны предоставить только эти данные:

curl -u "ws@Company.YourCompany":"YourWsPassword" \
-H "Content-Type: application/json" \
-X POST --data \
'{
"amount" : {
"value" : 20000,
"currency" : "EUR"},
"reference" : "Your Reference Here",
"merchantAccount" : "TestMerchant",
"shopperEmail" : "s.hopper@test.com",
"shopperReference" : "Simon Hopper",
"selectedRecurringDetailReference" : "LATEST",
"shopperInteraction" : "ContAuth",
"recurring" : {
"contract" : "RECURRING"}
}' \
https://pal-test.adyen.com/pal/servlet/Payment/v18/authorise
1