> For the complete documentation index, see [llms.txt](https://wiki.aaio.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.aaio.so/priem-platezhei/sozdanie-zakaza-zaprosom-rekomenduem.md).

# Создание заказа запросом (Рекомендуем)

{% hint style="info" %}
**Почему рекомендуем создавать заказ именно отправляя запрос на сервер?** \
\&#xNAN;*В связи с зачастившими блокировками домена мы выделяем новый домен под форму оплаты. Чтобы не менять его каждый раз в продакшене, мы решили сделать данный метод который будет возвращать Вам всегда актуальный URL для оплаты!*
{% endhint %}

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

## Запрос

<mark style="color:green;">`POST`</mark>  `https://aaio.so/merchant/get_pay_url`

### Заголовки

`Accept: application/json` <mark style="color:red;">**\***</mark>\
`Content-Type: application/x-www-form-urlencoded` <mark style="color:red;">**\***</mark>

#### Определения <mark style="color:red;">**\***</mark>**&#x20;- обязательные заголовки. Без них Вы не сможете получить корректный ответ.**

### Параметры <mark style="color:red;">(url-encoded)</mark>

<table><thead><tr><th width="195">name</th><th width="149">type</th><th>description</th></tr></thead><tbody><tr><td>merchant_id <mark style="color:red;"><strong>*</strong></mark></td><td>uuid</td><td>ID Вашего магазина</td></tr><tr><td>amount <mark style="color:red;"><strong>*</strong></mark></td><td>double</td><td>Сумма к оплате в валюте магазина <br>(Если в сумме есть копейки, то отправляйте их с разделителем "." Пример: <code>100.18</code>)</td></tr><tr><td>order_id <mark style="color:red;"><strong>*</strong></mark></td><td>string <br>min: 1 <br>max: 64</td><td>Идентификатор заказа в Вашей системе. Значение параметра может содержать только буквы, цифры и символы <code>:</code> , <code>-</code>, <code>_</code>, <code>[</code>, <code>]</code> ,<code>|</code>.</td></tr><tr><td>sign <mark style="color:red;"><strong>*</strong></mark></td><td>string</td><td>Подпись заказа (<code>SHA256</code> Хеш). <br><a href="/pages/ToHMrtuPtnhlEYWedRiK">Методика формирования подписи для запроса</a></td></tr><tr><td>currency <mark style="color:red;"><strong>*</strong></mark></td><td>string</td><td>Валюта заказа. Доступные значения: <code>RUB</code>, <code>UAH</code>, <code>EUR</code>, <code>USD</code></td></tr><tr><td>method</td><td>string</td><td>Кодовое название платежной системы (см. <a href="https://wiki.aaio.so/prochee/kodovye-nazvaniya-metodov-popolneniya">способы оплаты</a>). Предлагаемый способ оплаты. Клиент сможет изменить его в процессе оплаты</td></tr><tr><td>desc</td><td>string <br>min: 1 <br>max: 512</td><td>Описание заказа (показывается клиенту при оплате)</td></tr><tr><td>email</td><td>string</td><td>E-Mail клиента</td></tr><tr><td>lang</td><td>string</td><td>Язык интерфейса. Доступные значения: <code>ru</code>, <code>en</code>. По умолчанию: <code>ru</code></td></tr><tr><td>referral</td><td>string</td><td>Внимание! Код реферала недоступен для данного метода, так-как пользователь будет отправлен не на основной домен <code>aaio.so</code>.</td></tr><tr><td>us_key</td><td>string <br>min: 1 <br>max: 2056</td><td><p>Так же Вы можете передавать свои параметры, которые наш сервер вернет на Ваш URL оповещения. Ключи параметров должны начинаться с <code>us_</code> и содержать только латинские символы и цифры. Максимальная длина - <code>15</code>. Значения параметров могут содержать только буквы, цифры и символы <code>-</code>, <code>_</code>, <code>[</code>, <code>]</code>, <code>+</code> ,<code>=</code>,<code>|</code>. Например: </p><p><code>us_name=ivanov&#x26;us_login=ivanov1971</code></p></td></tr></tbody></table>

<mark style="color:red;">Обратите внимание!</mark> Параметры передаются в формате `application/x-www-form-urlencoded`

## Примеры ответа

**Формат ответа** `application/json`

{% tabs %}
{% tab title="Успех - 200" %}

```json
{
	"type": "success",
	"url": "https://......" // URL для оплаты
}
```

{% endtab %}

{% tab title="Ошибка: 400, 401, 429, 500, 503  " %}
**Пользовательские коды ошибок** - `400`, `401`, `429`\
**Серверные коды ошибок** - `500`, `503`

```json
{
  "type": "fail",
  "code": "400",
  "message": "message"
}
```

{% endtab %}

{% tab title="Другой код ответа" %}
Если код ответа другой, то возможна проблема на стороне сервера API. \
**Рекомендуем учитывать такие ситуации в коде.**
{% endtab %}
{% endtabs %}

## Готовые примеры запроса

{% tabs %}
{% tab title="PHP" %}

```php
<?php
$merchant_id = ''; // ID Вашего магазина
$amount = 10.54; // Сумма к оплате
$currency = 'RUB'; // Валюта заказа
$secret = ''; // Секретный ключ №1 из настроек магазина
$order_id = 'php_curl_example'; // Идентификатор заказа в Вашей системе
$sign = hash('sha256', implode(':', [$merchant_id, $amount, $currency, $secret, $order_id]));
$desc = 'Order Payment'; // Описание заказа
$lang = 'ru'; // Язык формы

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://aaio.so/merchant/get_pay_url');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'merchant_id' => $merchant_id,
    'amount' => $amount,
    'currency' => $currency,
    'order_id' => $order_id,
    'sign' => $sign,
    'desc' => $desc,
    'lang' => $lang
]));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); // Таймаут подключения к нашему серверу
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // Таймаут обработки запроса

$result = curl_exec($ch); // Ответ
$http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); // Код ответа

if (curl_errno($ch)) {
	die('Connect error:' . curl_error($ch)); // Вывод ошибки соединения
}
curl_close($ch);

if(!in_array($http_code, [200, 400, 401])) {
	die('Response code: ' . $http_code); // Вывод неизвестного кода ответа
}

$decoded = json_decode($result, true); // Парсинг результа. На выходе получаем массив данных

if(json_last_error() !== JSON_ERROR_NONE) {
	die('Не удалось пропарсить ответ');
}

if($decoded['type'] == 'success') {
	print_r($decoded); // Вывод результата
} else {
	die('Ошибка: ' . $decoded['message']); // Вывод ошибки
}
```

{% endtab %}
{% endtabs %}
