Checkout reliability

A customer reports two charges: separate the order, the authorization, and the capture

Write down the store order and the payment as separate records before you refund or try the payment again. WooCommerce can show an order as pending when no payment has been made, on hold while a gateway separates authorization from capture, or failed when the payment was declined. Stripe's PaymentIntent can be authorized and waiting for capture, succeeded, or canceled, and a retry that reuses an idempotency key returns the original result rather than a second object. A new request without that key can create another payment. Two lines on a statement can also be an authorization and a later capture. This page does not tell you to refund or to retry. The provider's record decides whether money moved twice. Describe the work you need. Prism will confirm scope, responsibilities, fees, and terms before work begins.

For: An owner of a research-use-only peptide store whose customer says an order was charged twice and who needs the order record compared with the payment record.

Updated 2026-09-21

The customer's sentence can describe several different records

"Charged twice" may mean two store orders, two payment attempts on one order, an authorization and a later capture, a captured payment plus a refund that has not appeared, or a bank display that repeats a single payment. Those are not the same event, and they do not call for the same next step.

This page is about more than one attempt. It is not the page for a payment that succeeded and never created an order, and it is not the page for a slow checkout. Start a row only when you have an order number or a payment reference. A customer's memory of clicking twice is a report. It is not yet a second capture.

Read the store status before you read it as money

WooCommerce's order-status documentation says Pending payment means the order was received and no payment has been made. Processing means payment has been received, stock has been reduced, and the order is awaiting fulfillment. On hold can mean the store is waiting for payment confirmation. The same page says you may also see On hold when a gateway separates authorization from capture, and it tells you to read the order notes and that gateway's documentation. Failed means the payment failed or was declined and no payment has been successfully made. If stock was already reduced, WooCommerce returns it when the order moves to Failed. Cancelled can still need a refund. The page says to check the order notes and the gateway documentation rather than assuming the status returned the money. Refunded means an admin fully refunded the order's value in WooCommerce. A manual refund can reach that status without the customer's funds having been returned.

The same documentation says block-based checkout can reuse an existing pending or failed order in the customer session during a retry, instead of always creating another order. A second click is therefore not proof of a second order. It also says a fresh block checkout creates the draft order when the customer places the order, not on every field change. Count orders from the order list. Count payments from the payment provider. Do not use one list as the other.

Read the payment status as its own column

Stripe's PaymentIntent lifecycle says a succeeded status means the payment flow is complete and the funds are in the account. A status of requires_capture, described on Stripe's hold page, means the payment method was authorized and the funds have not yet been captured. Canceling is available before a PaymentIntent succeeds, for the statuses Stripe's refund page lists, and cancellation releases held funds. A succeeded PaymentIntent cannot be canceled. Returning money after success is a refund, which Stripe's refund page distinguishes from canceling an uncaptured payment.

Stripe's idempotency documentation says a key lets a client retry the same request and receive the saved result, so a connection error does not by itself create a second object. Keys can be removed after they are at least 24 hours old, and a reused key after that is a new request. A second checkout that does not send the same key is not that retry. It can be a second PaymentIntent. The documentation also says not to put personal data in the key. You do not need the key's value in this worksheet. You need the payment identifiers and their statuses.

Stripe's hold page says some card statements do not distinguish an authorization from a captured payment. A customer can report two charges when the provider shows one authorization and one capture, or one capture only. Copy the provider status next to the statement line. Remove the card number before you store either one.

Do not refund or retry from the complaint alone

A refund returns money that was captured. Canceling an uncaptured authorization releases a hold. Retrying a failed attempt can create a new payment if it is a new request. Doing any of the three because the customer used the word "twice" can create the duplicate you were trying to avoid, or can return money for a payment that never captured.

You can match the records and decide who on your team will look at the provider account. You cannot decide from the store screen alone that two captures exist, and you cannot decide that a bank will remove a pending authorization on a particular day. The gateway, not WooCommerce's status label, confirms whether an on-hold order has captured funds. Stripe's rules are not another provider's rules.

A Prism consultation can discuss a checkout record in ordinary language: the platform, the order status, and the payment status, without card numbers or customer lists. An inquiry alone does not authorize a refund or submit a processing application. Scope, fees, and terms are discussed before work. What remains unknown is any attempt whose provider status you have not opened.

Two-attempt reconciliation

Use one set of rows for one customer report. Identifiers are enough. Do not enter a card number, a customer list, or a guessed refund. Worksheet entries are not submitted by this worksheet or saved by this site. Use only non-sensitive summaries; do not enter credentials, government identifiers, card or bank-account numbers, private receipt links, or customer details.

Worksheet entries are not submitted by Prism’s worksheet and are not saved by the site. Use record types, availability, anonymized observations, or match/mismatch results. Do not enter government identifiers, customer names or addresses, customer messages, receipt-access links, card or bank details, passwords, or keys. Send sensitive documents only through the provider’s verified secure channel.

Two-attempt reconciliation. The last column is for temporary notes.
RecordWhat it can meanWhere to read itWhat you found
Store order identifier and statusPending is not a capture. Failed is not a capture. On hold may be an authorization or a delayed payment. Refunded in the store may be a manual record only.WooCommerce order screen, or the equivalent screen on another platform. Name the platform if it is not WooCommerce.
Whether a second order existsBlock checkout can reuse one pending or failed order on retry. Two clicks are not two orders until the order list says so.The order list for that customer email or session, not the customer's description alone.
Payment identifier and provider statusStripe uses different statuses for waiting for capture, succeeded, and canceled. A second identifier can be a second payment.The provider payment page. Leave blank if you only have the store order.
Authorization time and capture timeSome statements show both. Stripe says some issuers do not distinguish them. The times tell you whether money moved once or twice.The payment timeline. Do not copy the card number.
An anonymized summary of the reported discrepancyThe report chooses the row. It does not choose the refund.Compare the original message inside the merchant’s authorized support system. Enter only the relevant status discrepancy; exclude customer names, contact details, card data, and message text.
The next person who will open the provider accountThis page stops at the comparison. A refund, a cancellation, or a retry waits until that person has both statuses.Your own assignment. Leave blank if nobody has looked at the provider yet.

These are temporary notes. Leaving or reloading this page may clear them. The consultation form does not include these entries.

Limits

  • A Prism consultation can help you organize the facts and discuss the website or processing question. The payment provider decides eligibility, pricing, reserves, and whether an account is opened or closed.
  • Do not retry a payment or issue a refund from this worksheet.
  • WooCommerce status names and Stripe status names are not interchangeable with another platform or provider.
  • Do not send card numbers, customer lists, or passwords in a consultation message.

Sources checked 2026-09-21

  • WooCommerce order statuses — checked 2026-09-21. Pending payment, Processing, On hold, Failed, Cancelled, and Refunded mean different things. On hold can reflect separated authorization and capture. A manual refund can mark an order refunded without returning funds. Block checkout can reuse a pending or failed order on retry.
  • Stripe PaymentIntent lifecycle — checked 2026-09-21. Succeeded means the payment flow is complete. Separate authorization and capture can move the PaymentIntent to requires_capture. Cancellation before success releases held funds and cannot be undone.
  • Stripe refunds and cancellation — checked 2026-09-21. An uncaptured payment is canceled rather than refunded. A succeeded PaymentIntent cannot be canceled. A refund is the path after success.
  • Stripe idempotent requests — checked 2026-09-21. The same idempotency key returns the saved result of the original request. After the key is pruned, at least 24 hours later, reuse is a new request. A different request is not protected by the old key.
  • Stripe, place a hold on a payment method — checked 2026-09-21. requires_capture means funds are authorized and not yet captured. Some statements do not distinguish an authorization from a captured payment.
  • Prism contact — checked 2026-09-21. The consultation form is for the website, products, and question. It says to leave out payment card details, passwords, and customer records, and it does not submit a processing application.

Request a consultation

Describe the business and this specific question. Prism follows up by email to discuss fit and scope. An inquiry is not a processing application or an approval.