Skip to content

Payment Status Mapping

Three systems track status independently: WooCommerce (order status), Stripe (payment/invoice status), and MIDDAG Account (entitlement status). This page maps how they relate and what triggers each transition.

Three-system status flow

Complete mapping table

Initial purchase

WC Order StatusStripe Payment StatusEntitlement StatusWhat happened
Pending--(none)Order created, awaiting payment
On Hold--(none)Awaiting manual payment (Boleto generated)
ProcessingIncomplete(none)Payment initiated, not yet confirmed
ProcessingRequires Action(none)3D Secure / SCA verification needed
CompletedSucceededActivePayment confirmed, entitlement created
FailedFailed(none)Payment declined, no entitlement
Cancelled--(none)Order abandoned or timed out, no entitlement

Subscription renewal

WC Subscription EventStripe Invoice StatusEntitlement StatusWhat happened
Renewal paidPaidActiveRenewal successful, expiration extended
Renewal failedPast DueActive (grace)First failure, Stripe will retry
Retries exhaustedUncollectibleSuspendedAll retry attempts failed
Payment recoveredPaidActiveLate payment received, auto-reactivated
Subscription expired--ExpiredBilling period ended without renewal
Subscription cancelled--ExpiredCustomer or admin cancelled, active until period end

Refund and dispute

WC Order StatusStripe Payment StatusEntitlement StatusWhat happened
RefundedRefundedCancelledFull refund processed
RefundedPartially RefundedActivePartial refund, entitlement unchanged
--DisputedSuspendedChargeback filed, entitlement suspended
--Dispute wonActiveChargeback reversed, entitlement restored
RefundedDispute lostCancelledChargeback upheld, entitlement cancelled

Transition triggers

Each entitlement status transition is triggered by a specific event:

FromToTriggerPolicy consulted
(none)Activewoocommerce_order_status_completedProvisioning Policy
ActiveSuspendedPayment retry exhausted / chargeback filedPayment Recovery Policy
SuspendedActivePayment recovered / dispute wonPayment Recovery Policy
SuspendedCancelledsuspended_to_cancelled_days elapsed (default: 30)Payment Recovery Policy
ActiveExpiredEntitlement end_date reached without renewalRenewal Policy
ExpiredActiveRenewal payment confirmedRenewal Policy
ExpiredCancelledexpired_to_cancelled_days elapsed (default: 30)Cancellation Policy
ActiveCancelledFull refund / admin cancellationRefund Policy
CancelledActiveWin-back: new subscription reactivates same entitlement--

Edge cases

Partial payment

WooCommerce does not natively support partial payments. If a custom flow allows partial payment (e.g., deposit), the order stays in Processing until the full amount is received. No entitlement is created until the order reaches Completed.

Boleto (awaiting clearance)

Boleto payments via Banco Inter take 1-2 business days to clear. During this time:

  • WC order status: On Hold
  • Stripe status: N/A (Banco Inter, not Stripe)
  • Entitlement: Not yet created

When the Banco Inter webhook confirms payment, the order moves to Completed and the entitlement is created.

Pix (30-minute timeout)

Pix payments have a 30-minute window. If the customer does not pay within this window:

  • The QR code expires
  • The customer can generate a new QR code from the portal (as long as the quote has not expired)
  • The order remains in Pending until payment or timeout

Stripe 3D Secure (SCA)

When Stripe requires 3D Secure verification:

  • WC order status: Processing (or Pending, depending on gateway config)
  • Stripe status: Requires Action
  • Entitlement: Not yet created

If the customer abandons the 3D Secure flow, the payment fails and no entitlement is created.

Payment method update during suspension

When an entitlement is suspended due to failed payment, the customer can update their payment method through the portal. On the next Stripe retry (or immediate charge), if successful:

  • Stripe status: Succeeded
  • WC subscription: Active
  • Entitlement: Returns to Active automatically

Monitoring

Admins can monitor the health of the three-system pipeline through:

  • MIDDAG Account > Dashboard -- Entitlements by status (active, suspended, expired, cancelled)
  • WooCommerce > Orders -- Orders by status
  • MIDDAG Account > Logs -- Provisioning events, webhook processing, sync errors
  • Reconciliation cron -- Runs every 15 minutes to detect Stripe/local divergences