# Статусы платежей

Метод позволяет получить **актуальный статус** платежа (канал `link`) по идентификатору из ответа при инициации (`order_id`) или по вашему `user_data`, если `order_id` не сохранён. Используйте запрос для опроса состояния после [создания платежа по форме](/pages/link/init-form) или через [GATE](/pages/link/host2host), а также при сбоях доставки колбека.

## Принцип работы

1. **Идентификация** — в запросе указываете `order_id` (из ответа `init_form` / `init_payment`) **или** `user_data` (ID заказа на вашей стороне).
2. **Запрос** — сервер отправляет подписанный запрос на эндпоинт `status_payment`.
3. **Ответ** — API возвращает JSON с текущим `status`, суммами, временными метками и при необходимости `redirect_url` или `token`.


Расшифровка кодов `status` и `status_description` — в разделе [Статусы транзакций](/pages/transaction-statuses).

## Техническая информация

|  |  |
|  --- | --- |
| **Эндпоинт** | `https://api.1payment.com/status_payment` |
| **Методы** | `GET`, `POST` |
| **Формат ответа** | JSON |
| **Тип платежа в ответе** | Для канала `link` поле `payment_type` равно `link` |


## Параметры запроса

### Обязательные

| Параметр | Тип | Описание |
|  --- | --- | --- |
| `partner_id` | Integer | Ваш уникальный ID в системе 1Payment. |
| `project_id` | Integer | Идентификатор вашего проекта. |
| `sign` | String | Контрольная подпись запроса (см. раздел «Подпись»). |


### Идентификация платежа

Нужно передать **один** из параметров:

| Параметр | Тип | Описание |
|  --- | --- | --- |
| `order_id` | String | ID платежа в 1Payment (из ответа при инициации). |
| `user_data` | String | Ваш ID заказа; используется, если `order_id` не указан. |


## Формирование подписи (`sign`)

Подпись: MD5, lowercase (hex). Общие правила — [Формат запроса к API](/pages/init-request#%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-sign).

**Формула:**


```text
MD5(status_payment + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)
```

**Пример строки до хеширования** (поиск по `order_id`):


```text
status_paymentorder_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&partner_id=1234&project_id=5678secret_key
```

### Проверка подписи в документации

## Примеры запроса

Node.js

```javascript
const crypto = require('crypto');
const axios = require('axios');

async function getLinkPaymentStatus(apiKey, params) {
  // 1. Сортируем параметры по алфавиту
  const sortedKeys = Object.keys(params).sort();
  const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');

  // 2. Подпись с префиксом status_payment
  const baseString = `status_payment${queryString}${apiKey}`;
  params.sign = crypto.createHash('md5').update(baseString).digest('hex');

  // 3. GET-запрос
  const response = await axios.get('https://api.1payment.com/status_payment', { params });
  return response.data;
}

const apiKey = process.env.ONEPAYMENT_API_KEY;
const data = {
  partner_id: 1234,
  project_id: 5678,
  order_id: '8p3brmb19gfg0sg8gcwhws8kgc748s87',
};

getLinkPaymentStatus(apiKey, data).then(console.log);
```

Python

```python
import hashlib
import os
import requests

def get_link_payment_status(api_key: str, params: dict) -> dict:
    # 1. Сортировка параметров по алфавиту
    sorted_keys = sorted(params.keys())
    query_string = "&".join(f"{k}={params[k]}" for k in sorted_keys)

    # 2. Подпись status_payment
    base_string = f"status_payment{query_string}{api_key}"
    params["sign"] = hashlib.md5(base_string.encode("utf-8")).hexdigest()

    # 3. GET-запрос
    response = requests.get("https://api.1payment.com/status_payment", params=params)
    response.raise_for_status()
    return response.json()

api_key = os.environ["ONEPAYMENT_API_KEY"]
data = {
    "partner_id": 1234,
    "project_id": 5678,
    "order_id": "8p3brmb19gfg0sg8gcwhws8kgc748s87",
}
print(get_link_payment_status(api_key, data))
```

PHP

```php
<?php

function getLinkPaymentStatus(string $apiKey, array $params): string
{
    // 1. Сортировка параметров по алфавиту
    ksort($params, SORT_LOCALE_STRING);
    $tail = '';
    foreach ($params as $k => $v) {
        if ($k === 'sign') {
            continue;
        }
        $tail .= "{$k}={$v}&";
    }
    $tail = substr($tail, 0, -1);

    // 2. Формирование подписи (префикс status_payment)
    $params['sign'] = md5('status_payment' . $tail . $apiKey);

    // 3. Запрос к API
    $url = 'https://api.1payment.com/status_payment?' . http_build_query($params);
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

// Пример данных запроса
$apiKey = getenv('ONEPAYMENT_API_KEY');
$data = [
    'partner_id' => 1234,
    'project_id' => 5678,
    'order_id' => '8p3brmb19gfg0sg8gcwhws8kgc748s87',
];

echo getLinkPaymentStatus($apiKey, $data);
```

cURL

```bash
# 1–2. Подпись: md5("status_payment" + order_id=...&partner_id=1234&project_id=5678 + API_KEY)

curl -sS "https://api.1payment.com/status_payment?partner_id=1234&project_id=5678&order_id=8p3brmb19gfg0sg8gcwhws8kgc748s87&sign=PASTE_MD5_HEX"
```

## Ответ API

Успешный ответ (`200`):


```json
{
  "payment_type": "link",
  "project_id": 5678,
  "order_id": "8p3brmb19gfg0sg8gcwhws8kgc748s87",
  "user_data": "inv_12345",
  "status": 3,
  "status_description": "SUCCESS",
  "init_time": "2026-05-05T18:23:11Z",
  "status_time": "2026-05-05T18:23:42Z",
  "merchant_price": 50,
  "user_price": 48.5,
  "currency": "RUB",
  "account": "link"
}
```

| Поле | Описание |
|  --- | --- |
| `payment_type` | Тип платежа; для канала `link` — значение `link`. |
| `project_id` | ID вашего проекта. |
| `order_id` | ID платежа в системе 1Payment. |
| `user_data` | Идентификатор, переданный при создании платежа. |
| `status` | Числовой код: `2` — ожидание, `3` — успех, `4` — отказ. |
| `status_description` | `PENDING`, `SUCCESS` или `FAILURE`. |
| `init_time` | Время создания платежа (UTC). |
| `status_time` | Время получения текущего статуса (UTC). |
| `merchant_price` | Сумма платежа. |
| `user_price` | Отчисления партнёра. |
| `currency` | Валюта платежа (ISO 4217). |
| `account` | Идентификатор канала (значение `link`). |
| `status_code` | Код причины отказа (при `status` = `4`). |
| `token` | Токен подписки для рекуррентов (если подключено). |
| `redirect_url` | Ссылка на оплату у партнёра, если платёж ещё в ожидании и нужна страница/QR. |
| `test` | `1` для тестовых транзакций. |


Ошибка запроса (`400`):


```json
{
  "error_code": 2
}
```

## Связанные разделы

- [Создание платежа по форме](/pages/link/init-form)
- [Создание платежа по host2host (GATE)](/pages/link/host2host)
- [Возвраты платежей](/pages/link/refund)
- [Статусы транзакций](/pages/transaction-statuses)