Мультикорзина позволяет покупателю оформить заказ с товарами нескольких продавцов и оплатить одним платежом.
Процесс оплаты для маркетплейса будет состоять из двух этапов.
Первый этап - прием платежа с банковской карты покупателя на транзитный счет маркетплейса в Системе "МОНЕТА.РУ" (Создание родительской операции)
Принять платеж можно одним из способов, указанных в Разделе 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":{"id":"номер операции в системе МОНЕТУ.РУ","attribute": [... {"value":"SUCCEED","key":"statusid" }... ] } }}
<?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']) {thrownewException(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']) {thrownewException(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) для передачи информации.