SDK for PHP

SDK for PHP — это набор средств разработки для взаимодействия веб-сервисов, разработанных на PHP, с платёжной платформой Benker при проведении оплат через Payment Page. В этом разделе представлена информация о работе с SDK for PHP с примерами кода на языке программирования PHP.

Возможности

SDK for PHP позволяет:
  • подписывать набор параметров платежа и формировать адрес для вызова Payment Page,
  • проверять подлинность оповещений от Benker и получать из них информацию о платеже.

Состав

SDK for PHP содержит библиотеки и служебные файлы. Для работы могут использоваться:

  • src — библиотеки для разработки,
  • tests — библиотеки для автоматизированного тестирования,
  • composer.json — файл, в котором описаны библиотеки.

Порядок работы

Для использования SDK for PHP необходимо:

  1. Решить организационные вопросы, касающиеся взаимодействия с Benker:
    • Если у компании нет идентификатора проекта и ключа для взаимодействия с Benker — отправить заявку на подключение.
    • Если у компании есть идентификатор и ключ для взаимодействия с Benker — сообщить специалистам технической поддержки о намерении интеграции с использованием SDK for PHP и согласовать с ними порядок тестирования.
  2. Установить библиотеки, входящие в состав SDK for PHP, в каталог с исходным кодом веб-сервиса и подключить их в коде, а также доработать код для использования необходимой функциональности.
  3. Протестировать и запустить в работу обновлённый исходный код веб-сервиса.

При возникновении вопросов о работе с SDK for PHP следует обращаться в службу технической поддержки Benker по адресу help@benker.io.

Установка и подключение библиотек

Библиотеки, входящие в состав SDK for PHP, в проект с исходным кодом веб-сервиса устанавливаются вручную.

Вызов платёжной формы

Запрос для вызова Payment Page включает в себя набор параметров, подписываемых для обеспечения защиты данных при передаче запроса в платёжную платформу Benker. SDK for PHP позволяет автоматически подписывать используемые параметры. Для вызова Payment Page с применением SDK for PHP следует:

  1. Создать объект класса Payment и указать значения параметров платежа.
    $payment = new Benker\Payment('186', '1555943554067');
        // Идентификатор проекта и идентификатор платежа, уникальный в рамках проекта
    $payment->setPaymentAmount(1000)->setPaymentCurrency('EUR');
        // Сумма (в дробных единицах валюты) и код валюты (в формате ISO-4217 alpha-3)
    $payment->setCustomerId('customer007');
        // Идентификатор пользователя
    $payment->setPaymentDescription('Тестовый платёж');
        // Описание платежа. Необязательный параметр

    Все параметры в данном примере, за исключением описания платежа, являются необходимыми для любой оплаты.

    Дополнительно можно использовать любые другие параметры из числа доступных для работы с Payment Page. Подробнее о доступных параметрах — в разделе Параметры вызова платёжной формы.

  2. Создать объект класса Gate и указать значение секретного ключа, полученное от Benker. Секретный ключ необходим для автоматического подписывания параметров.
    $gate = new Benker\Gate('<secret_key>');
        // Секретный ключ проекта, полученный при интеграции от Benker
  3. Сформировать адрес для вызова платёжной формы.
    $url = $gate->getPurchasePaymentPageUrl($payment);
    Корректный адрес для вызова платёжной формы содержит подпись и параметры платежа:
    https://paymentpage.benker.io/payment?signature=OEKRlLXKStyoH%2BM36hokU
    zLZsuB2gO8JALVnyevcV59akRi29elbheVscAEl0ljcoQVXDE390MwgWg%3D%3D&payment_id=TEST_1555943554067...
  4. Использовать сформированный адрес для вызова платёжной формы (подробнее).

Далее приведён пример формирования адреса для вызова платёжной формы Payment Page с открытием на английском языке. На странице с выбором платёжных методов обеспечивается отображение информации о платеже: идентификатора, валюты, суммы и описания платежа. На странице с вводом реквизитов, необходимых для проведения платежа, обеспечивается отображение таймера с обратным отсчётом времени.

Рис. 1. Пример формирования адреса для вызова Payment Page
$gate = new Benker\Gate('<secret_key>');
    // Секретный ключ проекта, полученный при интеграции
$payment = new Benker\Payment('186', '1555943554067');
    // Идентификатор проекта и идентификатор платежа, уникальный в рамках проекта
$payment->setPaymentAmount(1000)->setPaymentCurrency('EUR');
    // Сумма (в дробных единицах валюты) и код валюты (в формате ISO-4217 alpha-3)
$payment->setPaymentDescription('Test payment');
    // Описание платежа
$payment->setCustomerId('customer007');
    // Идентификатор пользователя
$payment->setBestBefore(new \DateTime('2050-01-01 00:00:00 +0000'));
    // Дата и время, до которых платёж должен быть завершён
$payment->setLanguageCode('en');
    // Код языка, на котором Payment Page открывается пользователю
$url = $gate->getPurchasePaymentPageUrl($payment);
    // Готовый запрос с подписью

Использование режима отладки

При работе с SDK for PHP поддерживается режим отладки, который позволяет проверять полноту и корректность указанных параметров и получать информацию о допущенных ошибках.

Перед началом отладки следует обеспечить возможность отправки HTTP-запросов со стороны серверной части веб-сервиса к ресурсу sdk.benker.io и убедиться в том, что используемый PHP-интерпретатор соответствует хотя бы одному из следующих условий:

  • поддерживается библиотека curl (подробнее);
  • поддерживается библиотека sockets c доступом к URL по протоколу HTTP (подробнее);
  • для директивы allow_fopen_url указано значение true и поддержан доступ к URL по протоколу HTTP (подробнее).

После этого в рамках отладки можно задавать различные параметры вызова платёжной формы (как тестовые, так и реальные) и анализировать информацию об ошибках. Для этого используется код следующего вида:

$payment = new Payment(<project_id>, '<payment_id_in_your_service>');
$payment->setPaymentAmount(1001)
    ->setPaymentCurrency('EUR')
    ->setPaymentDescription('Тестовый платёж')
$gate = new Gate('<secret_key>');
 
try {
    return $gate->getPaymentPageUrl($payment); 
    // Получение ссылки на открытие платёжной формы
} catch (ValidationException $e) { // Обработка возможных исключений
    error_log($e->getFormattedMessage()); // Запись сообщения об ошибках в журнал
}
 
return null;

Информация о найденных ошибках, полученная в результате выполнения этих действий, в текстовом формате может выглядеть следующим образом:

One or more parameters is not valid:
 
Customer_id:
    Must be not null  // Не указан идентификатор пользователя, обязательный для запроса
Account_token:
    Invalid account token  // Указан некорректный токен

При отсутствии ошибок можно считать полученную ссылку на открытие Payment Page корректной.

Обработка оповещений

Информацию о результатах проведения платежей можно получать в оповещениях, отправляемых со стороны Benker на URL, который необходимо сообщить службе технической поддержки Benker. Оповещение представляет собой HTTP POST запрос с данными в формате JSON-строки. Чтобы извлечь информацию о результате проведения платежа из JSON-строки, необходимо:

  1. Если ранее, при формировании запроса для вызова Payment Page, не был создан объект класса Gate, создать его и указать значение секретного ключа, полученного от Benker.
    $gate = new Benker\Gate('<secret_key>');
  2. Создать объект класса Callback, используя JSON-строку с информацией о платеже из оповещения от Benker:
    $callback = $gate->handleCallback($data);
  3. Использовать методы, доступные для работы с оповещениями. Можно получить полную информацию о платеже или информацию только об отдельных параметрах платежа:
    Callback::getPaymentId();            // Получение идентификатора платежа
    Callback::getPaymentStatus();        // Получение текущего статуса платежа
    Callback::getPayment();              // Получение всей информации о платеже

Далее приведён пример данных из оповещения, которое включает в себя подпись и информацию о результатах проведения платежа. При использовании SDK for PHP проверка подписи в оповещении выполняется автоматически.

Рис. 2. Пример данных из оповещения о проведении оплаты
POST /notify/success HTTP/1.1
Content-Length: 1237
User-Agent: GuzzleHttp/6.3.3 curl/7.47.0 PHP/7.0.32-0ubuntu0.16.04.1
Content-Type: application/json
Host: webservice.com

{
  "project_id": 200,
  "payment": {
    "id": "abc12345",
    "type": "purchase",
    "status": "success",
    "date": "2025-03-20T14:22:06+0000",
    "method": "Greek Banks",
    "sum": {
      "amount": 1000,
      "currency": "EUR"
    },
    "description": "Success"
  },
  "customer": {
    "id": "123"
  },
  "operation": {
    "id": 9529253065607,
    "type": "sale",
    "status": "success",
    "date": "2025-03-20T14:22:06+0000",
    "created_date": "2025-03-20T14:22:00+0000",
    "request_id": "f1de353331a01fd14163fe4226-00009530",
    "sum_initial": {
      "amount": 1000,
      "currency": "EUR"
    },
    "sum_converted": {
      "amount": 1000,
      "currency": "EUR"
    },
    "code": "0",
    "message": "Success",
    "provider": {
      "id": 1914,
      "payment_id": "",
      "auth_code": ""
    }
  },
  "signature": "OBjT3RaJnOWsDXOclvWoC6+CFSCtLprTo8VFbN6BYVQD2tVK/3d9k+RRA/7N9TV6OQqk+0uPUnx4/c8uaUurw=="
}

Дополнительные материалы

Для организации работы с оповещениями также могут быть полезны следующие материалы: