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

«Не оплачен», «транзакция ожидает подтверждения», «инвойс просрочен» и «оплачен с опозданием» — разные состояния с разными действиями.

Короткая таблица решений

СитуацияДействие продавцаВыдавать товар или услугу?
Транзакции нет, инвойс активенНапомнить покупателю и оставить исходный инвойсНет
Транзакция отправлена до дедлайна, но ещё pendingПроверить хеш и дождаться подтверждения сетиПока нет
Транзакции нет, инвойс истёкЗакрыть попытку; при необходимости создать новый инвойсНет
Подтверждённый перевод пришёл после истеченияПроверить сеть, токен, адрес и сумму; применить политику поздней оплатыРешение вручную
Перевод не сопоставляется с инвойсомСобрать доказательства и провести проверкуНет
После старого выставлен новый инвойсЯвно попросить использовать только новую ссылкуПосле оплаты нового инвойса

Если отличается сумма, используйте сценарий для недоплаты и переплаты. Если выбрана другая сеть, следуйте инструкции по проверке и восстановлению перевода в неправильной сети. Не сводите такие случаи к общей формулировке «поздний платёж».

Документация BTCPay Server отдельно описывает просроченные, частично и поздно оплаченные инвойсы. Coinbase Business различает открытые, оплаченные, аннулированные и overdue-инвойсы. Названия статусов отличаются, но принцип один: срок действия и доказательство платежа нельзя смешивать.

Что означает истечение инвойса

Срок действия — это конец платёжного окна. Он не удаляет уже совершённую блокчейн-транзакцию и технически не запрещает позднее отправить токены на публичный адрес. Он означает, что checkout и система заказов больше не должны автоматически принимать новый платёж по старому запросу.

Это важно, потому что:

  • цена, наличие товара или условия услуги могли измениться;
  • котировка фиата к токену могла устареть;
  • покупателю уже могли выставить заменяющий инвойс;
  • поздний перевод можно ошибочно отнести к другому заказу;
  • автоматическая выдача через неограниченное время создаёт риск двойного исполнения.

Источником истины служит время, показанное на checkout. Не придумывайте второй дедлайн в переписке и не говорите покупателю, что просроченную страницу всё ещё можно безопасно оплатить.

Как это работает в GramPayBot

GramPayBot сопоставляет платёж по заданным сети, токену, получателю, точной сумме и платёжному окну. После истечения инвойса активные способы оплаты на странице скрываются. Штатная автоматическая проверка учитывает подтверждённые переводы в рамках окна инвойса; поздний перевод не превращает просроченный инвойс в оплаченный незаметно для продавца.

Токены при этом могут попасть прямо в контролируемый продавцом кошелёк. Но «средства дошли до адреса» и «инвойс оплачен на его условиях» — не одно и то же. Поздний перевод надо проверить и оформить отдельным решением.

Полный жизненный цикл описан в статье процесс выставления криптоинвойсов для малого бизнеса.

Если инвойс ещё активен, а оплаты нет

  1. Повторно отправьте покупателю исходную checkout-ссылку.
  2. Попросите использовать токен, сеть и полную сумму с текущей страницы.
  3. Предупредите, что после показанного срока платить нельзя.
  4. Оставьте заказ в статусе ожидания.
  5. Исполняйте заказ только после подтверждённого совпадающего платежа.

Не создавайте несколько одновременно активных инвойсов для одного заказа только потому, что покупатель не отвечает. Несколько ссылок повышают вероятность двойной оплаты.

Если покупатель говорит «я оплатил»

Запросите исходный хеш или подпись транзакции, а не скриншот. Затем проверьте:

  1. Сеть: совпадает ли она с инвойсом?
  2. Статус: завершился ли перевод успешно и достиг ли нужного подтверждения?
  3. Токен: настоящий ли это контракт или mint USDT/USDC?
  4. Получатель: полностью ли совпадает адрес?
  5. Сумма: совпадает ли она до всех знаков, включая идентифицирующий хвост?
  6. Время: когда транзакция вошла в блок относительно срока инвойса?
  7. Повторное использование: не привязан ли этот хеш к другому заказу?

Отправленная транзакция ещё может ожидать включения и финализации. Официальная документация Ethereum описывает этот путь в жизненном цикле транзакции. Пока результат не подтверждён, заказ должен оставаться в ожидании.

При любом сомнении используйте чек-лист проверки криптоплатежа.

Что делать после истечения без платежа

Если подтверждённого перевода нет:

  1. Зафиксируйте исходную попытку как закрытую.
  2. Уточните, всё ли ещё покупатель хочет продолжить сделку.
  3. Перепроверьте цену, наличие и коммерческие условия.
  4. Создайте новый инвойс с новым сроком.
  5. В одном ясном сообщении укажите, что платить надо только по новой ссылке.
  6. Сохраните ID старого инвойса для поддержки и аудита.

Не переписывайте историю так, будто новый запрос — это старый инвойс. У заменяющего инвойса должны быть собственные идентификатор и статус.

Сообщение покупателю может выглядеть так:

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

Если подтверждённый платёж пришёл поздно

Сначала полностью проверьте перевод. В GramPayBot нет действия, которое переводит уже просроченный инвойс в paid. Если правильный токен пришёл в правильный кошелёк после срока, выберите и зафиксируйте один бизнес-исход:

  • Исполнить заказ как документированное исключение вне просроченного инвойса, если цена и доступность не изменились, а правила допускают опоздание. Сам инвойс в GramPayBot остаётся expired — не называйте его оплаченным вручную или автоматически в продукте.
  • Зачесть в новый заказ, сохранив явную связь в учёте.
  • Вернуть, если исполнение невозможно или правила не принимают поздние платежи.
  • Оставить на проверке, если непонятны токен, сумма, владелец или связь с клиентом.

Не принимайте позднюю оплату автоматически только из-за похожей суммы. И не возвращайте автоматически на адрес отправителя: биржи часто отправляют средства с общих операционных кошельков, куда возврат может не зачислиться покупателю.

Безопасный возврат

Подтверждённую блокчейн-транзакцию нельзя отредактировать или отменить через GramPayBot. Возврат — это новая исходящая транзакция продавца.

Перед возвратом:

  1. Проверьте исходный перевод в блокчейне.
  2. Подтвердите сеть, настоящий контракт, сумму и кошелёк-получатель.
  3. Аутентифицируйте клиента через исходный заказ или канал поддержки.
  4. Запросите и отдельно подтвердите адрес возврата в той же поддерживаемой сети.
  5. Согласуйте, как учитываются сетевые или биржевые комиссии.
  6. Для крупной суммы используйте подтверждение второго сотрудника.
  7. Привяжите хеш возврата к инвойсу и заказу.

Никогда не запрашивайте seed-фразу или приватный ключ. Не используйте «сервис восстановления» из неожиданного личного сообщения.

Как не допустить двойной оплаты

Самый опасный момент — когда у покупателя одновременно есть старая и новая ссылки. Снизить риск помогают:

  • однозначный просроченный статус;
  • новая ссылка в том же подтверждённом канале связи;
  • фраза «не оплачивайте предыдущий инвойс»;
  • просьба остановиться, если первая транзакция уже pending;
  • проверка обоих инвойсов перед исполнением;
  • правило: один принятый хеш учитывается только один раз.

Инструкция со стороны покупателя — в статье как оплатить инвойс в USDT или USDC.

Что сохранить в обращении поддержки

  • ID заказа, контакты клиента;
  • ID исходного инвойса и срок с часовым поясом;
  • ID заменяющего инвойса;
  • ожидаемые сеть, токен, адрес и точную сумму;
  • заявленный хеш и фактическое время блока;
  • on-chain статус и результат проверки;
  • решение: отклонено, исполнено как исключение, зачтено в новый заказ или возвращено;
  • согласовавший сотрудник, сообщения клиенту и хеш возврата.

Такой журнал полезнее папки скриншотов: он сохраняет проверяемые основания решения.

Частые вопросы

Можно ли оплатить просроченный криптоинвойс?

Технически токены иногда всё ещё можно отправить на публичный адрес, но делать этого не следует. Страница больше не принимает оплату, а поздний перевод потребует ручной проверки.

Что, если транзакцию отправили до срока, а подтвердили после?

Не ориентируйтесь только на время нажатия кнопки в кошельке. Проверьте фактическое включение в блок, статус и результат сопоставления системой.

Продлевать старый инвойс или создать новый?

Создайте новый, если в продукте нет явной аудируемой функции продления. Так новый срок и решение по заказу остаются прозрачными.

Может ли GramPayBot отменить поздний перевод?

Нет. Средства идут прямо в кошелёк продавца. Возврат выполняется отдельной транзакцией владельца кошелька.

Создавать новый инвойс, если покупатель мог уже заплатить?

Сначала запросите хеш и проверьте первый перевод. Иначе покупатель может заплатить дважды.

Следующий шаг

Создайте отслеживаемую ссылку на оплату

Выставьте счёт в USDT или USDC вручную, отправьте hosted checkout и отслеживайте статус без API.

Ссылки на оплату →