# Использование тестового 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    |

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