Добавить REST-обработчик платежной системы sale.paysystem.handler.add
Scope:
pay_systemКто может выполнять метод: администратор CRM (право «Разрешить изменять настройки»)
Метод добавляет REST-обработчик платежной системы.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
NAME* |
Название REST-обработчика |
|
SORT |
Сортировка. По умолчанию |
|
CODE* |
Код REST-обработчика. Должен быть уникальным среди всех обработчиков |
|
SETTINGS* |
Настройки обработчика (подробное описание приведено ниже) |
Параметр SETTINGS
Обязательные параметры отмечены *
В зависимости от используемого режима работы обязательно наличие одного из следующих параметров: FORM_DATA, CHECKOUT_DATA, IFRAME_DATA.
|
Название |
Описание |
|
CODES* |
Список параметров обработчика. Ключами являются коды параметров ( Значения параметров будут доступны администратору для заполнения в настройках созданной платежной системы. Их можно задать при добавлении платежной системы в методе sale.paysystem.add в параметре |
|
FORM_DATA |
Настройки формы при использовании режима работы в форме |
|
CHECKOUT_DATA |
Настройки режима Checkout (создание заказа на стороне сервиса и переход покупателя на эту страницу для оплаты) |
|
IFRAME_DATA |
Настройки страницы, выводимой в iframe на сайте продавца на странице оплаты |
|
CLIENT_TYPE |
Тип покупателей, с которыми может работать обработчик. Доступные значения:
Значение по умолчанию |
|
CURRENCY |
Список валют, работа с которыми поддерживается платежной системой. По умолчанию пуст |
Параметр CODES
|
Название |
Описание |
|
NAME |
Название параметра |
|
DESCRIPTION |
Описание параметра |
|
SORT |
Сортировка |
|
GROUP |
Код группы, к которой относится параметр |
|
DEFAULT |
Описание значения по умолчанию (подробное описание приведено ниже) |
|
INPUT |
Объект, описывающий поле ввода. Структура объекта содержит параметр
|
Параметр DEFAULT
|
Название |
Описание |
|
PROVIDER_KEY |
Ключ провайдера, из которого будет браться значение по умолчанию. Возможные значения ключа приведены ниже |
|
PROVIDER_VALUE |
Код значения, которое будет взято у провайдера. Возможные значения ключа приведены ниже |
Возможные значения ключа PROVIDER_KEY
|
Название |
Описание |
|
ORDER |
Заказ |
|
PROPERTY |
Свойства счета |
|
PAYMENT |
Оплата |
|
USER |
Пользователь |
|
VALUE |
Произвольное значение типа строка |
|
Y\N |
Флажок |
Возможные значения ключа PROVIDER_VALUE
|
Название |
Описание |
|
ORDER |
|
|
PAYMENT |
|
|
USER |
|
Режим работы в форме
При добавлении обработчика в параметре SETTINGS нужно передать параметр FORM_DATA. Способ подходит, если от покупателя ничего не нужно запрашивать либо же нужно запросить небольшой набор данных.
Поля формы автоматически выводятся в соответствии с дизайном страницы оплаты.
Данные формы (значения FIELDS из FORM_DATA) будут отправлены на ACTION_URI. Помимо данных, определенных в FORM_DATA, с формой также будут отправлены два системных ключа:
|
Название |
Описание |
|
BX_PAYSYSTEM_ID |
Идентификатор платежной системы, через которую совершается оплата. Может быть использован для вызова метода оплаты sale.paysystem.pay.payment |
|
BX_RETURN_URL |
Адрес сайта магазина, на который будет перенаправлен пользователь |
Параметры, передаваемые при добавлении обработчика в массиве FORM_DATA
Обязательные параметры отмечены *
|
Название |
Описание |
|
ACTION_URI* |
URL, на который отправляется форма |
|
METHOD |
HTTP-метод, используемый при отправке формы. По умолчанию пусто, при этом используется метод GET |
|
FIELDS |
Описание полей формы (подробное описание приведено ниже) |
|
PARAMS |
Описание полей формы. Параметр является устаревшим, рекомендуется использовать параметр Представляет собой карту соответствия между названиями полей в форме ( Поля добавляются в форму как элементы типа Если передавать и |
Параметр FIELDS
Обязательные параметры отмечены *
Представляет собой массив описаний полей, выводимых в форме и отправляемых на ACTION_URI. Ключом является код поля, используемый в качестве названия поля в форме. В качестве значений используется объект параметров поля.
|
Название |
Описание |
|
CODE* |
Если значение ключа Если в ключе |
|
VISIBLE |
Показывается ли поле в форме для ввода. Доступные значения:
По умолчанию значение |
Параметр CODE
|
Название |
Описание |
|
NAME |
Название поля |
|
INPUT |
Описание поля ввода. Содержит ключ
|
Примеры кода
Как использовать примеры в документации
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest FORM","CODE":"resthandlerform","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","FORM_DATA":{"ACTION_URI":"http://example.com/payment_form.php","METHOD":"POST","FIELDS":{"phone":{"VISIBLE":"Y","CODE":{"NAME":"Номер телефона","TYPE":"STRING"}},"selection":{"VISIBLE":"Y","CODE":{"NAME":"Иллюзия выбора","INPUT":{"TYPE":"Y/N"}}},"paymentId":{"CODE":"PAYMENT_ID","VISIBLE":"Y"},"serviceid":{"CODE":"REST_SERVICE_ID"}}},"CODES":{"REST_SERVICE_ID":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PAYMENT_ID":{"NAME":"Номер оплаты","SORT":"400","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"PAYMENT","PROVIDER_VALUE":"ACCOUNT_NUMBER"}},"PAYMENT_SHOULD_PAY":{"NAME":"Сумма оплаты","SORT":"600","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"PAYMENT","PROVIDER_VALUE":"SUM"}},"PS_CHANGE_STATUS_PAY":{"NAME":"Автоматическая смена статуса оплаты","SORT":"700","INPUT":{"TYPE":"Y/N"}},"PAYMENT_BUYER_ID":{"NAME":"Код покупателя","SORT":"1000","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"ORDER","PROVIDER_VALUE":"USER_ID"}},"PS_WORK_MODE":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.paysystem.handler.add
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest FORM","CODE":"resthandlerform","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","FORM_DATA":{"ACTION_URI":"http://example.com/payment_form.php","METHOD":"POST","FIELDS":{"phone":{"VISIBLE":"Y","CODE":{"NAME":"Номер телефона","TYPE":"STRING"}},"selection":{"VISIBLE":"Y","CODE":{"NAME":"Иллюзия выбора","INPUT":{"TYPE":"Y/N"}}},"paymentId":{"CODE":"PAYMENT_ID","VISIBLE":"Y"},"serviceid":{"CODE":"REST_SERVICE_ID"}}},"CODES":{"REST_SERVICE_ID":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PAYMENT_ID":{"NAME":"Номер оплаты","SORT":"400","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"PAYMENT","PROVIDER_VALUE":"ACCOUNT_NUMBER"}},"PAYMENT_SHOULD_PAY":{"NAME":"Сумма оплаты","SORT":"600","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"PAYMENT","PROVIDER_VALUE":"SUM"}},"PS_CHANGE_STATUS_PAY":{"NAME":"Автоматическая смена статуса оплаты","SORT":"700","INPUT":{"TYPE":"Y/N"}},"PAYMENT_BUYER_ID":{"NAME":"Код покупателя","SORT":"1000","GROUP":"PAYMENT","DEFAULT":{"PROVIDER_KEY":"ORDER","PROVIDER_VALUE":"USER_ID"}},"PS_WORK_MODE":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/sale.paysystem.handler.add
try
{
const response = await $b24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest FORM",
"CODE": "resthandlerform",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"FORM_DATA": {
"ACTION_URI": "http://example.com/payment_form.php",
"METHOD": "POST",
"FIELDS": {
"phone": {
"VISIBLE": "Y",
"CODE": {
"NAME": "Номер телефона",
"TYPE": "STRING"
}
},
"selection": {
"VISIBLE": "Y",
"CODE": {
"NAME": "Иллюзия выбора",
"INPUT": {
"TYPE": "Y/N"
}
}
},
"paymentId": {
"CODE": "PAYMENT_ID",
"VISIBLE": "Y"
},
"serviceid": {
"CODE": "REST_SERVICE_ID"
}
}
},
"CODES": {
"REST_SERVICE_ID": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PAYMENT_ID": {
"NAME": "Номер оплаты",
"SORT": "400",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "PAYMENT",
"PROVIDER_VALUE": "ACCOUNT_NUMBER"
}
},
"PAYMENT_SHOULD_PAY": {
"NAME": "Сумма оплаты",
"SORT": "600",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "PAYMENT",
"PROVIDER_VALUE": "SUM"
}
},
"PS_CHANGE_STATUS_PAY": {
"NAME": "Автоматическая смена статуса оплаты",
"SORT": "700",
"INPUT": {
"TYPE": "Y/N"
}
},
"PAYMENT_BUYER_ID": {
"NAME": "Код покупателя",
"SORT": "1000",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "ORDER",
"PROVIDER_VALUE": "USER_ID"
}
},
"PS_WORK_MODE": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
);
const result = response.getData().result;
console.info(result);
}
catch(error)
{
console.error(error);
}
try {
$response = $b24Service
->core
->call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest FORM',
'CODE' => 'resthandlerform',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'FORM_DATA' => [
'ACTION_URI' => 'http://example.com/payment_form.php',
'METHOD' => 'POST',
'FIELDS' => [
'phone' => [
'VISIBLE' => 'Y',
'CODE' => [
'NAME' => 'Номер телефона',
'TYPE' => 'STRING',
],
],
'selection' => [
'VISIBLE' => 'Y',
'CODE' => [
'NAME' => 'Иллюзия выбора',
'INPUT' => [
'TYPE' => 'Y/N',
],
],
],
'paymentId' => [
'CODE' => 'PAYMENT_ID',
'VISIBLE' => 'Y',
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID',
],
],
],
'CODES' => [
'REST_SERVICE_ID' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100',
],
'REST_SERVICE_KEY' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300',
],
'PAYMENT_ID' => [
'NAME' => 'Номер оплаты',
'SORT' => '400',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'PAYMENT',
'PROVIDER_VALUE' => 'ACCOUNT_NUMBER',
],
],
'PAYMENT_SHOULD_PAY' => [
'NAME' => 'Сумма оплаты',
'SORT' => '600',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'PAYMENT',
'PROVIDER_VALUE' => 'SUM',
],
],
'PS_CHANGE_STATUS_PAY' => [
'NAME' => 'Автоматическая смена статуса оплаты',
'SORT' => '700',
'INPUT' => [
'TYPE' => 'Y/N',
],
],
'PAYMENT_BUYER_ID' => [
'NAME' => 'Код покупателя',
'SORT' => '1000',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'ORDER',
'PROVIDER_VALUE' => 'USER_ID',
],
],
'PS_WORK_MODE' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий',
],
],
],
],
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error adding payment system handler: ' . $e->getMessage();
}
BX24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest FORM",
"CODE": "resthandlerform",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"FORM_DATA": {
"ACTION_URI": "http://example.com/payment_form.php",
"METHOD": "POST",
"FIELDS": {
"phone": {
"VISIBLE": "Y",
"CODE": {
"NAME": "Номер телефона",
"TYPE": "STRING"
}
},
"selection": {
"VISIBLE": "Y",
"CODE": {
"NAME": "Иллюзия выбора",
"INPUT": {
"TYPE": "Y/N"
}
}
},
"paymentId": {
"CODE": "PAYMENT_ID",
"VISIBLE": "Y"
},
"serviceid": {
"CODE": "REST_SERVICE_ID"
}
}
},
"CODES": {
"REST_SERVICE_ID": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PAYMENT_ID": {
"NAME": "Номер оплаты",
"SORT": "400",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "PAYMENT",
"PROVIDER_VALUE": "ACCOUNT_NUMBER"
}
},
"PAYMENT_SHOULD_PAY": {
"NAME": "Сумма оплаты",
"SORT": "600",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "PAYMENT",
"PROVIDER_VALUE": "SUM"
}
},
"PS_CHANGE_STATUS_PAY": {
"NAME": "Автоматическая смена статуса оплаты",
"SORT": "700",
"INPUT": {
"TYPE": "Y/N"
}
},
"PAYMENT_BUYER_ID": {
"NAME": "Код покупателя",
"SORT": "1000",
"GROUP": "PAYMENT",
"DEFAULT": {
"PROVIDER_KEY": "ORDER",
"PROVIDER_VALUE": "USER_ID"
}
},
"PS_WORK_MODE": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
,
function (result) {
if (result.error())
{
console.error(result.error());
}
else
{
console.info(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest FORM',
'CODE' => 'resthandlerform',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'FORM_DATA' => [
'ACTION_URI' => 'http://example.com/payment_form.php',
'METHOD' => 'POST',
'FIELDS' => [
'phone' => [
'VISIBLE' => 'Y',
'CODE' => [
'NAME' => 'Номер телефона',
'TYPE' => 'STRING'
]
],
'selection' => [
'VISIBLE' => 'Y',
'CODE' => [
'NAME' => 'Иллюзия выбора',
'INPUT' => [
'TYPE' => 'Y/N'
]
]
],
'paymentId' => [
'CODE' => 'PAYMENT_ID',
'VISIBLE' => 'Y'
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID'
]
]
],
'CODES' => [
'REST_SERVICE_ID' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100'
],
'REST_SERVICE_KEY' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300'
],
'PAYMENT_ID' => [
'NAME' => 'Номер оплаты',
'SORT' => '400',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'PAYMENT',
'PROVIDER_VALUE' => 'ACCOUNT_NUMBER'
]
],
'PAYMENT_SHOULD_PAY' => [
'NAME' => 'Сумма оплаты',
'SORT' => '600',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'PAYMENT',
'PROVIDER_VALUE' => 'SUM'
]
],
'PS_CHANGE_STATUS_PAY' => [
'NAME' => 'Автоматическая смена статуса оплаты',
'SORT' => '700',
'INPUT' => [
'TYPE' => 'Y/N'
]
],
'PAYMENT_BUYER_ID' => [
'NAME' => 'Код покупателя',
'SORT' => '1000',
'GROUP' => 'PAYMENT',
'DEFAULT' => [
'PROVIDER_KEY' => 'ORDER',
'PROVIDER_VALUE' => 'USER_ID'
]
],
'PS_WORK_MODE' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий'
]
]
]
]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Режим работы Checkout
При добавлении обработчика в параметр SETTINGS нужно передать CHECKOUT_DATA.
По адресу из ACTION_URI должен располагаться скрипт, который обработает полученные данные, создаст оплату и вернет идентификатор созданной оплаты и URL страницы оплаты.
На ACTION_URI будут передаваться данные для оплаты в виде массива. Он содержит массив системных параметров в ключе BX_SYSTEM_PARAMS и значения FIELDS из CHECKOUT_DATA, каждое отдельным ключом на верхнем уровне массива.
Структура массива BX_SYSTEM_PARAMS:
|
Название |
Описание |
|
RETURN_URL |
Текущая страница |
|
PAYSYSTEM_ID |
Идентификатор платежной системы |
|
PAYMENT_ID |
Идентификатор оплаты |
|
SUM |
Сумма платежа |
|
CURRENCY |
Валюта |
|
EXTERNAL_PAYMENT_ID |
Идентификатор платежа в платежной системе (если он есть). Например, если для текущей оплаты уже отправлялся запрос на |
В ответ на запрос к ACTION_URI скрипт должен вернуть идентификатор созданной оплаты и URL страницы оплаты.
|
Название |
Описание |
|
PAYMENT_URL |
URL страницы оплаты |
|
PAYMENT_ID |
Идентификатор платежа в платежной системе |
Покупатель перейдет по ссылке из PAYMENT_URL автоматически или по клику на кнопку «Купить». Если в FIELDS среди прочих переданы поля, предназначенные для заполнения через форму, то покупателю будет выведена форма.
В результате можно вернуть массив ошибок в ключе PAYMENT_ERRORS. Менеджер увидит ошибки в таймлайне или на странице оплаты (зависит от используемого шаблона).
|
Название |
Описание |
|
PAYMENT_ERRORS |
Список ошибок, возникших при создании оплаты |
Если ничего не возвращать, то будет использоваться ошибка по умолчанию Ошибка регистрации заказа в платёжной системе (Error registering order in payment system).
Параметры, передаваемые при добавлении обработчика в массиве CHECKOUT_DATA
Обязательные параметры отмечены *
|
Название |
Описание |
|
ACTION_URI* |
URL, на который отправляется запрос на создание оплаты |
|
FIELDS |
Описание полей, передаваемых на |
Примеры кода
Как использовать примеры в документации
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest CHECKOUT","CODE":"resthandlercheckout","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","CHECKOUT_DATA":{"ACTION_URI":"http://example.com/payment_checkout.php","FIELDS":{"serviceKey":{"CODE":"REST_SERVICE_KEY_CHECKOUT"},"serviceid":{"CODE":"REST_SERVICE_ID_CHECKOUT"}}},"CODES":{"REST_SERVICE_ID_CHECKOUT":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY_CHECKOUT":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PS_WORK_MODE_CHECKOUT":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.paysystem.handler.add
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest CHECKOUT","CODE":"resthandlercheckout","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","CHECKOUT_DATA":{"ACTION_URI":"http://example.com/payment_checkout.php","FIELDS":{"serviceKey":{"CODE":"REST_SERVICE_KEY_CHECKOUT"},"serviceid":{"CODE":"REST_SERVICE_ID_CHECKOUT"}}},"CODES":{"REST_SERVICE_ID_CHECKOUT":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY_CHECKOUT":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PS_WORK_MODE_CHECKOUT":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/sale.paysystem.handler.add
try
{
const response = await $b24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest CHECKOUT",
"CODE": "resthandlercheckout",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"CHECKOUT_DATA": {
"ACTION_URI": "http://example.com/payment_checkout.php",
"FIELDS": {
"serviceKey": {
"CODE": "REST_SERVICE_KEY_CHECKOUT",
},
"serviceid": {
"CODE": "REST_SERVICE_ID_CHECKOUT"
}
}
},
"CODES": {
"REST_SERVICE_ID_CHECKOUT": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY_CHECKOUT": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PS_WORK_MODE_CHECKOUT": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
);
const result = response.getData().result;
console.info("Обработчик добавлен с ID " + result);
}
catch( error )
{
console.error(error);
}
try {
$response = $b24Service
->core
->call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest CHECKOUT',
'CODE' => 'resthandlercheckout',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'CHECKOUT_DATA' => [
'ACTION_URI' => 'http://example.com/payment_checkout.php',
'FIELDS' => [
'serviceKey' => [
'CODE' => 'REST_SERVICE_KEY_CHECKOUT',
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID_CHECKOUT'
]
]
],
'CODES' => [
'REST_SERVICE_ID_CHECKOUT' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100'
],
'REST_SERVICE_KEY_CHECKOUT' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300'
],
'PS_WORK_MODE_CHECKOUT' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий'
]
]
]
]
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Обработчик добавлен с ID ' . $result;
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error adding paysystem handler: ' . $e->getMessage();
}
BX24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest CHECKOUT",
"CODE": "resthandlercheckout",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"CHECKOUT_DATA": {
"ACTION_URI": "http://example.com/payment_checkout.php",
"FIELDS": {
"serviceKey": {
"CODE": "REST_SERVICE_KEY_CHECKOUT",
},
"serviceid": {
"CODE": "REST_SERVICE_ID_CHECKOUT"
}
}
},
"CODES": {
"REST_SERVICE_ID_CHECKOUT": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY_CHECKOUT": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PS_WORK_MODE_CHECKOUT": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
,
function (result) {
if (result.error())
{
console.error(result.error());
}
else
{
console.info("Обработчик добавлен с ID " + result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest CHECKOUT',
'CODE' => 'resthandlercheckout',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'CHECKOUT_DATA' => [
'ACTION_URI' => 'http://example.com/payment_checkout.php',
'FIELDS' => [
'serviceKey' => [
'CODE' => 'REST_SERVICE_KEY_CHECKOUT',
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID_CHECKOUT'
]
]
],
'CODES' => [
'REST_SERVICE_ID_CHECKOUT' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100'
],
'REST_SERVICE_KEY_CHECKOUT' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300'
],
'PS_WORK_MODE_CHECKOUT' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий'
]
]
]
]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Режим работы IFrame
При добавлении обработчика в параметр SETTINGS нужно передать IFRAME_DATA.
По адресу из ACTION_URI должна располагаться страница, которая будет загружена в iframe на сайт продавца.
При загрузке iframe через метод Window.postMessage() на ACTION_URI будут переданы значения FIELDS из IFRAME_DATA (каждое отдельным ключом на верхнем уровне массива), а также следующие данные:
|
Название |
Описание |
|
BX_SYSTEM_PARAMS |
Системные параметры |
|
BX_COMPUTED_STYLE |
Cтили родительского элемента iframe, полученные методом window.getComputedStyle() |
Данные, передаваемые в BX_SYSTEM_PARAMS:
|
Название |
Описание |
|
RETURN_URL |
Текущая страница |
|
PAYSYSTEM_ID |
Идентификатор платежной системы |
|
PAYMENT_ID |
Идентификатор оплаты |
|
SUM |
Сумма платежа |
|
CURRENCY |
Валюта |
Получить значения в iframe можно через обработчик события message, например:
document.addEventListener("DOMContentLoaded", function() {
window.addEventListener("message", function (event) {
// получение данных от сайта (от платёжной системы)
var paymentData = event.data;
// работа с BX_SYSTEM_PARAMS
if (paymentData.BX_SYSTEM_PARAMS)
{
// ...
}
// использование стилей сайта
if (paymentData.BX_COMPUTED_STYLE)
{
document.body.style.background = paymentData.BX_COMPUTED_STYLE.background;
document.body.style.color = paymentData.BX_COMPUTED_STYLE.color;
}
}, false);
});
По умолчанию ширина iframe — 100% родительского элемента, а высота — 350px.
Размеры iframe можно изменить. Для этого нужно из iframe передать высоту и/или ширину на сайт продавца. Например:
document.addEventListener("DOMContentLoaded", function() {
var size = {
width: document.body.scrollWidth,
height: document.body.scrollHeight
};
// отправка данных на сайт продавца
parent.postMessage(size, "*");
});
width и height — зарезервированные названия переменных, и на сайте продавца обрабатываются только они.
Параметры, передаваемые при добавлении обработчика в массиве IFRAME_DATA
Обязательные параметры отмечены *
|
Название |
Описание |
|
ACTION_URI* |
URL страницы, которая будет выведена в элементе iframe |
|
FIELDS |
Описание полей, передаваемых в |
Примеры кода
Как использовать примеры в документации
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest IFrame","CODE":"resthandleriframe","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","IFRAME_DATA":{"ACTION_URI":"http://example.com/payment_iframe.php","FIELDS":{"serviceKey":{"CODE":"REST_SERVICE_KEY_IFRAME"},"serviceid":{"CODE":"REST_SERVICE_ID_IFRAME"}}},"CODES":{"REST_SERVICE_ID_IFRAME":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY_IFRAME":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PS_WORK_MODE_IFRAME":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.paysystem.handler.add
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"NAME":"Обработчик.Rest IFrame","CODE":"resthandleriframe","SORT":100,"SETTINGS":{"CURRENCY":["RUB"],"CLIENT_TYPE":"b2c","IFRAME_DATA":{"ACTION_URI":"http://example.com/payment_iframe.php","FIELDS":{"serviceKey":{"CODE":"REST_SERVICE_KEY_IFRAME"},"serviceid":{"CODE":"REST_SERVICE_ID_IFRAME"}}},"CODES":{"REST_SERVICE_ID_IFRAME":{"NAME":"Номер магазина","DESCRIPTION":"Номер магазина","SORT":"100"},"REST_SERVICE_KEY_IFRAME":{"NAME":"Секретный ключ","DESCRIPTION":"Секретный ключ","SORT":"300"},"PS_WORK_MODE_IFRAME":{"NAME":"Режим работы платёжной системы","SORT":"1100","INPUT":{"TYPE":"ENUM","OPTIONS":{"TEST":"Тестовый","REGULAR":"Рабочий"}}}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/sale.paysystem.handler.add
try
{
const response = await $b24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest IFrame",
"CODE": "resthandleriframe",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"IFRAME_DATA": {
"ACTION_URI": "http://example.com/payment_iframe.php",
"FIELDS": {
"serviceKey": {
"CODE": "REST_SERVICE_KEY_IFRAME",
},
"serviceid": {
"CODE": "REST_SERVICE_ID_IFRAME"
}
}
},
"CODES": {
"REST_SERVICE_ID_IFRAME": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY_IFRAME": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PS_WORK_MODE_IFRAME": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
);
const result = response.getData().result;
console.info(result);
}
catch( error )
{
console.error(error);
}
try {
$response = $b24Service
->core
->call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest IFrame',
'CODE' => 'resthandleriframe',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'IFRAME_DATA' => [
'ACTION_URI' => 'http://example.com/payment_iframe.php',
'FIELDS' => [
'serviceKey' => [
'CODE' => 'REST_SERVICE_KEY_IFRAME',
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID_IFRAME'
]
]
],
'CODES' => [
'REST_SERVICE_ID_IFRAME' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100'
],
'REST_SERVICE_KEY_IFRAME' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300'
],
'PS_WORK_MODE_IFRAME' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий'
]
]
]
]
]
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error adding payment system handler: ' . $e->getMessage();
}
BX24.callMethod(
"sale.paysystem.handler.add",
{
"NAME": "Обработчик.Rest IFrame",
"CODE": "resthandleriframe",
"SORT": 100,
"SETTINGS": {
"CURRENCY": [
"RUB"
],
"CLIENT_TYPE": "b2c",
"IFRAME_DATA": {
"ACTION_URI": "http://example.com/payment_iframe.php",
"FIELDS": {
"serviceKey": {
"CODE": "REST_SERVICE_KEY_IFRAME",
},
"serviceid": {
"CODE": "REST_SERVICE_ID_IFRAME"
}
}
},
"CODES": {
"REST_SERVICE_ID_IFRAME": {
"NAME": "Номер магазина",
"DESCRIPTION": "Номер магазина",
"SORT": "100"
},
"REST_SERVICE_KEY_IFRAME": {
"NAME": "Секретный ключ",
"DESCRIPTION": "Секретный ключ",
"SORT": "300"
},
"PS_WORK_MODE_IFRAME": {
"NAME": "Режим работы платёжной системы",
"SORT": "1100",
"INPUT": {
"TYPE": "ENUM",
"OPTIONS": {
"TEST": "Тестовый",
"REGULAR": "Рабочий"
}
}
}
}
}
}
,
function (result) {
if (result.error())
{
console.error(result.error());
}
else
{
console.info(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'sale.paysystem.handler.add',
[
'NAME' => 'Обработчик.Rest IFrame',
'CODE' => 'resthandleriframe',
'SORT' => 100,
'SETTINGS' => [
'CURRENCY' => ['RUB'],
'CLIENT_TYPE' => 'b2c',
'IFRAME_DATA' => [
'ACTION_URI' => 'http://example.com/payment_iframe.php',
'FIELDS' => [
'serviceKey' => [
'CODE' => 'REST_SERVICE_KEY_IFRAME',
],
'serviceid' => [
'CODE' => 'REST_SERVICE_ID_IFRAME'
]
]
],
'CODES' => [
'REST_SERVICE_ID_IFRAME' => [
'NAME' => 'Номер магазина',
'DESCRIPTION' => 'Номер магазина',
'SORT' => '100'
],
'REST_SERVICE_KEY_IFRAME' => [
'NAME' => 'Секретный ключ',
'DESCRIPTION' => 'Секретный ключ',
'SORT' => '300'
],
'PS_WORK_MODE_IFRAME' => [
'NAME' => 'Режим работы платёжной системы',
'SORT' => '1100',
'INPUT' => [
'TYPE' => 'ENUM',
'OPTIONS' => [
'TEST' => 'Тестовый',
'REGULAR' => 'Рабочий'
]
]
]
]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Обработка ответа
HTTP-статус: 200
{
"result": 5,
"time": {
"start": 1712132792.910734,
"finish": 1712132793.530359,
"duration": 0.6196250915527344,
"processing": 0.032338857650756836,
"date_start": "2024-04-03T10:26:32+02:00",
"date_finish": "2024-04-03T10:26:33+02:00",
"operating_reset_at": 1705765533,
"operating": 3.3076241016387939
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Идентификатор созданного обработчика, используемый в дальнейшем для его обновления и удаления |
|
time |
Информация о времени выполнения запроса |
Обработка ошибок
HTTP-статус: 400, 403
{
"error": "ERROR_HANDLER_ALREADY_EXIST",
"error_description": "Handler already exists!"
}
|
Название |
Описание |
|
error |
Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания |
|
error_description |
Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде |
Возможные коды ошибок
|
Код |
Описание |
Статус |
|
|
Недостаточно прав для добавления обработчика |
403 |
|
|
Не указано значение обязательного поля либо значение одного из полей указано неверно |
400 |
|
|
Обработчик с кодом, указанным в параметре |
400 |
|
|
Прочие ошибки. Подробную информацию об ошибке смотрите в |
400 |
Статусы и коды системных ошибок
HTTP-статус: 20x, 40x, 50x
Описанные ниже ошибки могут возникнуть при вызове любого метода
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Текущий метод не разрешен для вызова с помощью batch |
|
|
|
Превышена максимальная длина параметров, переданных в метод batch |
|
|
|
Неверный access-токен или код вебхука |
|
|
|
Для вызовов методов требуется использовать протокол HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих планах |
|
|
|
У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав |
|
|
|
Манифест недоступен |
|
|
|
Запрос требует более высоких привилегий, чем предоставляет токен вебхука |
|
|
|
Предоставленный access-токен доступа истек |
|
|
|
Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Продолжите изучение
- Обновить REST-обработчик платежной системы sale.paysystem.handler.update
- Получить список REST-обработчиков платежной системы sale.paysystem.handler.list
- Удалить REST-обработчик платежной системы sale.paysystem.handler.delete
- Добавить платежную систему sale.paysystem.add
- Изменить платежную систему sale.paysystem.update
- Получить список платежных систем sale.paysystem.list
- Получить настройки платежной системы sale.paysystem.settings.get
- Обновить настройки платежной системы sale.paysystem.settings.update
- Удалить платежную систему sale.paysystem.delete
- Оплатить заказ через конкретную платежную систему sale.paysystem.pay.payment
- Оплатить счет через конкретную платежную систему sale.paysystem.pay.invoice
- Получить настройки платежной системы для конкретной оплаты sale.paysystem.settings.payment.get
- Получить настройки платежной системы для конкретного счета sale.paysystem.settings.invoice.get