# Использование тестового API

## Введение

Тестовый режим API даёт возможность изучить работу с API Unitpay / формой оплаты на тестовых данных **без фактического проведения транзакций**:\
\
\- обмен данными;\
\- формат запросов и ответов;\
\- содержание запросов и ответов.

В тестовом режиме можно проверить как работают способ оплаты **банковская карта.**

{% hint style="warning" %}
**Условия для работы тестового режима:**

* Наличие активного проекта
* Заполнение анкеты и отправка документов
  {% endhint %}

## Платежи

### Создание платежа <a href="#initpayment" id="initpayment"></a>

Создать тестовый платеж можно несколькими способами: через форму оплаты ([простой способ](https://help.unitpay.ru/payments/create-payment-easy)) и через API.

**Секретный ключ для тестового режима:**

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

Для этого:\
\
1\)  Перейдите на страницу [настройки профиля](https://unitpay.ru/partner/profile/edit);\
2\) Справа вы увидите блок с секретными ключами. Скопируйте секретный ключ для **тестового режима;**

![](https://d33v4339jhl8k0.cloudfront.net/docs/assets/551a91dbe4b0221aadf24410/images/5e71e6a42c7d3a7e9ae959e4/file-Hb2uRgHANG.png)

3\) Используйте скопированный ключ во всех тестовых запросах для параметра **secretKey** (кроме формирования signature).&#x20;

{% hint style="warning" %}
***ВАЖНО!** После перехода в "боевой" режим не забудьте поменять тестовые параметры на реальные и заменить секретный ключ для тестового режима на настоящий в API.*
{% endhint %}

#### Форма

Ссылка на оплату формируется [простым способом](https://help.unitpay.ru/payments/create-payment-easy). При создании ссылки необходимо использовать несколько обязательных параметров:&#x20;

| Параметр        | Значение                                    |
| --------------- | ------------------------------------------- |
| **test**        | 1                                           |
| **paymentType** | card                                        |
| **login**       | Ваш регистрационный email в системе UnitPay |
| **secretKey**   | Ваш секретный ключ для тестового режима     |

#### Дополнительные параметры оплаты:&#x20;

| Параметр     | Значение                                           |
| ------------ | -------------------------------------------------- |
| **currency** | RUB  (в тестовом режиме поддерживается только RUB) |

{% hint style="info" %}
Чтобы ваш обработчик смог принять тестовый платеж, необходимо на нем настроить обработку параметров *account* и *desc,* которые будут переданы в тестовом запросе.
{% endhint %}

#### Пример создания тестовой ссылки (PHP):&#x20;

```php
<?php

$params = [
    'account'   => 'test',
    'currency'  => 'RUB',
    'desc'      => 'test',
    'sum'       => '25',
    'test'      => 1,
    'login'     => 'email вашего аккаунта',
    'secretKey' => 'тестовый секретный ключ',
];

$billingCode      = 'card';
$projectPublicId  = 'публичный ключ проекта';

$secretKey = 'секретный ключ проекта';

$signatureParams = [
    'desc'     => $params['desc'],
    'sum'      => $params['sum'],
    'account'  => $params['account'],
    'currency' => $params['currency'],
];

ksort($signatureParams);

$signatureParams[] = $secretKey;

$signature = hash('sha256', implode('{up}', $signatureParams));

$baseUrl = 'https://unitpay.ru';

$params['signature'] = $signature;

$uri = http_build_query($params);

echo $baseUrl . '/pay/' . $projectPublicId . '/' . $billingCode . '?' . $uri . PHP_EOL;

```

#### API

Основной запрос формируется по [документации](https://help.unitpay.ru/payments/create-payment), в запросе необходимо использовать тестовые данные, приведенные ниже.&#x20;

| Параметр        | Значение                                    |
| --------------- | ------------------------------------------- |
| **test**        | 1                                           |
| **paymentType** | card                                        |
| **login**       | Ваш регистрационный email в системе UnitPay |
| **secretKey**   | Ваш секретный ключ для тестового режима     |

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

| **currency** | RUB  (в тестовом режиме поддерживается только RUB) |
| ------------ | -------------------------------------------------- |

Остальные параметры следует указывать согласно документации.

**Пример успешного запроса:**&#x20;

```
https://unitpay.ru/api?method=initPayment
params[paymentType]=card
params[account]=test_unitpay
params[sum]=100
params[desc]=test_unitpay
params[projectId]=123456
params[secretKey]=***********-***********-***********
params[currency]=RUB
params[login]=example@site.com
params[locale]=ru
params[test]=1
```

Для API в тестовом режиме следует посылать все обязательные параметры, которые можно посмотреть на [основной странице](https://help.unitpay.ru/payments/create-payment) используемого метода.\
Все параметры ответа API в тестовом режиме соответствуют ответу в "боевом" режиме, если иного не описано в документации тестового API.

**Пример успешного ответа:**&#x20;

```json
{
  "result": {
    "type": "redirect",
    "paymentId": 123456789,
    "message": "Счет успешно выставлен, ожидается оплата",
    "receiptUrl": "https://unitpay.ru/pay/receipt/123456789-1dca2345e2",
    "statusUrl": "https://unitpay.ru/pay/receipt/123456789-1dca2345e2",
    "redirectUrl": "https://unitpay.ru/pay/123456-a966b/card?account=test_unitpay&sum=100.00&currency=RUB&signature=68bfa6e93a370fbeff5bf097e147c8ba69ca46df6b4e48f000e787dec451250d&desc=test_unitpay&hideOtherMethods=true&locale=ru&paymentId=123456789&hideMenu=true&test=1&login=example@site.com&secretKey=***********-***********-***********"
  }
}

```

**Отличие значений параметров в тестовом режиме:**

|                 | Значение | Описание                                                                                                                                                   |
| --------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **redirectUrl** | строка   | **Тестовый** URL для переадресации пользователя на шлюз платежной платформы. Если платеж не требует переадресации, то данный параметр будет отсутствовать. |
| **receiptUrl**  | строка   | **Тестовый** URL для переадресации пользователя на чек платежа.                                                                                            |

{% hint style="info" %}
***Предупреждение***: в тестовом режиме переданная информация не сохраняется. Поэтому информация по платежу может отличаться от переданных значений при создании платежа. Номер чека платежа и paymentId после оплаты по реквизитам также изменятся.
{% endhint %}

### Тестовые реквизиты

{% hint style="warning" %}
URL, полученный при создании платежа в тестовом режиме, необходим только для тестирования платежа, 3ds-авторизации и вывода чека. \
\&#xNAN;*Не передавайте такую ссылку пользователям!*
{% endhint %}

Чтобы протестировать оплату, перейдите по сформированной ссылке. Ссылка ведёт на тестовую форму для ввода реквизитов карты. Введите реквизиты и пройдите 3ds-авторизацию для получения статуса по платежу. Деньги по реальным реквизитам списываться не будут.

### **Тестовые реквизиты для оплаты картой**

{% hint style="info" %}
Дата выпуска карты и CVC код могут быть любыми
{% endhint %}

| Номер                 | Описание                                 | Тип карты                                        |
| --------------------- | ---------------------------------------- | ------------------------------------------------ |
| `5555 5555 5555 4444` | Успешный платеж                          | <p>Mastercard<br><sub>(без 3-D Secure)</sub></p> |
| `4111 1111 1111 1111` | Успешный платеж                          | Visa                                             |
| `2201 3820 0000 0013` | Успешный платеж                          | МИР                                              |
| `4024 0071 2387 4108` | Недостаточно средств                     | Visa                                             |
| `5100 0000 0000 0412` | Ошибка 3ds-аутентификации                | Visa                                             |
| `2201 2345 6788 0123` | Транзакция не разрешена банком-эмитентом | Мир                                              |
| `4000 0000 0000 0002` | Ожидание                                 | Visa                                             |

После введения реквизитов карты будет переход на **тестовую** форму 3ds-авторизации.\
В поле Код необходимо ввести **123456** для успешного платежа.

### Информация о платеже

После тестовой оплаты в течение ближайшего часа вы сможете просмотреть электронный чек и взаимодействовать с ним.&#x20;

Также вы можете по API отправить запрос на уточнение информации по тестовому платежу:&#x20;

```
https://unitpay.ru/api?
     method=method=getPayment
     params[login]=email аккаунта
     params[paymentId]=номер тестового платежа
     params[secretKey]=секретный ключ аккаунта
     params[test]=1
```

### Возврат платежа <a href="#refundpayment" id="refundpayment"></a>

**refundPayment**\
Обязательные параметры метода

**Тестовые paymentId для возврата платежа:**

| Значение      | Сумма | Частичный возврат |
| ------------- | ----- | ----------------- |
| `12358132134` | 5000  | Поддерживает      |
| `383117770`   | 1000  | Не поддерживает   |

Добавьте к запросу необязательный **params\[sum]**, чтобы получить различные события возврата платежа (больше или меньше допустимой суммы возврата).

## Выплаты

### Создание выплаты <a href="#masspayment" id="masspayment"></a>

**massPayment**\
Обязательные параметры метода

**Тестовые параметры для выплат:**

| Параметр            | Значение                              |
| ------------------- | ------------------------------------- |
| **`transactionId`** | Любая строка из латинских букв и цифр |
| **`purse`**         | Любая строка из латинских букв и цифр |

При создании выплаты можно получить разные статусы. Чтобы протестировать их, используйте параметр **paymentType=card** и следующие **transactionId**:

| Значение              | Статус         |
| --------------------- | -------------- |
| `F12358132134`        | success        |
| `F383117770`          | error          |
| Любое другое значение | not\_completed |

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

### Информация о выплате <a href="#masspaymentstatus" id="masspaymentstatus"></a>

**massPaymentStatus**\
Обязательные параметры метода

В тестовом режиме получить информацию можно только по выплате из списка. Тестовые параметры можно посмотреть в таблице ниже.

**Тестовые transactionId для получения информации по выплате:**

| Значение              | Статус          |
| --------------------- | --------------- |
| `F12358132134`        | success         |
| `F383117770`          | error           |
| Любое другое значение | Ответ с ошибкой |

## Подписки

{% hint style="warning" %}
**ВАЖНО:** в тестовом режиме вы не сможете подтвердить подписку на проекте - на ваш обработчик **subscriptionId** не поступает.&#x20;

В тестовом режиме предусмотрено создание ссылки на оплату с подпиской, просмотр списка активных подписок, получение информации о подписке по *конкретному* **subscriptionId**, а также закрытие подписки.&#x20;

Данный функционал позволяет лишь посмотреть как выглядит запрос-ответ, **без реальных операций.** Для проверки реальной оплаты рекомендуем создавать подписку в [боевом режиме](https://help.unitpay.ru/payments/recurring-payments) на небольшие суммы.
{% endhint %}

### Оплата по подписке

Оплата по подписке доступна только по картам. Чтобы провести тестовую оплату по подписке, добавьте к методу initPayment параметр **subscriptionId** с тестовым значением.

**Тестовые subscriptionId:**

| Значение                    | Описание                           |
| --------------------------- | ---------------------------------- |
| от 1 до 5                   | Успешный платеж                    |
| Любой другой subscriptionId | Выдаст ошибку: Подписка не найдена |

### Получение списка активных подписок <a href="#listsubscriptions" id="listsubscriptions"></a>

**listSubscriptions**\
Обязательные параметры метода

Чтобы получить список тестовых активных подписок, используйте ваш уникальный **projectId** и **секретный ключ для тестового режима.**

### Получение информации о подписке <a href="#getsubscription" id="getsubscription"></a>

**getSubscription**\
Обязательные параметры метода

В тестовом режиме получить информацию о подписке можно только по subscriptionId указанных в таблице ниже.

**Тестовые subscriptionId:**

| Значение | Статус |
| -------- | ------ |
| 1, 2, 5  | active |
| 3        | close  |
| 4        | new    |

### Закрытие подписки <a href="#closesubscription" id="closesubscription"></a>

**closeSubscription**\
Обязательные параметры метода

В тестовом режиме можно закрыть только подписку из таблицы ниже.

**Тестовые subscriptionId подписок:**

| Значение | Статус |
| -------- | ------ |
| 1, 2, 5  | active |
| 3        | close  |
| 4        | new    |

**Внимание:** в тестовом режиме статус закрытия подписки не сохраняется.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.unitpay.ru/other/test-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
