4. Запоминание банковской карты и прием платежей с сохраненной картой.
Для удобства покупателей маркетплейс может использовать токен, который позволит покупателю не указывать номер карты при следующих платежах.
Покупатель на платежной форме будет указывать только CVV-код.
Последовательность действий, при приеме платежей с запоминанием карты:
1. Маркетплейс создает базовую операцию методом InvoiceRequest с помощью интерфейса MONETA.MerchantAPI без дополнительных параметров.
Запрос:
{
"Envelope":{
"Header":{
"Security":{
"UsernameToken":{
"Username":"Username",
"Password":"Password"
}
}
},
"Body":{
"InvoiceRequest":{
"payer":НОМЕР СЧЕТА ПЛАТЕЛЬЩИКА,
"payee":НОМЕР СЧЕТА ПОЛУЧАТЕЛЯ,
"amount":1000,
"clientTransaction":"TEST",
"description":"TEST"
}
}
}
}
Ответ:
{
"Envelope":{
"Body":{
"InvoiceResponse":{
"dateTime":" YYYY-MM-DDT08:55:03.000+03:00",
"clientTransaction":"TEST",
"transaction":номер базовой операции,
"status":"CREATED"
}
}
}
}
<?php
$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);
try {
$monetaSdk = new \Moneta\MonetaSdk();
$monetaSdk->checkMonetaServiceConnection();
$request = new \Moneta\Types\InvoiceRequest();
//номер счёта плательщика (счёт для списания средств).
$request->payer = '';
//номер счёта получателя (счёт для зачисления средств)
$request->payee = '';
//сумма инвойса
$request->amount = '11.00';
//описание инвойса
$request->description = 'Краткое описание';
//номер инвойса в учётной системе магазина/маркетплейса.
$request->clientTransaction = 'my-order-id-11';
//создание нового инвойса
$result = $monetaSdk->monetaService->Invoice($request);
if (!$result['transaction']) {
throw new Exception(print_r($result, true));
}
//номер операции: необходим для предоставления формы оплаты покупателю
echo "Номер операции: " . $result['transaction'];
} catch (Exception $e) {
echo "Ошибка:<br />";
echo "<pre>" . $e->getMessage() . "</pre>";
}
2. Маркетплейс переводит покупателя на платежную форму MONETA.Assistant с параметром operationId, равным значению operationId базовой операции и с обязательным параметром MNT_SUBSCRIBER_ID: https://www.moneta.ru/assistant.htm?operationId=номер базовой операции&MNT_SUBSCRIBER_ID=12345
https://www.moneta.ru/assistant.widget?operationId=номер базовой операции&MNT_SUBSCRIBER_ID=12345
3. Маркетплейс создает операцию платежа методом InvoiceRequest с помощью интерфейса MONETA.MerchantAPI с параметром PAYMENTTOKEN, равным значению operationId базовой операции с ведущим нулем.
{
"Envelope":{
"Header":{
"Security":{
"UsernameToken":{
"Username":"Username",
"Password":"Password"
}
}
},
"Body":{
"InvoiceRequest":{
"payer":НОМЕР СЧЕТА ПЛАТЕЛЬЩИКА,
"payee":НОМЕР СЧЕТА ПОЛУЧАТЕЛЯ,
"amount":10,
"clientTransaction":"test",
"description":"test",
"operationInfo":{
"attribute":[
{
"key":"PAYMENTTOKEN",
"value":"0НОМЕР БАЗОВОЙ ОПЕРАЦИИ"
}
]
}
}
}
}
}
Ответ:
{
"Envelope":{
"Body":{
"InvoiceResponse":{
"dateTime":"YYYY-MM-DDT08:55:03.000+03:00",
"clientTransaction":"test",
"transaction":98765432,
"status":"CREATED"
}
}
}
}
<?php
$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);
try {
$monetaSdk = new \Moneta\MonetaSdk();
$monetaSdk->checkMonetaServiceConnection();
$request = new \Moneta\Types\InvoiceRequest();
//номер счёта плательщика (счёт для списания средств) в системе МОНЕТА.РУ.
$request->payer = '';
//номер счёта получателя (счёт для зачисления средств) в системе МОНЕТА.РУ.
$request->payee = '';
//сумма инвойса
$request->amount = '12.00';
//описание инвойса
$request->description = 'Инвойс только с вводом контрольных цифр';
//номер инвойса в учётной системе магазина/маркетплейса.
$request->clientTransaction = 'my-order-id-12';
$operation = new \Moneta\Types\OperationInfo();
//параметр должен содержать значение transaction базовой операции с добавлением ноля в начало строки
$attribute = new \Moneta\Types\KeyValueAttribute();
$attribute->key = 'PAYMENTTOKEN';
$attribute->value = '';
$operation->addAttribute($attribute);
$request->operationInfo = $operation;
//создание нового инвойса
$result = $monetaSdk->monetaService->Invoice($request);
if (!$result['transaction']) {
throw new Exception(print_r($result, true));
}
//номер операции: необходим для предоставления формы оплаты покупателю
echo "Номер операции: " . $result['transaction'];
} catch (Exception $e) {
echo "Ошибка:<br />";
echo "<pre>" . $e->getMessage() . "</pre>";
}
4. Маркептлейс переводит покупателя на платежную форму MONETA.Assistant с параметром operationId, который был получен на третьем шаге и с обязательным параметром MNT_SUBSCRIBER_ID: https://www.moneta.ru/assistant.widget?operationId=98765432&MNT_SUBSCRIBER_ID=12345.
Параметр MNT_SUBSCRIBER_ID должен совпадать с аналогичным параметром в базовой операции, иначе оплата будет запрещена.
https://www.moneta.ru/assistant.widget?operationId=98765432&MNT_SUBSCRIBER_ID=12345.
После перехода на платежную форму покупателю необходимо ввести CVV-код.
Запросы маркетплейс отправляет в рамках интерфейса MONETA.MerchantAPI.
Интерфейс MONETA.MerchantAPI представляет собой Web-сервис, описанный по спецификации Web Services Description Language (WSDL), использующий протокол Simple Object Access Protocol (SOAP) для передачи информации.