Payments are experiencing issues due to temporary restrictions in Russia. If your payment does not go through, please submit a support request.Our support team is available 24/7 — we are always here to help with hosting and server issues.We are now accepting requests for dedicated server rental and colocation services in our data center.Reminder: we recommend enabling backups for additional data protection.A new VPS/VDS lineup with NVMe storage and improved performance is now available.Maintenance work on some servers has been completed. All services are operating normally.
Article7 min readViews1

Payment Processed, Yet Order Remains Unpaid: Where to Find the Lost Confirmation

Discrepancies between a payment service and a store can be isolated to a single transaction. Which records to compare, why a successful server response can be misleading, and when reprocessing poses a risk.

Comments 0

A payment terminal with a black screen next to a package. Generated illustration.
In this article

A buyer shows a deduction, the payment service account shows a transaction, but the store continues to wait for funds. Asking for payment again only complicates the investigation. First, you must link the specific payment to the specific order payment and find the last point where the confirmation was reliably processed. This requires records from both systems, not just a single screenshot from the buyer.

Below is the investigation procedure for a store owner on 1C-Bitrix: Site Management and an integration developer. Notification specifics are illustrated using the current YooKassa API, verified on September 26, 2026. Other providers may have different statuses, verification methods, and rules for re-delivery. The old protocol and the new API cannot be analyzed using a single instruction.

First, ensure you are comparing the same transaction

An order can have multiple payment attempts, partial payments, and various payment documents. The order number does not replace the transaction ID provided by the payment gateway. Construct a linkage comprising: the order, its payment document, the external payment ID, amount, currency, timestamp, and the merchant store. The secret key and full card data are not included in such a record.

Hypothetical example: the first attempt for 7,400 rubles did not complete, the second succeeded, but the module saved only a link to the first attempt in the order. Searching by the old ID will correctly show a failure. This is not yet a lost notification: the issue arose earlier, during the linking of the second attempt to the payment. Fixing the incoming message handler alone will not restore this linkage.

Separately check the operation mode. A test payment does not confirm actual receipt. In a two-stage scheme, authorizing funds and final deduction are different stages. In YooKassa, status waiting_for_capture means waiting for the deduction of the authorized amount, while succeeded indicates successful completion of the payment. The refund status must be checked separately: a payment completed at some point does not prove that the funds were not subsequently returned.

Confirmation and the buyer follow different routes

Returning the user to the store page occurs via the browser. The payment status notification arrives via a separate request from the payment service. The buyer may close the tab, lose internet connectivity, or never return; the server-side route must continue functioning regardless. Conversely, a loaded thank-you page does not prove payment was successful.

Two independent routes: the buyer's browser and server-side payment confirmation.
Integration scheme. The browser return displays a page, while payment modification requires verified data from the payment service.

It is useful for a developer to trace the server route across three boundaries: whether the request reached the store infrastructure, whether the application accepted it, and whether it saved the result in the correct payment document. Each transition requires a timestamp and an operation ID. If logs use different time zones, first convert all times to a single zone; otherwise, adjacent events are easily mistaken for different attempts.

The request did not reach the handler

Start with the delivery log on the provider side, if available, and the store's incoming request log. Look for the specific attempt within the required time interval. The absence of an entry in the application log does not mean the network request was absent: it could have been blocked by a reverse proxy, access restrictions, or site protection.

After migrating a site, the old notification address often remains. After enabling protection, the handler may start requiring browser verification or visitor authorization. Another option is redirecting the request to a different page: the store appears to work, but the service entry point now leads elsewhere. You must check the notification route, not the availability of the main page.

Do not disable the entire site's protection for testing. A responsible specialist correlates the failure with access rules and the specific payment service's requirements. If an exception is truly needed, it must be narrow and preserve notification authenticity. A random message from the internet must not alter the order's financial status.

Response received, but result not saved

In YooKassa, receipt of a notification is confirmed by code HTTP 200; other codes trigger a re-delivery within 24 hours from the event time. This period does not replace your own reconciliation of lost confirmations. When processing, you must also verify the authenticity and currency of the data, for example by requesting the current state of the object via API with server-side authentication.

A successful HTTP response indicates interaction with the endpoint but does not guarantee a correct business operation. A placeholder page can also return a success code. An application may confirm receipt and then lose the task in the queue. Therefore, the next record to look for is the saving of an event or processing result, not just a web server string.

If the integration uses a queue, its acceptance must be reliable: confirmation of receipt is sent only after the necessary information is stably stored. This reveals which task is linked to the payment, how many attempts were made, and the reason for the stop. This is an architectural requirement for the enhancement; enabling a queue without error control can simply shift the loss to another location.

When processing directly, check for application exceptions, save conflicts, and the search for a payment document. Conditional case: an external payment is found, but the corresponding payment in the store has already been replaced by a manager. A silent completion leaves the order unpaid and hides the cause. Such an operation must be routed to a discrepancy review with a specific description, not dissolve among successful responses.

Redelivery must not repeat the shipment

Event replay is an expected integration scenario. The handler must recognize an already accounted result via a stable link to the external payment. Two simultaneously received copies require the same protection as two sequential ones. A simple check for "not yet paid" before saving can be insufficient: both processes may see the same old state.

The developer separately protects the payment change itself and subsequent actions: sending an email, transferring the order to 1C, and creating a shipment. If the payment flag is already saved but the exchange with 1C fails, do not retry the money deduction. Resume the incomplete stage while preserving the link to the original operation.

The idempotency key used during payment creation and the protection of incoming notifications solve different problems. The former helps prevent creating an extra payment when an outgoing request is retried. The latter prevents applying the same financial result to the store twice. The presence of the first mechanism does not prove the correctness of the second.

Restore one connection and check failure boundaries

Before manual correction, the responsible employee compares the provider's current data, amount, and currency with the payment document, checks other successful attempts and refunds. If the funds relate to a different payment or the amount does not match, automatic status assignment must be stopped. Do not select an order based solely on a similar amount and close timing.

Correction is performed using the standard method of the specific module or via an agreed recovery procedure, with a record of the reason and the executor. Directly changing a field in the database can bypass related events and leave inconsistent data. Restarting the entire chain without clarifying already completed actions is dangerous due to double shipping and document duplication.

After correcting one operation, check the time interval from the last confirmed success to the resolution of the cause. Verify not only the number of payments but also their IDs and amounts. The same number of operations can hide both a missing and an extra transaction simultaneously. The buyer can be informed of the result after verifying their specific payment; restoring other discrepancies will continue regardless of whether they open the order page.

Discussion 0

Share your experience and ask questions. Comments without links appear after editorial review.

No comments yet. Start the discussion.