180 lines
10 KiB
Markdown
180 lines
10 KiB
Markdown
## Обработка http-уведомлений от Монеты
|
||
|
||
[Документация Монеты](https://docs.moneta.ru/)
|
||
|
||
* [Минимальный ответ на платежное уведомление (PayURL)](#Минимальный-ответ-pay-url)
|
||
* [Ответ с передачей номенклатуры (PayURL)](#Ответ-с-номенклатурой-pay-url)
|
||
* [Ответ на проверочный запрос с передачей номенклатуры (CheckURL)](#Ответ-с-номенклатурой-pay-url)
|
||
* [Документация SDK](#Документация)
|
||
---
|
||
### Минимальный ответ на платежное уведомление (PayURL)<a name="Минимальный-ответ-pay-url"></a>
|
||
|
||
[Минимальный ответ в документации](https://docs.moneta.ru/payments/payment-notification/)
|
||
|
||
Чтобы сгенерировать минимальный ответ для платежного уведомления от Монеты, требуется создать объект `MonetaSDK` и передать номер заказа. В результате для Монеты будет предоставлен минимальный ответ `SUCCESS` и на стороне платежной системы статус операции будет изменен на "Выполнена"
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$orderId = $_POST['MNT_TRANSACTION_ID'];
|
||
$mSdk = new Moneta\MonetaSdk($orderId);
|
||
$mSdk->responseToPaymentNotification();
|
||
```
|
||
---
|
||
### Ответ с передачей номенклатуры (PayURL)<a name="Ответ-с-номенклатурой-pay-url"></a>
|
||
|
||
[Ответ с передачей номенклатуры в документации (раздел "Передача номенклатуры через ответ скрипта Pay URL")](https://docs.moneta.ru/54-fz/module/_index.files/Assistant54FZ.pdf)
|
||
|
||
Чтобы передать номенклатуру в ответе на платежное уведомление, нужно создать объект `MonetaSdkReceipt` и заполнить переменные объекта:
|
||
1. `items`* --- переменная товаров, тип `array`.
|
||
В примере ниже показан максимальный и минимальный набор передаваемых параметров товара. Подробное о параметрах и их значениях можно прочитать в [документации раздел "Передача номенклатуры через ответ скрипта Pay URL"](https://docs.moneta.ru/54-fz/module/_index.files/Assistant54FZ.pdf).
|
||
|
||
> Обратите внимание, что значения `vat` отличаются от того, что написано в документации:
|
||
> `none` - без НДС
|
||
> `vat0` - НДС по ставке 0%
|
||
> `vat10` - НДС чека по ставке 10%
|
||
> `vat110` - НДС чека по расчетной ставке 10/110
|
||
> `vat20` - НДС чека по ставке 20%
|
||
> `vat120` - НДС чека по расчетной ставке 20/120
|
||
> `vat5` - 5%
|
||
> `vat15` - по расчётной ставке 5%
|
||
> `vat7` - 7%
|
||
> `vat17` - по расчётной ставке 7
|
||
|
||
2. `customer`* --- переменная плательщика, тип `array`.
|
||
Используется для отправки чека. Параметр `email` --- обязательный
|
||
3. `delivery` --- переменная доставки, тип `float`.
|
||
Если есть доставка, то указать ее стоимость.
|
||
|
||
Параметры, отмеченные *, являются обязательными. Их нужно передать при создании объекта MonetaSDKReceipt.
|
||
|
||
После этого создайте объект `MonetaSDK`, передав номер заказа и сумму. Затем вызовите метод `responseToPaymentNotification`, передайте в него ранее созданный объект `MonetaSdkReceipt`. В результате система Монета получит ответ в формате XML, статус операции изменится на "Выполнена", а в кассовый сервис [kassa.payanyway](https://kassa.payanyway.ru/) будет передана номенклатура для печати чеков.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$mSdkReceipt = new Moneta\MonetaSdkReceipt();
|
||
|
||
// "Тестовый товар №1" ——— максимальный набор параметров товара
|
||
// "Тестовый товар №2" ——— минимальный набор параметров товара
|
||
$mSdkReceipt->items = [
|
||
[
|
||
'name' => 'Тестовый товар №1',
|
||
'price' => 123.45,
|
||
'quantity' => 1,
|
||
'measure' => 'шт',
|
||
"paymentMethod" => "full_payment",
|
||
"paymentObject" => "commodity",
|
||
'vat' => 'none',
|
||
'agentInfo' => [
|
||
'type' => 'payment_agent',
|
||
],
|
||
'supplierInfo' => [
|
||
'name' => 'Поставщик 1',
|
||
'inn' => '1234567890',
|
||
'phones' => [
|
||
'79995558844',
|
||
'79998855221'
|
||
]
|
||
]
|
||
],
|
||
[
|
||
'name' => 'Тестовый товар №2',
|
||
'price' => 999,
|
||
'quantity' => 2,
|
||
]
|
||
];
|
||
|
||
$mSdkReceipt->customer = [
|
||
'email' => 'com@moneta.ru',
|
||
'phone' => '74956465848'
|
||
];
|
||
|
||
$mSdkReceipt->delivery = 456.78;
|
||
|
||
$orderId = $_POST['MNT_TRANSACTION_ID'];
|
||
$mSdk = new Moneta\MonetaSdk($orderId);
|
||
$mSdk->responseToPaymentNotification($mSdkReceipt);
|
||
```
|
||
---
|
||
### Ответ на проверочный запрос с передачей номенклатуры (CheckURL)<a name="Ответ-с-номенклатурой-check-url"></a>
|
||
|
||
[Ответ на проверочный запрос с передачей номенклатуры (раздел "Ответ на проверочный запрос (check url - уведомление)")](https://www.payanyway.ru/info/p/ru/public/merchants/cmsspecification.pdf)
|
||
|
||
Если вы используете кассу БПА ПА (Payanyway) и в настройках счёта указан CheckURL, вам нужно ответить на проверочный запрос, передав номенклатуру. Ответ нужно предоставить до оплаты. Если система магазина не ответит на запрос, пользователь не сможет перейти к оплате.
|
||
Чтобы передать номенклатуру в ответе, создайте объект `MonetaSdkReceipt` и заполните его переменные:
|
||
1. `items`* --- переменная товаров, тип `array`.
|
||
В примере ниже показан максимальный и минимальный набор передаваемых параметров товара. Подробное о параметрах и их значениях можно прочитать в документации в разделе "Ответ на проверочный запрос (check url - уведомление)".
|
||
2. `customer`* --- переменная плательщика, тип `array`.
|
||
Используется для отправки чека. Параметр `email` --- обязательный
|
||
3. `delivery` --- переменная доставки, тип `float`.
|
||
Если есть доставка, то указать ее стоимость.
|
||
|
||
`*` --- обязательная переменная, её нужно заполнить.
|
||
|
||
После заполнения переменных создайте объект `MonetaSDK`, передав номер заказа и сумму. Затем вызовите метод `responseToCheckRequest`, передав в него ранее созданный объект `MonetaSdkReceipt`. В результате система Монета получит ответ в формате JSON, и пользователь сможет перейти на страницу оплаты.
|
||
```php
|
||
include_once('vendor/autoload.php');
|
||
|
||
$mSdkReceipt = new Moneta\MonetaSdkReceipt();
|
||
$mSdkReceipt->items = [
|
||
[
|
||
'name' => 'Тестовый товар №1',
|
||
'price' => 123.45,
|
||
'quantity' => 1,
|
||
'measure' => 'шт',
|
||
"paymentMethod" => "full_payment",
|
||
"paymentObject" => "commodity",
|
||
'vat' => 'none',
|
||
'agentInfo' => [
|
||
'payingAgent' => [
|
||
'operation' => 'Наименование операции банковского платежного агента',
|
||
'phones' => [
|
||
'79995558844',
|
||
'79998855221'
|
||
]
|
||
],
|
||
'supplierInfo' => [
|
||
'name' => 'Поставщик 1',
|
||
'inn' => '1346',
|
||
'phones' => [
|
||
'79995558844',
|
||
'79998855221'
|
||
]
|
||
]
|
||
]
|
||
],
|
||
[
|
||
'name' => 'Тестовый товар2',
|
||
'price' => 999,
|
||
'quantity' => 2,
|
||
]
|
||
];
|
||
|
||
$mSdkReceipt->customer = [
|
||
'name' => 'Иванов Иван Иванович',
|
||
'inn' => '1234567890',
|
||
'email' => 'com@moneta.ru',
|
||
'phone' => '75556664477'
|
||
];
|
||
|
||
$mSdkReceipt->additionalCheckProp = 'Дополнительный реквизит чека';
|
||
|
||
$mSdkReceipt->additionalUserProps = [
|
||
'name' => 'Доп. реквизиты пользователя',
|
||
'value' => 'Значение',
|
||
];
|
||
|
||
$mSdkReceipt->delivery = 456.78;
|
||
|
||
$orderId = $_POST['MNT_TRANSACTION_ID'];
|
||
$amount = $_POST['MNT_AMOUNT'];
|
||
$mSdk = new Moneta\MonetaSdk($orderId, $amount);
|
||
$mSdk->responseToCheckRequest($mSdkReceipt);
|
||
```
|
||
|
||
> **Если вы передаете номенклатуру в ответе на проверочный запрос, то на платежное уведомление можно отдать минимальный ответ в виде SUCCESS ([Пример](#Минимальный-ответ-pay-url))**.
|
||
|
||
---
|
||
## Документация SDK <a name="Документация"></a>
|
||
- #### [Описание config-файлов](config.md);
|
||
- #### [Базовые методы](baseMethods.md);
|
||
- #### [Методы MerchantAPI](merchantAPI.md). |