Для удобства покупателей маркетплейс может использовать токен, который позволит покупателю не указывать номер карты при следующих платежах.
Покупатель на платежной форме будет указывать только 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) для передачи информации.