# Настройка автосверки через postback
Принцип работы автосверки через postback схож с [автосверкой через XML](/article/ru/191.html), но в данном случае ваш сервер сам отправляет запрос с данными об обработанных действиях серверу Admitad. Такой способ считается более защищенным и потому популярен среди финансовых программ.

О том, что такое «сверка» и «автосверка», читайте [в этой статье](/article/ru/222.html).

При автосверке через postback данные в статистике Admitad обновляются оперативнее, поскольку запрос отправляется в момент изменения статуса действия или каждые 2-3 часа (в зависимости от настроек автосверки), а не раз в день как при сверке через XML.
Сверять можно только заказы, находящиеся в ожидании на момент сверки.

:::tip
Подтверждение заказа означает, что вы готовы выплатить веб-мастеру вознаграждение за этот заказ. После того как вы подтвердите заказ, веб-мастер может вывести вознаграждение из системы, поэтому настоятельно рекомендуем проводить все необходимые проверки по заказу до его подтверждения.
:::

Сверять заказы можно 2 способами:

*   [через подпись запроса](#signature);
*   [через ключ и IP-адрес](#key-ip-address).

## Сверка через подпись запроса <span id="signature" />

Этот способ удобен тем, что не требуется указывать IP-адрес. Он подойдет вам, если у вас динамический диапазон IP-адресов.

Для подписи запроса на сверку используется HMAC-SHA1 алгоритм для campaign\_code и order\_id (ваш номер программы и номер заказа одной строкой без пробелов и спецсимволов). Все строки должны быть в utf-8. Пример на Python 3.7.2/2.7 (IPython)

```
In [16]: import hmac 
In [17]: import hashlib 
In [18]: campaign_code = u'campaign_code'.encode('utf-8') 
In [19]: order_id = u'my_order_id_here'.encode('utf-8') 
In [20]: revision_secret_key = u'0123456789acbdef'.encode('utf-8')
In [22]: revision_sign = hmac.new(revision_secret_key, campaign_code + order_id, hashlib.sha1).hexdigest() 
In [23]: print(revision_sign) '01ae14a1c4ef90e6ce48c65525833e3f8a1f0228' 
In [24]:
```

### Необходимые параметры <span id="required-parameters" />

Значения параметров **campaign\_code** и **revision\_secret\_key** вы получите от сотрудников отдела трекинга в процессе настройки автосверки.

*   **campaign\_code** — код программы (строка, 10 символов);
*   **revision\_secret\_key** — секретный ключ для сверки через запросы (строка, 40 символов);
*   **revision\_sign** — выходная подпись (см. пример выше);
*   **order\_id** — номер заказа (строка, 1-100 символов);
*   **status** — статус заказа, может принимать значения:
*   pending — ожидает
*   approved — одобрен
*   declined — отклонен
*   **amount** — сумма заказа (дробное число, разделитель точка);
*   **reward** — вознаграждение веб-мастера (в виде дробного числа, в качестве разделителя точка);
*   **currency\_code** *(необязательный)* — валюта (трехбуквенный код) для значений в параметрах amount (сумма заказа) и reward (вознаграждение веб-мастера);
    *   если вы не передаете currency\_code, то по умолчанию для currency\_code используется валюта, указанная в партнерской программе;
    *   если вы передаете currency\_code и валюта в нем отличается от валюты в программе, то суммы в параметрах amount (сумма заказа) и reward (вознаграждение веб-мастера) будут конвертированы в валюту программы по курсу в системе на дату регистрации целевого действия.
*   **comment** — комментарий к заказу, в нем обязательно указывать причину отклонения (строка, 0-30 символов).

### Пример postback-запроса <span id="postback-request-example" />

```
https://ad.admitad.com/rp?campaign_code=8f803552ea&
revision_sign=01ae14a1c4ef90e6ce48c65525833e3f8a1f0228&order_id=&status=&comment=
```

## Сверка через ключ и IP-адрес <span id="key-ip-address" />

### Необходимые параметры <span id="required-parameters-2" />

Значения параметров campaign\_code и revision\_key вы получите от сотрудников отдела трекинга в процессе настройки автосверки. Сообщите IP-адрес или список адресов, с которых будут приходить запросы.

*   **campaign\_code** — код программы (строка, 10 символов);
*   **revision\_key** — ключ авторизации для сверки через запросы (строка, 32 символа);
*   **order\_id** — номер заказа (строка, 1-100 символов)
*   **status** — статус заказа, может принимать значения:
    *   pending — ожидает
    *   approved — одобрен
    *   declined — отклонён
*   **amount** — сумма заказа (дробное число, разделитель точка);
*   **reward** — вознаграждение веб-мастера (в виде дробного числа, в качестве разделителя точка);
*   **currency\_code** *(необязательный)* — валюта (трехбуквенный код) для значений в параметрах amount (сумма заказа) и reward (вознаграждение веб-мастера);
    *   если вы не передаете currency\_code, то по умолчанию для currency\_code используется валюта, указанная в партнерской программе;
    *   если вы передаете currency\_code и валюта в нем отличается от валюты в программе, то суммы в параметрах amount (сумма заказа) и reward (вознаграждение веб-мастера) будут конвертированы в валюту программы по курсу в системе на дату регистрации целевого действия.
*   **comment** — комментарий к заказу, в нем обязательно указывать причину отклонения (строка, 0-30 символов).

### Пример postback-запроса <span id="postback-request-example-2" />

```
https://ad.admitad.com/rp?campaign_code=8f803552ea&
revision_key=3b9e06d28835AA872AE9cb6fc1186d1E&order_id=&status=&comment=
```

### Тестирование <span id="testing" />

По окончании настройки обязательно проводится тестирование. Сотрудники Admitad делают два тестовых заказа, вы должны подтвердить один из них, изменив сумму заказа, а второй отклонить с комментарием. Если данные загрузились корректно: к соответствующим заказам, статусы верные, сумма заказа скорректирована, присутствует комментарий — тестирование считается успешным, и сотрудники отдела трекинга запускают автосверку.

## Уведомления об ошибках <span id="error-messages" />

При отправке запроса в качестве ответа приходит JSON с результатами валидации запроса:

*   в случае успеха {"success"\:true}, "message": "request is processing". Статус говорит о том, что запрос прошел предварительную валидацию, но может быть отклонен на внутренней проверке.
*   в случае отклонения запроса {"errors":\["length revision\_key must be no more than 32"],"success"\:false}, в errors будут указаны причины отклонения.

По возможности настройте на своей стороне уведомление на ответ, содержащий {“errors”} с логированием этих ответов. Если ошибки начнут появляться, сообщите вашему менеджеру в Admitad.