Область применения
Расширение позволяет:
- Сгенерировать счет клиенту для оплаты через СБП. Чек содержит весь список товаров из документа
- Открыть счет с QR кодом
- Проверить статус оплат
Описание реализации
АдресСервера = "myname.server.paykeeper.ru";
Логин = "admin";
Пароль = "********";
СоединениеHTTP = Новый HTTPСоединение(СОКРЛП(АдресСервера), , СОКРЛП(Логин), СОКРЛП(Пароль), , , Новый ЗащищенноеСоединениеOpenSSL);
Возврат СоединениеHTTP;
2. Получение токена безопасности
ЗапросHTTP = Новый HTTPЗапрос("/info/settings/token/", Заголовки);
ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку());
Попытка
ОбъектJSON = ПрочитатьJSON(ЧтениеJSON);
Исключение
Сообщить("Ошибка при получении токена безопасности");
Возврат "";
КонецПопытки;
Токен = "";
Если ОбъектJSON.Свойство("token", Токен) Тогда
Возврат Токен;
Иначе
Сообщить(ОбъектJSON.msg);
Возврат "";
КонецЕсли;
Этот запрос создаёт по переданным параметрам оплаты счёт и генерирует для отображения в виде предварительного просмотра HTML-код письма счёта.
Отправка клиенту счета на емейл.
//Отправка ссылки на оплату на почту
ЗапросHTTPОтправить = Новый HTTPЗапрос("/change/invoice/send/", Заголовки);
ТелоЗапросаОтправить = "token=" + Токен +
"&id=" + ОтветОбъект.invoice_id;
ЗапросHTTPОтправить.УстановитьТелоИзСтроки(ТелоЗапросаОтправить,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
ОтветHTTPОтправить = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTPОтправить);
ЧтениеJSON.УстановитьСтроку(ОтветHTTPОтправить.ПолучитьТелоКакСтроку());
Попытка
ОтветОбъект = ПрочитатьJSON(ЧтениеJSON);
Исключение
Сообщить("Ошибка при отправке счёта");
ЗавершеноСОшибками = Истина;
Продолжить;
КонецПопытки;
Если ОтветОбъект.Свойство("result", РезультатЗапроса) Тогда
Если РезультатЗапроса = "fail" Тогда
Сообщить(ОтветОбъект.msg);
ЗавершеноСОшибками = Истина;
Продолжить;
КонецЕсли;
КонецЕсли;
5. Получения статуса оплаты счёта
СоединениеHTTP = СформироватьСоединениеHTTP();
//Получим статус оплаты
//GET-запрос по URL с GET-параметром id, равным номеру нужного счёта.
ЗапросHTTP = Новый HTTPЗапрос("/info/invoice/byid/?id=" + СокрЛП(Объект.RF_invoice_id));
ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку());
Попытка
ОбъектJSON = ПрочитатьJSON(ЧтениеJSON);
Исключение
Сообщить("Ошибка при получении статуса счета. Возможно не заполнен invoice_id");
Возврат ;
КонецПопытки;
Если ОбъектJSON.status = "paid" Тогда
Сообщить("Текущий статус счета: Оплачен");
//Создадим запись на закладке Оплата платежными картами
Объект.ОплатаПлатежнымиКартами.Очистить();
Стр = Объект.ОплатаПлатежнымиКартами.Добавить();
Стр.ДоговорПодключения = Справочники.ДоговорыЭквайринга.НайтиПоНаименованию("Договор эквайринга");
Стр.ЭквайринговыйТерминал = Справочники.ЭквайринговыеТерминалы.НайтиПоНаименованию("Эквайринг - офис Новосаратовка",,,Стр.ДоговорПодключения );
Стр.Сумма = ОбъектJSON.pay_amount;
Стр.ВидОплаты = Перечисления.ТипыПлатежнойСистемыККТ.СистемаБыстрыхПлатежей;
Иначе
Сообщить("Текущий статус счета: " + ОбъектJSON.status);
КонецЕсли;
Подключение подсистемы
Необходимо зарегистрироваться Paykeeper.ru и получить ссылку на сервер, имя пользователя и пароль.
Тестовая регистрация проходит быстро, присылают тестовый контур, в котором можно отлаживать API взаимодействия.
- Для подключения в рабочий режим необходимо использовать физический фискальный регистратор или взять в аренду облачную кассу.
- Потребуется разместить логотипы Visa, MasterCard, МИР и PayKeeper на сайте.
Я использовал облачный вариант.
При физической кассе можно распечатывать чеки для налоговой самостоятельно, а копию чека в электронном варианте клиенту отправит Paykeeper. Для этого нужно ставить доп. ПО на компьютер. Работает только с АТОЛ, ШТРИХ-М, ЭВОТОР кассами. Одновременно касса на может печатать чек из 1С и из Paykeeper.
Я не выводил параметры подключения на форму. Они зашиты в коде в процедуре СформироватьСоединениеHTTP и ПриОткрытии. Возможно, при рефакторинге кода переведу на безопасное хранилище паролей как советует 1С.
Расширение не предназначено для выполнения в безопасном режиме. Если будут запросы, то добавлю эту функциональность.
При работе через web оплата через paykeeper генерируется, проверка статуса оплаты работает.
Тестировал на платформе 8.3.25.1394. Конфигурация 1С:ERP Управление предприятием 2 (2.5.20.80)