Генерация ссылок на оплату Uniteller с помощью PHP

Как генерировать ссылки на оплату uniteller php

Как генерировать ссылки на оплату uniteller php

Для интеграции платежей через Uniteller с использованием PHP необходимо использовать их API, которое поддерживает создание одноразовых и постоянных ссылок на оплату. Основной метод – формирование запроса к серверу Uniteller с указанием суммы, валюты, описания заказа и уникального идентификатора транзакции.

Шаг 1: подготовка параметров. Минимальный набор включает сумму в копейках, валюту (RUB, USD, EUR), описание заказа и уникальный номер. Все данные следует передавать в кодировке UTF-8, чтобы избежать ошибок при генерации подписи.

Шаг 2: формирование подписи. Uniteller требует передачи контрольной подписи, созданной на основе секретного ключа и параметров запроса. Для PHP удобно использовать функцию hash_hmac(‘sha256’, $data, $secretKey), где $data – строка, объединяющая ключевые параметры.

Шаг 3: отправка запроса. После формирования подписи создается URL с параметрами GET или POST-запрос к API Uniteller. В ответ сервис возвращает ссылку на оплату, которую можно передавать клиенту.

В процессе разработки рекомендуется логировать все параметры запроса и ответы сервера, чтобы ускорить отладку и избежать проблем с некорректными транзакциями. Также важно проверять статус ответа Uniteller перед подтверждением заказа на стороне сайта.

Регистрация и получение API-ключа Uniteller

Регистрация и получение API-ключа Uniteller

Для работы с Uniteller необходимо создать аккаунт на платформе. Перейдите на официальный сайт uniteller.ru и выберите раздел Регистрация. Укажите корректные данные компании: ИНН, название юридического лица, контактный e-mail и телефон.

После отправки формы на указанный e-mail придет письмо с подтверждением регистрации. Аккаунт необходимо активировать, перейдя по ссылке в письме.

Для получения API-ключа авторизуйтесь в личном кабинете и откройте раздел Настройки интеграции или API. Выберите создание нового ключа, задайте описание для идентификации (например, «Интеграция с сайтом») и сохраните ключ в безопасном месте.

Uniteller предоставляет два типа ключей: тестовый и боевой. Тестовый ключ предназначен для отработки сценариев платежей без списания реальных средств. Боевой ключ необходим для проведения операций с реальными платежами. Использование ключей в коде PHP должно учитывать их назначение, чтобы случайно не выполнять платежи через тестовый ключ в продакшн-среде.

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

Для успешного подключения убедитесь, что ваш сервер поддерживает HTTPS и имеет доступ к uniteller.ru, иначе запросы к API будут отклоняться.

Настройка PHP для работы с API Uniteller

Для взаимодействия с API Uniteller требуется PHP версии не ниже 7.4 и поддержка расширения cURL. Убедитесь, что расширения json и mbstring активированы.

Основные шаги настройки:

  1. Установка cURL:
    • На Linux: sudo apt install php-curl
    • На Windows: раскомментируйте extension=curl в php.ini
  2. Проверка доступности JSON:
    • Выполните php -m | grep json; модуль должен присутствовать
  3. Настройка сертификатов SSL:
    • Скачайте актуальный файл cacert.pem с curl.se
    • Укажите путь в php.ini через curl.cainfo = "C:\path\to\cacert.pem" или /etc/ssl/certs/cacert.pem

Для работы с Uniteller API требуется API-ключ. Создайте его в личном кабинете Uniteller и сохраните в защищённом файле конфигурации. Пример хранения:

<?php
return [
'api_key' => 'ваш_api_ключ',
'merchant_id' => 'идентификатор_мерчанта',
'api_url' => 'https://api.uniteller.ru/v2/'
];
?>

Рекомендуется использовать функцию require_once для подключения конфигурации и проверку наличия всех ключей перед отправкой запросов. Это снижает риск ошибок авторизации.

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);

Это позволяет отслеживать заголовки HTTP и тело запроса, что важно при формировании платежных ссылок и проверке ответов API.

Формирование данных платежа в формате JSON

Формирование данных платежа в формате JSON

Для генерации ссылки на оплату Uniteller требуется передавать платежные данные в формате JSON. Структура JSON должна включать ключевые параметры: order_id, amount, currency, description и customer.

Пример структуры:

{
"order_id": "12345",
"amount": 1500.00,
"currency": "RUB",
"description": "Оплата заказа №12345",
"customer": {
"email": "client@example.com",
"phone": "+79001234567"
}
}

order_id должен быть уникальным для каждого платежа. amount указывается в виде числа с точностью до двух знаков после запятой. currency принимает значения ISO 4217, чаще всего «RUB». description формируется максимально конкретно, чтобы покупатель и система могли однозначно идентифицировать заказ.

Объект customer должен содержать хотя бы один идентификатор: email или phone. Если указаны оба, Uniteller использует их для подтверждения платежа и уведомлений.

Для передачи JSON в PHP используйте функцию json_encode(). Перед кодированием убедитесь, что все данные имеют корректный тип: строки для текста, числа для суммы, массив для объекта клиента. Например:

$paymentData = [
"order_id" => "12345",
"amount" => 1500.00,
"currency" => "RUB",
"description" => "Оплата заказа №12345",
"customer" => [
"email" => "client@example.com",
"phone" => "+79001234567"
]
];
$jsonData = json_encode($paymentData, JSON_UNESCAPED_UNICODE);

Использование JSON_UNESCAPED_UNICODE предотвращает кодирование кириллицы в Unicode, что делает описание и имя клиента читаемыми в платежной ссылке.

Корректно сформированный JSON является обязательным условием для успешной генерации ссылки на оплату через API Uniteller.

Создание запроса на генерацию ссылки через cURL

Создание запроса на генерацию ссылки через cURL

Для формирования запроса на генерацию ссылки Uniteller используется метод POST с передачей JSON-данных. Обязательные параметры включают merchant_id, amount, order_id и description. Пример запроса через cURL:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.uniteller.ru/v1/payment");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$data = json_encode(array(
  'merchant_id' => 'ВАШ_MERCHANT_ID',
  'amount' => 1500,
  'order_id' => 'ORD12345',
  'description' => 'Оплата заказа #ORD12345'
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
$link = $result['payment_url'];

Важно проверять HTTP-код ответа. Для успешного запроса ожидается код 200 и наличие ключа payment_url в JSON-ответе. Если код отличается или ключ отсутствует, запрос следует логировать и повторять с корректировкой данных.

Рекомендуется использовать тайм-ауты и повторные попытки при сетевых сбоях. Например, через опции CURLOPT_TIMEOUT и CURLOPT_CONNECTTIMEOUT. Для безопасной передачи данных следует использовать HTTPS и проверять сертификат сервера с CURLOPT_SSL_VERIFYPEER.

В случае передачи дополнительных параметров, таких как email клиента или success_url, их включают в массив JSON. Uniteller автоматически добавляет их к сгенерированной ссылке, что позволяет адаптировать платежную форму под конкретный заказ.

Обработка ответа и извлечение ссылки на оплату

Обработка ответа и извлечение ссылки на оплату

После формирования запроса к API Uniteller сервер возвращает JSON-ответ, содержащий ключевые параметры платежа. Для извлечения ссылки на оплату необходимо выполнить следующие действия:

  1. Декодировать JSON-ответ с помощью функции json_decode:
  2. $response = json_decode($apiResult, true);
  3. Проверить наличие обязательного поля 'payment_url':
  4. if (!isset($response['payment_url'])) {
    throw new Exception('Ссылка на оплату отсутствует в ответе API');
    }
  5. Сохранить значение ссылки для дальнейшего использования:
  6. $paymentLink = $response['payment_url'];
  7. При необходимости зарегистрировать ссылку в базе данных или передать пользователю через интерфейс:
    • Для базы данных: использовать подготовленные выражения PDO или mysqli для безопасного сохранения.

Дополнительно рекомендуется проверять поле 'status' в ответе API, чтобы убедиться, что платеж доступен для генерации ссылки. Если статус не 'success', обработку ссылки следует прервать и зарегистрировать ошибку.

Пример полной обработки ответа:

$response = json_decode($apiResult, true);
if ($response['status'] !== 'success') {
error_log('Ошибка генерации ссылки: ' . $response['error_message']);
return;
}
$paymentLink = $response['payment_url'];
echo 'Оплатить';

Отладка ошибок при генерации ссылок

Отладка ошибок при генерации ссылок

Ошибки при формировании ссылок на оплату Uniteller чаще всего связаны с некорректными параметрами запроса или проблемами в обработке данных на стороне PHP. Для эффективной диагностики используйте пошаговый подход.

Первый шаг – проверка обязательных полей. Uniteller требует корректные значения для:

Параметр Описание
merchantId Идентификатор магазина, полученный от Uniteller
orderId Уникальный номер заказа
amount Сумма к оплате в копейках (целое число)
currency Трёхсимвольный код валюты (например, RUB)
description Краткое описание товара или услуги

Следующий этап – проверка генерации контрольной подписи. Для PHP это обычно функция hash_hmac:

$signature = hash_hmac('sha256', $dataString, $secretKey);

Неправильный порядок полей или кодировка строки данных приведёт к отказу сервера Uniteller. Убедитесь, что строки соединяются без лишних пробелов и специальных символов.

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

Этап Что логировать
Подготовка данных Содержимое массива параметров перед генерацией подписи
Генерация подписи Полученный хэш и исходная строка для подписи
Финальная ссылка Полный URL с параметрами и подписью

При ошибках сервера Uniteller проверяйте коды ответа HTTP и текст ошибки в теле ответа. Например, 400 указывает на неверные параметры, 403 – на неправильную подпись. Использование функции curl_getinfo() в PHP позволяет получить подробные данные запроса.

Для локальной отладки можно создавать тестовые заказы с минимальными суммами и фиксированными данными. Это ускоряет выявление ошибок без риска для реальных платежей.

Если ошибка повторяется, проверьте соответствие версий PHP и поддерживаемых библиотек OpenSSL, так как Uniteller использует HMAC SHA256 и TLS 1.2. Несовместимость может привести к некорректной подписи или отказу соединения.

Вопрос-ответ:

Как сгенерировать ссылку на оплату через Uniteller с помощью PHP?

Для создания ссылки на оплату через Uniteller необходимо сформировать массив с параметрами заказа: сумма, валюта, описание, уникальный идентификатор заказа и адреса для уведомлений. Затем этот массив передаётся в функцию формирования подписи и URL. После генерации ссылки её можно отправить клиенту или встроить в кнопку на сайте. Важный момент — корректно вычислять подпись с использованием секретного ключа, чтобы Uniteller принимал запрос.

Какие параметры обязательны при создании ссылки на оплату Uniteller?

Обязательными считаются параметры суммы (amount), валюты (currency), идентификатора заказа (order_id), имени или описания товара (description) и адресов для уведомлений о платеже (success_url, fail_url). Без этих данных система не сможет корректно сформировать платежную ссылку, и попытка оплаты завершится ошибкой. Дополнительно можно передавать email клиента или другие необязательные параметры для удобства учёта.

Как правильно вычислить подпись для ссылки Uniteller на PHP?

Подпись создаётся с использованием секретного ключа и хэш-функции, которую требует Uniteller. Обычно это SHA-256 или MD5, в зависимости от настроек вашего аккаунта. Все значения параметров сначала объединяются в определённом порядке в строку, после чего применяется хэш-функция вместе с ключом. Полученная подпись добавляется в URL как отдельный параметр. Любая ошибка в порядке параметров или ключе приведёт к тому, что ссылка не будет работать.

Можно ли автоматически генерировать ссылки на оплату для нескольких заказов?

Да, это можно реализовать с помощью цикла в PHP, который проходит по массиву заказов и для каждого формирует уникальную ссылку с учётом индивидуального идентификатора и суммы. Главное — убедиться, что для каждой ссылки создаётся правильная подпись и уникальный order_id. Такой подход позволяет интегрировать Uniteller в систему с большим количеством заказов и отправлять клиентам персонализированные ссылки.

Что делать, если ссылка на оплату Uniteller не работает?

Если ссылка не работает, сначала проверьте правильность всех обязательных параметров и корректность подписи. Часто ошибки возникают из-за неправильного порядка параметров при формировании подписи, неверного ключа или некорректного формата суммы. Также убедитесь, что success_url и fail_url доступны для сервера и корректно прописаны. После исправления этих моментов ссылка должна работать корректно.

Ссылка на основную публикацию