Быстрый старт
В этом разделе описан минимальный сценарий интеграции для выполнения первого платежа в тестовом окружении через H2H API.
Результат выполнения сценария
После выполнения шагов из этого раздела вы:
-
создадите тестовую кассу и получите пару ключей для подписи запросов;
-
отправите запрос на создание P2P-платежа в тестовом окружении;
-
получите ответ API и оповещение (колбек) о результате обработки.
Подробное описание механизма аутентификации и подписи запросов см. в разделе Аутентификация и подпись.
Предварительные условия
Для выполнения шагов из этого раздела требуется:
-
доступ к кабинету мерчанта;
-
созданная и настроенная касса;
-
сгенерированная пара ключей RSA (private/public) для кассы;
-
установленный
curlлибо другой HTTP-клиент; -
возможность отправлять HTTPS-запросы к
https://api.hh-processing.com.
Получение доступа к кабинету, создание кассы и генерация ключей описаны в разделе Аутентификация и подпись.
Шаг 1. Подготовить параметры аутентификации
Для каждого запроса к API необходимо сформировать заголовки:
-
x-access-timestamp— время формирования запроса в формате Unix Timestamp (UTC) в секундах. -
x-access-merchant-id— идентификатор кассы (значениеUUID, полученное при генерации ключей). -
x-access-token— публичный ключ кассы, закодированный в формате Base64Url. -
x-access-signature— цифровая подпись сообщенияsha256(base64url(body) + timestamp), сформированная приватным ключом кассы.
Алгоритм формирования подписи и примеры кода приведены в Аутентификация и подпись.
Для примеров ниже используются следующие тестовые значения:
-
PROJECT_ID— идентификатор кассы, например57aff4db-b45d-42bf-bc5f-b7a499a01782. -
API_KEY— значение заголовкаx-access-token. -
SIGNATURE— значение заголовкаx-access-signature. -
TIMESTAMP— значение заголовкаx-access-timestamp.
Шаг 2. Создать тестовый P2P-платеж
В этом примере создается заявка на P2P-платеж по карте в тестовом окружении.
POST https://api.hh-processing.com/api/v1/payment/p2p/payin
Тело запроса (минимальный набор полей):
{
"general": {
"project_id": "PROJECT_ID",
"payment_id": "P2P-TEST-0001",
"merchant_callback_url": "https://example.com/internal-callback",
"merchant_success_callback_url": "https://example.com/payment-success",
"merchant_decline_callback_url": "https://example.com/payment-decline"
},
"payment": {
"method": "card-p2p",
"amount": 10000,
"currency": "RUB",
"description": "Test P2P payment"
},
"sender": {
"pan": "4242424242424242",
"year": 2029,
"month": 1,
"card_holder": "TEST CARDHOLDER",
"cvv": "123"
},
"receiver": {
"pan": "4000000000000002"
},
"customer": {
"id": "test-user-1",
"ip_address": "203.0.113.10",
"country": "RU"
}
}
-
amountуказывается в дробных единицах валюты (в примере10000= 100,00 RUB). Подробности см. в разделе Коды валют.
Пример запроса с использованием curl:
curl https://api.hh-processing.com/api/v1/payment/p2p/payin \
-X POST \
-H "x-access-timestamp: TIMESTAMP" \
-H "x-access-merchant-id: PROJECT_ID" \
-H "x-access-signature: SIGNATURE" \
-H "x-access-token: API_KEY" \
-H "content-type: application/json" \
-d '{
"general": {
"project_id": "PROJECT_ID",
"payment_id": "P2P-TEST-0001",
"merchant_callback_url": "https://example.com/internal-callback",
"merchant_success_callback_url": "https://example.com/payment-success",
"merchant_decline_callback_url": "https://example.com/payment-decline"
},
"payment": {
"method": "card-p2p",
"amount": 10000,
"currency": "RUB",
"description": "Test P2P payment"
},
"sender": {
"pan": "4242424242424242",
"year": 2029,
"month": 1,
"card_holder": "TEST CARDHOLDER",
"cvv": "123"
},
"receiver": {
"pan": "4000000000000002"
},
"customer": {
"id": "test-user-1",
"ip_address": "203.0.113.10",
"country": "RU"
}
}'
Пример успешного ответа:
{
"status": "processing",
"sub_status": "new",
"status_description": null,
"request_id": "16a10539-fcb3-4ff5-a3e2-86625a2dc3d3",
"project_id": "PROJECT_ID",
"payment_id": "P2P-TEST-0001"
}
Список статусов и подстатусов описан в разделе Коды статусов.
Шаг 3. Обработать оповещение о результате
После изменения статуса заявки система отправляет HTTP-запрос на один из URL, указанных в поле general:
-
merchant_callback_url— информативные оповещения по промежуточным статусам. -
merchant_success_callback_url— оповещения об успешном завершении. -
merchant_decline_callback_url— оповещения о неуспешном завершении.
Пример успешного оповещения:
{
"project_id": "PROJECT_ID",
"general": {
"request_id": "16a10539-fcb3-4ff5-a3e2-86625a2dc3d3",
"payment_id": "P2P-TEST-0001"
},
"status": {
"status": "success",
"sub_status": null,
"status_description": null
},
"payment_info": {
"amount": 10000,
"currency": "RUB",
"method": "card-p2p",
"type": "payin"
}
}
Рекомендуется:
-
проверять цифровую подпись оповещения по алгоритму, описанному в Аутентификация и подпись;
-
реализовать защиту от повторной обработки дубликатов оповещений (например, использовать ключ идемпотентности
project_id:payment_id:status:sub_status).
Шаг 4. Проверить статус заявки через API
Если оповещение не было обработано или требуется явная проверка состояния заявки, можно запросить ее статус с помощью отдельного метода API.
POST https://api.hh-processing.com/api/v1/payment/p2p/payin/info
Пример запроса:
curl https://api.hh-processing.com/api/v1/payment/p2p/payin/info \
-X POST \
-H "x-access-timestamp: TIMESTAMP" \
-H "x-access-merchant-id: PROJECT_ID" \
-H "x-access-signature: SIGNATURE" \
-H "x-access-token: API_KEY" \
-H "content-type: application/json" \
-d '{
"general": {
"project_id": "PROJECT_ID",
"payment_id": "P2P-TEST-0001"
}
}'
Ответ содержит текущие значения status, sub_status, а также блоки payment_info и другие поля, аналогичные полям из оповещений.
Схема обработки тестового P2P-платежа
sequenceDiagram
autonumber
participant User as Пользователь
participant Merchant as Бэкенд мерчанта
participant HH as HighHelp API
participant Provider as Платежный провайдер/банк
participant Callback as Endpoint оповещений мерчанта
User->>Merchant: Инициирует P2P-платеж
Merchant->>HH: POST /api/v1/payment/p2p/payin - (тело запроса + заголовки аутентификации)
HH->>HH: Проверка подписи и параметров заявки
HH->>Provider: Маршрутизация и передача заявки провайдеру
Provider-->>HH: Результат обработки заявки
HH-->>Merchant: HTTP 200 - {"status": "processing", "sub_status": "new", ...}
HH-->>Callback: оповещение о смене статуса - (success / decline / error / processing:*)
Callback-->>HH: HTTP 200 OK
alt оповещение не получено или требуется явная проверка статуса
Merchant->>HH: POST /api/v1/payment/p2p/payin/info - (project_id, payment_id)
HH-->>Merchant: Текущий статус и детали заявки
end
Следующие шаги
-
интегрировать виджет по шагам из раздела Порядок интеграции виджета.
-
доработать обработку оповещений и ошибок, опираясь на Коды статусов.