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

{% 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 %}


---

# 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://wiki.aaio.so/priem-platezhei/sozdanie-zakaza-zaprosom-rekomenduem.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.
