Повторите заказ с исходным request_id и неизменными параметрами. Не создавайте новый ключ только из-за тайм-аута. NotPanel может вернуть уже принятый заказ или попросить подождать, если обработка продолжается.
Клиент совершил одну покупку. Если после отправки в панель ответ потерялся, следующий шаг должен восстановить эту покупку, а не превратить неизвестный результат в новую.
После тайм-аута возможны три ситуации
- Запрос не дошёл, заказ не был принят.
- Заказ принят, но ответ потерялся.
- Обработка продолжается, результат пока неизвестен.
Тайм-аут не различает эти случаи. HTTP сам по себе не делает повтор POST с покупкой безопасным: защиту задаёт контракт API. См. RFC 9110, §9.2.2.
Как NotPanel распознаёт повтор
request_id необязателен, не может быть пустым и допускает до 128 символов. idempotency_key — совместимый псевдоним; при наличии обоих используется request_id. Сохраняйте аккаунт, ключ и все параметры заказа. Принятый заказ возвращает исходный ID; тот же ключ с другими параметрами отклоняется.
Без обоих полей NotPanel защищает одинаковые add одного аккаунта в течение 60 секунд. Не рассчитывайте на этот короткий интервал при позднем повторе. Запросы с неизвестным результатом остаются защищены на время проверки.
Две намеренно одинаковые покупки в этом интервале тоже считаются одним запросом. Для немедленного создания двух отдельных заказов назначьте каждой новой покупке свой request_id. Не меняйте ключ, чтобы обойти неопределённый результат.
Параметры и ответы создания заказа
После тайм-аута сохраните исходный request_id.
Повторите запрос с тем же ключом и неизменными данными заказа.
Запишите восстановленный ID заказа или подождите, если результат неясен.
Сохраните идентификатор покупки до отправки
Для строки покупки 8427 сохраните request_id и полные параметры до первой попытки. В схеме используются заполнители и переносы строк; реальную форму кодируйте обычным способом. Отправляйте реальные значения только для нужного вам платного заказа.
POST https://notpanel.com/api/v3
Content-Type: application/x-www-form-urlencoded
key=YOUR_API_KEY
&action=add
&service=YOUR_SERVICE_ID
&link=YOUR_TARGET_URL
&quantity=YOUR_VALID_QUANTITY
&request_id=checkout-8427-line-1После тайм-аута повторите checkout-8427-line-1 с теми же услугой, целью, количеством и дополнительными полями, даже после перезапуска. Сохраните полученный ID заказа и используйте его в status. request_id определяет запрос создания и не заменяет ID заказа при проверке статуса.
Читайте весь ответ
- Тайм-аут или неопределённый ответ
- Сохраните ключ и параметры. Ограничьте число повторов, делайте паузы и учитывайте Retry-After. После исчерпания попыток оставьте запись нерешённой.
- REQUEST_PROCESSING или REQUEST_UNCONFIRMED
- Подождите и повторяйте только исходный запрос. Не создавайте замену с другим ключом.
- REQUEST_ID_CONFLICT
- Сравните сохранённые параметры. Для восстановления верните исходные значения; новый ключ нужен только для намеренно отдельной покупки.
- Ошибка проверки, авторизации или лимита
- Читайте error_code и retryable. Исправьте данные или ключ доступа и соблюдайте время ожидания. Не повторяйте любую ошибку автоматически.
Проверьте восстановление до клиентских покупок
Начните с имитации API в своей тестовой среде. Реальная покупка и специальный тестовый ключ NotPanel не нужны.
- Сымитируйте принятый заказ и потерянный ответ; повтор должен сохранить ключ и параметры.
- Перезапустите клиент и восстановите сохранённый идентификатор.
- Верните сначала обработку, затем успех; должен сохраниться один ID заказа.
- Верните конфликт или ошибку без повтора; автоматические попытки должны остановиться.
- Создайте две новые одинаковые покупки с разными ключами. Для последующего реального теста используйте нужный заказ и проверьте заказ и операции кошелька.
Частые вопросы
Означает ли тайм-аут двойное списание?
Нет. Он означает отсутствие пригодного ответа. Проверьте восстановленный заказ и операции кошелька, прежде чем делать вывод о двойном списании.
Обязателен ли request_id?
Нет. request_id и idempotency_key необязательны. Без них одинаковые add одного аккаунта защищены на 60 секунд. Явный ключ определяет каждую отдельную покупку.
Нужен ли новый ключ для каждой попытки?
Нет. Сохраните один ключ до первой попытки и повторяйте его с неизменным заказом. Новая покупка получает новый ключ.
Можно ли передать request_id в status?
status требует ID заказа. Восстановите его повтором исходного add с тем же ключом и параметрами. Если результат неизвестен, сохраните детали для поддержки, не создавая ещё один заказ.
Далее: руководство по интеграции · вебхуки и опрос статуса · справочник ошибок.



