moneta-sdk-php/docs/notifications.md

180 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Обработка 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).