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) для передачи информации.

Last updated