Возможно позволить adyen хранить данные кредитной карты и осуществлять платежи от клиентов на основе токена или идентификатора клиента вместо информации о кредитной карте.
Я проверил метод токенизации Adyen, я не могу найти документацию API для метода токенизации (аналогичен полосовой оплате).
Любой Пожалуйста, предложите мне.
Чтобы расширить ответ 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" : "[email protected]",
"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" : "[email protected]",
"shopperReference" : "shopperref123456",
"recurring" : {
"contract" : "RECURRING"}
}'
$params = json_decode($json, true);
$result = $service->authorise($params);
Надеюсь, это полезно. Проверьте Периодическая документация также.
Похоже, вы ищете регулярные платежи. Если это так, вы можете сделать это, передавая данные карты через шифрование на стороне клиента:
curl -u "[email protected]":"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" : "[email protected]",
"shopperReference" : "Simon Hopper",
"recurring" : {
"contract" : "RECURRING"}
}' \
https://pal-test.adyen.com/pal/servlet/Payment/v18/authorise
Чтобы использовать эти детали позже, вы должны предоставить только эти данные:
curl -u "[email protected]":"YourWsPassword" \
-H "Content-Type: application/json" \
-X POST --data \
'{
"amount" : {
"value" : 20000,
"currency" : "EUR"},
"reference" : "Your Reference Here",
"merchantAccount" : "TestMerchant",
"shopperEmail" : "[email protected]",
"shopperReference" : "Simon Hopper",
"selectedRecurringDetailReference" : "LATEST",
"shopperInteraction" : "ContAuth",
"recurring" : {
"contract" : "RECURRING"}
}' \
https://pal-test.adyen.com/pal/servlet/Payment/v18/authorise