Платежные запросы
ЗАПРОСЫ ДЛЯ РЕГИСТРАЦИИ ИНДИВИДУАЛЬНЫХ ПРЕДПРИНИМАТЕЛЕЙ И ЮРИДИЧЕСКИХ ЛИЦ
ЗАПРОСЫ ДЛЯ РЕГИСТРАЦИИ ФИЗИЧЕСКОГО ЛИЦА

7. Приём платежей в пользу разных продавцов одной операцией (Мультикорзина)

Мультикорзина позволяет покупателю оформить заказ с товарами нескольких продавцов и оплатить одним платежом.

Процесс оплаты для маркетплейса будет состоять из двух этапов.

Первый этап - прием платежа с банковской карты покупателя на транзитный счет маркетплейса в системе МОНЕТА.РУ (Создание родительской операции)

Принять платеж можно одним из способов, указанных в Разделе 1. "Прием платежей с банковской карты на маркетплэйсе или в виджете" документации.

В ответ на проведение платежа система МОНЕТА.РУ сообщит номер операции в параметре MNT_OPERATION_ID, этот номер операции маркетплейсу необходимо запомнить и учитывать у себя в системе.

Второй этап - перевод принятого платежа с транзитного счета маркетплейса на расширенный счет продавца в системе МОНЕТА.РУ.

Расширенный счет в системе МОНЕТА.РУ открывают только продавцы индивидуальные предприниматели и юридические лица.

Для перевода денежных средств с транзитного счета маркетплейса на расширенные счета продавцов в системе МОНЕТА.РУ необходимо использовать запрос PaymentRequest в рамках интерфейса MONETA.MerchantAPI, где payer=НОМЕР ТРАНЗИТНОГО СЧЕТА ПЛОЩАДКИ, а payee=НОМЕР РАСШИРЕННОГО СЧЕТА ПРОДАВЦА.

Запрос:
{
"Envelope":{
"Header":{
"Security":{
"UsernameToken":{
"Username":"Username",
"Password":"Password"
}
}
},
"Body":{
"PaymentRequest":{
"payer":"НОМЕР ТРАНЗИТНОГО СЧЕТА ПЛОЩАДКИ",
"payee":"НОМЕР РАСШИРЕННОГО СЧЕТА ПРОДАВЦА",
"amount":"СУММА",
"clientTransaction":"внешний идентификатор транзакции",
"operationInfo":{
"attribute":[
{
"key":"PARENTID",
"value":"12345678"
}
]
}
}
}
}
}
Ответ:
"Envelope":{
"Body":{
"PaymentResponse":{
"transaction": "номер операции в системе МОНЕТУ.РУ",
"dateTime": "2019-01-25T15:35:32.000+03:00",
"status": "SUCCESS",
"clientTransaction": "внешний идентификатор транзакции"
}
}
}
<?php
$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);
try {
$monetaSdk = new \Moneta\MonetaSdk();
$monetaSdk->checkMonetaServiceConnection();
$request = new \Moneta\Types\PaymentRequest();
//номер счёта (в системе МОНЕТА.РУ) для списания средств
//номер транзитного счёта магазина/маркетплейса
$request->payer = '';
//номер счёта (в системе МОНЕТА.РУ) для зачисления средств
//номер расширенного счёта организации/продавца
$request->payee = '';
//сумма перевода
$request->amount = '15.00';
//номер транзакции в учётной системе магазина/маркетплейса.
$request->clientTransaction = 'my-order-id-15_2';
//платёжный пароль магазина/маркетплейса.
$request->paymentPassword = '*******************';
$operation = new \Moneta\Types\OperationInfo();
//в параметре указывается номер базовой операции - это операция платежа на транзитный счёт магазина/маркетплейса.
$attribute = new \Moneta\Types\KeyValueAttribute();
$attribute->key = 'PARENTID';
$attribute->value = '';
$operation->addAttribute($attribute);
$request->operationInfo = $operation;
//запрос на перевод средств внутри системы МОНЕТА.РУ
//с транзитного счёта магазина/маркетплейса на расширенный счёт организации(продавца)
$result = $monetaSdk->monetaService->Payment($request);
if (!$result['id']) {
throw new Exception(print_r($result, true));
}
echo "Запрос обработан.";
foreach ($result['attribute'] as $key => $attribute) {
if ('statusid' === $attribute['key']) {
if ((new \Moneta\Types\OperationStatus())::SUCCEED !== $attribute['value']) {
echo " Операция НЕ проведена полностью.";
}
break;
}
}
} catch (Exception $e) {
echo "Ошибка:<br />";
echo "<pre>" . $e->getMessage() . "</pre>";
}

В атрибутах перевода необходимо указать номер базовой операции в поле PARENTID.

Количество переводов с транзитного счета торговой площадки на расширенные счета продавцов будет равным количеству продавцов в заказе.

Для перевода денежных средств с расширенного счета продавца в системе МОНЕТА.РУ на банковские реквизиты продавца так же необходимо использовать запрос PaymentRequest в рамках интерфейса MONETA.MerchantAPI, где payer=НОМЕРА РАСШИРЕННОГО СЧЕТА ПРОДАВЦА, а payee=5.

Запрос:
{
"Envelope":{
"Header":{
"Security":{
"UsernameToken":{
"Username":"Username",
"Password":"Password"
}
}
},
"Body":{
"PaymentRequest":{
"payer":НОМЕР РАСШИРЕННОГО СЧЕТА ПРОДАВЦА,
"payee":5,
"amount":10,
"clientTransaction":"Внешний номер операции",
"paymentPassword":12345,
"isPayerAmount":true,
"operationInfo":{
"attribute":[
{
"key":"WIREPAYMENTPURPOSE",
"value":"Перечисление суммы переводов денежных средств по Договору № ___ от DD.MM.YYYY. НДС не облагается."
}
]
}
}
}
}
}
<?php
$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);
try {
$monetaSdk = new \Moneta\MonetaSdk();
$monetaSdk->checkMonetaServiceConnection();
$request = new \Moneta\Types\PaymentRequest();
//номер счёта (в системе МОНЕТА.РУ) для списания средств
//номер расширенного счёта организации(продавца)
$request->payer = '';
//получатель перевода
//5 - будет осуществлён банковский перевод по реквизитам; в банк организации(продавца)
$request->payee = '5';
//сумма перевода
$request->amount = '15.00';
//номер транзакции в учётной системе магазина/маркетплейса.
$request->clientTransaction = 'my-order-id-15_3';
//платёжный пароль магазина/маркетплейса.
$request->paymentPassword = '**************';
$request->isPayerAmount = true;
$request->description = 'Перечисление на банковские реквизиты организации(продавца)';
//запрос на перевод средств
//с расширенного счёта организации(продавца) на банковские реквизиты организации(продавца)
$result = $monetaSdk->monetaService->Payment($request);
if (!$result['id']) {
throw new Exception(print_r($result, true));
}
echo "Запрос обработан.";
foreach ($result['attribute'] as $key => $attribute) {
if ('statusid' === $attribute['key']) {
if ((new \Moneta\Types\OperationStatus())::SUCCEED !== $attribute['value']) {
echo " Операция НЕ проведена полностью.";
}
break;
}
}
} catch (Exception $e) {
echo "Ошибка:<br />";
echo "<pre>" . $e->getMessage() . "</pre>";
}

Все запросы передаются в рамках интерфейса MONETA.MerchantAPI.

Интерфейс MONETA.MerchantAPI представляет собой Web-сервис, описанный по спецификации Web Services Description Language (WSDL), использующий протокол Simple Object Access Protocol (SOAP) для передачи информации.