145 lines
11 KiB
Markdown
145 lines
11 KiB
Markdown
## Методы MerchantAPI
|
||
|
||
[Документация Монеты](https://docs.moneta.ru/)
|
||
|
||
* [Однофазный платеж](#однофазный-платеж)
|
||
* [Двухфазный платеж (операция с холдированием)](#двухфазный-платеж)
|
||
* [Подтверждение операции](#подтверждение-операции)
|
||
* [Отмена операции](#отмена-операции)
|
||
* [Привязка карты (получение токена для рекуррентных платежей)](#привязка-карты)
|
||
* [Оплата по рекуррентному токену](#рекуррентный-платеж)
|
||
* [Возврат по операции](#возврат)
|
||
* [Получить детали операции по ID](#детали-операции-по-id)
|
||
* [Документация SDK](#Документация)
|
||
---
|
||
> **Эти методы доступны только для юридических лиц и ИП. Чтобы узнать, поддерживает ли ваш бизнес-счёт рекуррентные платежи и операции с холдированием, обратитесь в коммерческий отдел: com@payanyway.ru.**
|
||
|
||
### Однофазный платеж <a name="однофазный-платеж"></a>
|
||
|
||
[Однофазный платеж в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--invoice-request--simple)
|
||
|
||
Создайте объект `MonetaSdk`, передав номер заказа и сумму, а также по желанию описание. Затем вызовите метод `createInvoice`, будет возвращен номер операции в системе Монета. Данный номер операции требуется передать в метод `getPaymentLink`, тем самым можно получить ссылку на оплату, по которой надо будет перевести плательщика.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$mSdk = new Moneta\MonetaSdk(uniqid('', true), 123.45);
|
||
$operationId = $mSdk->createInvoice();
|
||
$paymentLink = $mSdk->getPaymentLink($operationId);
|
||
|
||
if (!empty($paymentLink)) {
|
||
header('Location: ' . $paymentLink);
|
||
}
|
||
```
|
||
---
|
||
### Двухфазный платеж (операция с холдированием) <a name="двухфазный-платеж"></a>
|
||
|
||
[Двухфазный платеж в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--invoice-request--hold)
|
||
|
||
Создайте объект `MonetaSdk`, передав номер заказа и сумму, а также по желанию описание. Затем вызовите метод `createInvoice` и передайте в качестве аргумента true, будет возвращен номер операции с холдированием в системе Монета. Данный номер операции требуется передать в метод `getPaymentLink`, тем самым можно получить ссылку на оплату, по которой надо будет перевести плательщика.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$mSdk = new Moneta\MonetaSdk(uniqid('', true), 123.45);
|
||
$operationId = $mSdk->createInvoice(true);
|
||
$paymentLink = $mSdk->getPaymentLink($operationId);
|
||
|
||
if (!empty($paymentLink)) {
|
||
header('Location: ' . $paymentLink);
|
||
}
|
||
```
|
||
|
||
> **При проведении двухфазного платежа(холдирование), нужно подтвердить или отменить операцию.**
|
||
---
|
||
### Подтверждение операции<a name="подтверждение-операции"></a>
|
||
|
||
[Подтверждение операции в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--confirm-transaction-request)
|
||
|
||
Чтобы подтвердить операцию нужно создать объект `MonetaSdk`, передать номер заказа и вызвать метод `confirmInvoice`, передав номер операции. В ответе будет возвращен массив с информацией об операции.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$orderId = $_POST['MNT_TRANSACTION_ID'];
|
||
$operationId = $_POST['MNT_OPERATION_ID'];
|
||
$mSdk = new Moneta\MonetaSdk($transactionId);
|
||
$mSdk->confirmInvoice($operationId);
|
||
```
|
||
---
|
||
### Отмена операции<a name="отмена-операции"></a>
|
||
|
||
[Отмена операции в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--cancel-transaction-request)
|
||
|
||
Чтобы отменить операцию нужно создать объект `MonetaSdk`, передать номер заказа и вызвать метод `confirmInvoice`, передав номер операции. В ответе будет возвращен массив с информацией об операции.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$orderId = $_POST['MNT_TRANSACTION_ID'];
|
||
$operationId = $_POST['MNT_OPERATION_ID'];
|
||
$mSdk = new Moneta\MonetaSdk($transactionId);
|
||
$mSdk->cancelInvoice($operationId);
|
||
```
|
||
---
|
||
### Привязка карты (получение токена для рекуррентных платежей)<a name="привязка-карты"></a>
|
||
|
||
[Привязка карты в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--payment-request--get-token-only)
|
||
|
||
Для привязки карты создайте объект `MonetaSdk`, передав номер, сумму заказа, и, при необходимости, описание. Затем вызовите метод `createRecurrentInvoice` — он вернёт номер операции в системе Монета.в. Этот номер нужно передать в метод `getPaymentLink`, чтобы получить ссылку для оплаты, по которой надо будет перевести плательщика.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$mSdk = new Moneta\MonetaSdk(uniqid('', true), 456.78);
|
||
$operationId = $mSdk->createRecurrentInvoice();
|
||
$paymentLink = $mSdk->getPaymentLink($operationId);
|
||
|
||
if (!empty($paymentLink)) {
|
||
header('Location: ' . $paymentLink);
|
||
}
|
||
```
|
||
На платежной форме плательщику потребуется ввести свои карточный данные, а также поставить галочку в чекбоксе "Запомнить карту". После успешной оплаты, на указанный PayURL, указанный в настройках бизнес-счета будет отправлено http-уведомление, в котором будет передан токен для рекуррентных платежей (название параметра в уведомлении: `paymenttoken`). Чтобы проводить рекуррентный платеж без дальнейшего участия плательщика: требуется записать токен в базу данны.___
|
||
### Оплата по рекуррентному токену<a name="рекуррентный-платеж"></a>
|
||
|
||
[Оплата по рекуррентному токену в документации](https://docs.moneta.ru/protocols/#post-/-MRCHNT--payment-request--by-token)
|
||
|
||
Чтобы привязать карту, создайте объект `MonetaSdk`, передав номер заказа, сумму и, при необходимости, описание. Затем вызовите метод recurringPayment, передав токен плательщика, который получили и сохранили в сценарии "[Привязка карты (получение токена для рекуррентных платежей)](#привязка-карты)". В ответе вы получите массив с информацией об операции.
|
||
```php
|
||
include_once("moneta-sdk-lib/autoload.php");
|
||
|
||
$paymentToken = '123456';
|
||
$mSdk = new Moneta\MonetaSdk(uniqid('', true), 123.45, 'Оплата за подписку, январь 2025');
|
||
$mSdk->recurringPayment($paymentToken);
|
||
```
|
||
|
||
> Обратите внимание: при вызове `recurringPayment` в системе Монеты к переданному номеру заказа добавится "_MONETA" с временной меткой. Например, "6787bc9f456b29.67450389_MONETA1736948895". Это нужно для уникальности номера заказа, иначе операция не создастся. Чтобы получить исходный номер заказа из уведомления, разделите MNT_TRANSACTION_ID с помощью функции `explode`: `explode('_MONETA', $transactionId)[0]`.
|
||
---
|
||
### Возврат по операции<a name="возврат"></a>
|
||
|
||
[Возврат по операции в документации (стр. 218)](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf)
|
||
|
||
Чтобы выполнить возврат, создайте объект `MonetaSdk`, передав номер, сумму возврата и, при необходимости, описание. Затем вызовите метод refund, передав номер операции из системы Монета. В ответе вы получите массив с информацией о возврате.
|
||
```php
|
||
include_once("moneta-sdk-lib/autoload.php");
|
||
|
||
$mSdk = new Moneta\MonetaSdk(uniqid('', true), 123.45, 'Возврат по заказу ' . uniqid('', true));
|
||
$operationId = 1234567890;
|
||
$mSdk->refund($operationId);
|
||
```
|
||
---
|
||
### Получить детали операции по ID<a name="детали-операции-по-id"></a>
|
||
|
||
[Возврат по операции в документации (стр. 240)](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf)
|
||
|
||
Создайте объект `MonetaSdk`, передав пустой номер заказа. Затем вызовите метод `getOperationDetailsById`, передав номер операции, по которой нужно получить информацию. В ответе вам вернется массив с информацией об операции в системе Монета.
|
||
|
||
```php
|
||
include_once("moneta-sdk-lib/autoload.php");
|
||
|
||
$mSdk = new Moneta\MonetaSdk('');
|
||
$operationId = 1234567890;
|
||
$mSdk->getOperationDetailsById($operationId);
|
||
```
|
||
|
||
---
|
||
## Документация SDK <a name="Документация"></a>
|
||
- #### [Базовые методы](baseMethods.md);
|
||
- #### [Описание config-файлов](config.md);
|
||
- #### [Обработка http-уведомлений от Монеты](notifications.md);
|