Документация для разработчиков
Темная тема

sale.paysystem.handler.add

Scope: pay_system Права на выполнение: для всех

Описание

sale.paysystem.handler.add(
	fields
)

Метод добавляет рест-обработчик.

Параметры

Параметр Описание С версии
fields Набор полей(массив вида array("поле":"значение"[, ...])), содержащий значения, описывающие обработчик. Доступные поля:
  • NAME - Название обработчика
  • CODE - Уникальный код обработчика в системе
  • SETTINGS - Настройки обработчика
  • SORT - Сортировка

Примеры

Пример 1

BX24.callMethod(
	"sale.paysystem.handler.add",
	{
		'NAME' : 'Обработчик.Rest', 	// Название обработчика
		'SORT' : 100, 	// Сортировка
		'CODE' : 'resthandlercode', 	// Уникальный код обработчика в системе
		'SETTINGS' : { 		// Настройки обработчика
			'CURRENCY' : {'RUB'}, 	// Список валют, которые поддерживает обработчик
			'FORM_DATA' : { 	// Настройки формы
				'ACTION_URI' : 'https://payment_service_url', 	// URL, на который будет отправляться форма
				'METHOD' : 'POST', 	// Метод отправки формы
				'PARAMS' : { 
// Карта соответствия полей между полями формы и параметрами обработчика: массив вида array(код_поля => код_параметра_обработчика)
					'serviceid' : 'REST_SERVICE_ID',
					'invoiceNumber' : 'PAYMENT_ID',
					'Sum' : 'PAYMENT_SHOULD_PAY',
					'customer' : 'PAYMENT_BUYER_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'	// Значение(см. доступный список ниже)
					}
				}
			}
		}
	},
	function(result)
	{
		if(result.error())
			console.error(result.error());
		else
			console.info("Обработчик добавлен с ID " + result.data());
	}
);

Пример 2

Начиная с версии 20.5.0 модуля sale добавлено новое значение FIELDS вместо старого PARAMS (появилась возможность передавать произвольные поля для REST-обработчиков платёжных систем).

Если значение ключа CODE - строка, то значение будет использоваться для поиска соответствия между полями формы и параметрами обработчика: массив вида array('CODE' => 'код_параметра_обработчика'). Название и значение будут получены из параметров обработчика ('CODES').

Если в ключе CODE передан объект, то в форме оплаты будет добавлено поле указанного типа. Поддерживаются типы:

  • STRING (строка)
  • Y/N (чекбокс)
  • ENUM (список)

По умолчанию поля формы скрыты. Чтобы сделать поле видимым, необходимо передать 'VISIBLE' : 'Y'.

BX24.callMethod(
	"sale.paysystem.handler.add",
	{
		'NAME' : 'Обработчик.Rest',
		'SORT' : 100,
		'CODE' : 'resthandlercodedoc',
		'SETTINGS' : {
			'CURRENCY' : ['RUB'],
			'FORM_DATA' : {
				'ACTION_URI' : 'https://payment_service_url',
				'METHOD' : 'POST',
				'FIELDS' : { 
					'phone' : {
						'CODE': {
							'NAME' : 'Номер телефона',
							'TYPE' : 'STRING',
						}
						'VISIBLE' : 'Y',
					},
					'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'
					}
				}
			}
		}
	},
	function(result)
	{
		if(result.error())
			console.error(result.error());
		else
			console.info("Обработчик добавлен с ID " + result.data());
	}
);

Примечание: Если передавать и FIELDS, и PARAMS, то будет использоваться только FIELDS.

Пример 3

Начиная с версии 21.700.0 модуля sale добавлены новые сценарии оплаты:

  • Форма
  • iFrame
  • Checkout

Форма

При добавлении обработчика в SETTINGS нужно передать FORM_DATA (как в примерах выше). Способ подходит если от покупателя ничего не нужно запрашивать, либо запрашивается небольшой набор данных.

Поля формы автоматически выводятся в соответствии с дизайном страницы оплаты.

Данные формы (значения FIELDS из FORM_DATA) будут отправлены на ACTION_URI.


iFrame

При добавлении обработчика в SETTINGS нужно передать IFRAME_DATA (вместо FORM_DATA). По адресу из ACTION_URI должна располагаться страница, которая будет загружена в iframe на сайт продавца.

При загрузке iframe через метод Window.postMessage() на ACTION_URI будут переданы следующие данные:

  • BX_SYSTEM_PARAMS:
    • RETURN_URL- текущая страница;
    • PAYSYSTEM_ID - идентификатор платежной системы;
    • PAYMENT_ID - идентификатор оплаты;
    • SUM - сумма платежа;
    • CURRENCY - валюта.
  • BX_COMPUTED_STYLE (стили родительского элемента iframe, полученные методом window.getComputedStyle()
  • значения FIELDS из IFRAME_DATA

Получить значения в iframe можно через обработчик события message, например:

//js
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 передать высоту и/или ширину на сайт продавца. Например:

//js
document.addEventListener("DOMContentLoaded", function() {
	var size = {
		width: document.body.scrollWidth,
		height: document.body.scrollHeight
	};

	// отправка данных на сайт продавца
	parent.postMessage(size, "*");
});

width и height зарезервированные названия переменных и на сайте продавца обрабатываются только они.


Checkout

При добавлении обработчика в SETTINGS нужно передать CHECKOUT_DATA (вместо FORM_DATA).

По адресу из ACTION_URI должен располагаться скрипт, который обработает полученные данные, создаст оплату и вернёт идентификатор созданной оплаты и url страницы оплаты.

На ACTION_URI будут передаваться данные для оплаты:

  • BX_SYSTEM_PARAMS:
    • RETURN_URL - текущая страница;
    • PAYSYSTEM_ID - идентификатор платежной системы;
    • PAYMENT_ID - идентификатор оплаты;
    • SUM - сумма платежа;
    • CURRENCY - валюта.
  • значения FIELDS из CHECKOUT_DATA

В ответ на запрос к ACTION_URI, скрипт должен вернуть идентификатор созданной оплаты и url страницы оплаты.

Например:

//php
// ... код обработки полученных данных и создания оплаты

$result = [
	'PAYMENT_URL' => '', // url страницы оплаты
	'PAYMENT_ID' => '', // идентификатор оплаты
];

header('Content-Type:application/json; charset=UTF-8');
echo json_encode($result);

Покупатель перейдёт на ссылку из PAYMENT_URL автоматически или по клику ну кнопку "Купить".

C версии sale 22.200.0 можно вернуть массив ошибок в ключе PAYMENT_ERRORS. Ошибки менеджер увидит в таймлайне и может увидеть на странице оплаты (зависит от используемого шаблона).

Пример:

//php
// ... код обработки полученных данных и создания оплаты

$result = [
	'PAYMENT_ERRORS' => [
		'Some user custom error',
		'Some error more',
	]
];

header('Content-Type:application/json; charset=UTF-8');
echo json_encode($result);

Если ничего не возвращать, то будет использоваться ошибка по умолчанию: Ошибка регистрации заказа в платёжной системе (Error registering order in payment system)

Возможные значения

Возможные значения PROVIDER_KEY
ORDER Параметры
PROPERTY Свойства счета
PAYMENT Оплата
USER Пользователь
VALUE Значение типа строка
Y\N Чекбокс
Возможные значения PROVIDER_VALUE
ORDER ID: ID (для счетов соответствует ID счета),
ACCOUNT_NUMBER: Номер заказа (для счетов соответствует номеру счета),
ORDER_TOPIC: Тема,
DATE_INSERT: Дата заказа (для счетов соответствует дате счета),
DATE_INSERT_DATE: Дата заказа (без времени) (для счетов соответствует дате счета (без времени)),
DATE_BILL: Дата и время выставления,
DATE_BILL_DATE: Дата выставления,
DATE_PAY_BEFORE: Срок оплаты,
SHOULD_PAY: Сумма счета (для счетов соответствует сумме счета),
CURRENCY: Валюта,
PRICE: Стоимость заказа (для счетов соответствует стоимости счета),
PRICE_DELIVERY: Стоимость доставки,
DISCOUNT_VALUE: Величина скидки,
USER_ID: Код покупателя,
PAY_SYSTEM_ID: Код платежной системы,
DELIVERY_ID: Код службы доставки,
TAX_VALUE: Налог,
USER_DESCRIPTION: Комментарий
PAYMENT ID: ID
ACCOUNT_NUMBER: Номер оплаты,
DATE_BILL: Дата и время выставления,
DATE_BILL_DATE: Дата выставления (без времени),
SUM: Сумма оплаты,
CURRENCY: Валюта
USER ID: Код покупателя,
LOGIN: Логин,
NAME: Имя,
SECOND_NAME: Отчество,
LAST_NAME: Фамилия,
EMAIL: EMail,
PERSONAL_PROFESSION: Профессия,
PERSONAL_WWW: Персональный веб-сайт,
PERSONAL_ICQ: Номер ICQ,
PERSONAL_GENDER: Пол,
PERSONAL_FAX: Номер факса,
PERSONAL_MOBILE: Номер телефона,
PERSONAL_STREET: Адрес,
PERSONAL_MAILBOX: Почтовый ящик,
PERSONAL_CITY: Город,
PERSONAL_STATE: Штат,
PERSONAL_ZIP: Индекс,
PERSONAL_COUNTRY: Страна,
WORK_COMPANY: Компания,
WORK_DEPARTMENT: Отдел,
WORK_POSITION: Должность,
WORK_WWW: Сайт компании,
WORK_PHONE: Рабочий телефон,
WORK_FAX: Рабочий факс,
WORK_STREET: Адрес компании,
WORK_MAILBOX: Рабочий почтовый ящик,
WORK_CITY: Город компании,
WORK_STATE: Штат компании,
WORK_ZIP: Индекс компании,
WORK_COUNTRY: Страна компании


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх