Какие сведения нужны для сверки покупки?

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

Клиенту уже требуется ответ, но действие с деньгами выбирают после сверки. Две строки в банке могут относиться к разным завершённым платежам либо показывать блокировку средств и последующее списание. В магазине дополнительно проверяют повторную запись статуса одной операции: она возникает и без второго банковского списания. По одному экрану магазина выбрать действие нельзя. Если сотрудник пообещает возврат до сверки, затем ему придётся объяснять покупателю, почему компания отложила уже названное действие, какой платёж признала лишним и что на самом деле произошло с покупкой.

Ответ покупателю и работа с заказом

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

Сначала достаточно номера заказа, спорной суммы и времени каждой записи со стороны покупателя. Полный номер карты и секретные коды для такой сверки не нужны. Записи из банка помогают найти событие, а идентификаторы и статусы в платёжном сервисе позволяют определить его смысл. Данные передаются назначенному исполнителю по принятому в компании каналу, чтобы сведения клиента не разошлись по нескольким несвязанным перепискам.

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

Параллельно менеджер проверяет, не появился ли второй заказ и не пошли ли два задания на отгрузку. Если исполнение покупки уже началось, финансовую проверку и решение по отправке товара согласуют между собой: задержка ответа о деньгах не должна превращаться в незаметную повторную поставку. Отдельный комментарий в карточке сохраняет эту связь для сотрудников следующей смены. Вместо общего статуса «ошибка оплаты» я бы оставил в обращении формулировку наблюдаемого факта: покупатель сообщил о двух банковских записях по одному заказу, сверка не завершена. Она помогает исполнителю начать с доказательств и установить причину по найденным операциям.

Какие операции относятся к одному заказу?

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

Исполнитель сопоставляет номер покупки с идентификаторами в платёжном сервисе и смотрит актуальное состояние каждой найденной операции. В процессе платежа ЮKassa состояние waiting_for_capture означает авторизацию денег с ожиданием списания, а succeeded — успешное завершение. Второй статус окончательный. Временная блокировка суммы, которую называют холдом, поэтому требует другого разбора, чем второй завершённый платёж.

Ниже приведены состояния именно ЮKassa; названия в другом сервисе исполнитель сверяет с его документацией. Карточка заказа в магазине может показывать собственную надпись, поэтому её значение нужно связать с состоянием конкретной операции.

Статус операции и связь с покупкой

Что найдено в сервисеЧто это подтверждаетПредмет дальнейшей проверки
Платёж в состоянии pendingОперация создана, процесс ещё не завершёнТекущее состояние и ожидаемое действие
waiting_for_captureДеньги авторизованы, списание ожидаетсяНужна ли эта авторизация для покупки
Два разных платежа succeededЗавершены две операцииОтносятся ли обе к одной покупке
Один идентификатор в двух уведомленияхПовторяется сообщение об одной операцииСоздались ли лишние записи в магазине

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

Рядом с найденной связью сохраняют её основание: сведения платёжного кабинета, запись магазина или журнал обмена. Это уменьшает повторную работу, если к разбору подключится бухгалтер либо поддержка сервиса и попросит объяснить, почему конкретная операция признана относящейся к спорной покупке. Бывает и обратное расхождение: банк покупателя показывает две записи, а магазин связывает заказ только с одной операцией. Отсутствие второй строки внутри сайта ещё не объясняет банковское движение. Ответственный передаёт данные поддержке платёжного сервиса для поиска второй записи и сохраняет вопрос открытым до ответа, чтобы затем объяснить покупателю назначение обеих записей.

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

Что исправлять в деньгах и в учёте?

Ответственный сначала решает, требуется ли действие с деньгами или исправление записи магазина. Фраза «убрать дубль» может означать возврат лишнего платежа, отмену ненужной авторизации или исправление записи в системе магазина, а последствия у этих действий разные.

ЮKassa разрешает отменять платежи в состоянии waiting_for_capture; после перехода в succeeded для возврата денег создаётся отдельный возврат. Это различие описано в документации платёжного процесса. Переименование состояния заказа не выполняет ни одно из этих действий.

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

Возврат и его фактический результат

В правилах возвратов ЮKassa указано, что через сервис деньги возвращаются на использованное при оплате платёжное средство. Перед выполнением проверяется доступность нужного типа возврата для этого способа оплаты. Частичный возврат поддерживается не всеми способами.

Для заказа с двумя равными успешными платежами задача обычно начинается с определения того, какая операция остаётся оплатой покупки и какая признана лишней. Окончательное решение опирается на фактический состав заказа и результаты сверки. Если суммы различаются, исполнитель устанавливает размер исправления отдельно, иначе автоматический возврат «второй суммы» способен затронуть нужную часть оплаты. Запрос и результат различаются. В той же документации ЮKassa описана отмена неуспешного возврата, например при недостатке денег для его проведения, поэтому отправленная команда ещё не подтверждает завершение. Покупателю сообщается фактическое состояние операции и следующий шаг, а срок появления денег в его банке уточняется по условиям соответствующих участников, без обещания универсального числа дней.

Денежное действие сопровождается исправлением учёта магазина. В карточке сохраняются нужная оплата и связь с возвратом или отменой, а исполнение заказа остаётся согласованным с этим итогом. Если повторная обработка успела создать лишнее уведомление, документ или задачу на отгрузку, их последствия тоже входят в разбор. Тогда бухгалтер, менеджер и сотрудник склада видят один результат, а не три разных версии истории покупки.

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

Почему повторяется уже выполненная оплата?

После решения по конкретному покупателю остаётся причина повторения. Двойное нажатие кнопки, повторная попытка после зависания страницы и повторная доставка уведомления проверяются как разные события: каждое может привести к своему лишнему действию.

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

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

Для повторных запросов ЮKassa использует ключ идемпотентности — отметку, которая позволяет распознать повтор одной операции. В описании взаимодействия с сервисом одинаковые данные с тем же ключом считаются повтором, а с другим ключом — новым запросом. Гарантия действует в течение 24 часов после первого запроса. Специалист выясняет, как этот срок и сохранение ключа учтены в магазине, а заказчику показывает итог повторной попытки на том же заказе, включая случай, когда посетитель вернулся после успешного завершения оплаты.

Потеря ответа не доказывает отказ. ЮKassa отдельно указывает, что код ошибки HTTP 500 не позволяет судить об успехе операции и требует сначала узнать её результат. Для магазина отсюда следует практическое требование: после зависания страницы посетитель возвращается к заказу и видит состояние оплаты, а менеджер видит результат первой попытки и объясняет следующий шаг.

Повторная доставка уведомления

Второй путь связан с сообщениями платёжного сервиса сайту. По правилам уведомлений ЮKassa получение подтверждается ответом HTTP 200, а при другом коде доставка повторяется в течение 24 часов после события. Повторное сообщение об одном платеже поэтому возможно без второго списания. Обработчик должен распознать уже учтённое событие и сохранить правильную сумму заказа, что исполнитель подтверждает отдельной проверкой.

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

Какой результат предъявит подрядчик при приёмке?

Задача подрядчику начинается с наблюдений по спорному заказу и заканчивается проверяемым поведением повторных попыток. Формулировка «исправить оплату» слишком широка: по ней трудно понять, устранена причина или только отредактирована одна карточка.

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

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

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

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

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

Главный вопрос исполнителю перед закрытием работы звучит так: «Можете показать по идентификаторам, что спорная сумма исправлена, а повтор той же попытки или уведомления больше не приводит к повторной оплате и лишним действиям по заказу?» Ответ с пройденными сценариями даёт руководителю основание принять работу и объяснить её итог сотрудникам.

Источники и полезные ссылки

  1. ЮKassa: процесс платежа, статусы и отмена ↗
  2. ЮKassa: условия и выполнение возврата ↗
  3. ЮKassa: повторные запросы и идемпотентность ↗
  4. ЮKassa: повторная доставка уведомлений ↗

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

Игорь Крещенко

Руководитель ШТАБ ИТ. Занимается управлением проектами, веб-разработкой, рекламой и PR. Подробнее об авторе →