Payment Issues
When to use this runbook
- Refund stuck in pending state
- Payment status mismatch between Logidav and provider
- Payline transaction log gaps
- Double charge or double refund reported
Step 1: Identify the payment provider
Check the sale/order to determine which provider processed the payment:
| Provider | Type | Where to check |
|---|---|---|
| Stripe | Card payments | Stripe Dashboard |
| Hipay | Card payments | Hipay Back Office |
| Payline | Card payments (with transaction logging) | Payline Admin Center |
| Klarna | Buy Now Pay Later | Klarna Merchant Portal |
| Scalapay | Buy Now Pay Later | Scalapay Dashboard |
| Alma | Buy Now Pay Later | Alma Dashboard |
# Check the payment method on the sale
mysql -e "SELECT id, payment_method, status FROM mz_sale WHERE id = <sale_id>;"
Step 2: Check transaction logs
- PaylineTransactionLog for Payline transactions:
mysql -e "SELECT * FROM payline_transaction_log WHERE sale_id = <sale_id> ORDER BY created_at DESC;"
- RefundLog for refund status:
mysql -e "SELECT * FROM refund_log WHERE sale_id = <sale_id> ORDER BY created_at DESC;"
- Provider dashboard for the authoritative transaction details
Step 3: Compare states
Compare Logidav status vs provider status. Look for:
| Mismatch | Description |
|---|---|
| Pending refund completed on provider side | Provider processed the refund but Logidav was not notified |
| Completed payment not reflected in Logidav | Webhook missed or sale import incomplete |
| Double charge | Two capture calls for the same authorization |
| Double refund | Refund command ran twice before status update |
warning
Always verify the provider dashboard as the source of truth for actual money movement.
Step 4: Manual reconciliation
For Payline
- Find the transaction in Payline Admin Center by order reference
- Compare the
PaylineTransactionLogentries with the Payline dashboard - If Logidav is behind, manually update the refund/payment status
For Stripe / Hipay
- Find the payment intent or transaction in the provider dashboard
- Cross-reference with the Logidav sale status
- If a webhook was missed, re-trigger the status update via the relevant command
For BNPL providers (Klarna, Scalapay, Alma)
- Check the merchant portal for the order status
- Verify capture/refund status matches Logidav
- Contact provider support if status cannot be reconciled
Prevention
- Monitor
PaylineTransactionLogfor gaps in transaction recording - Set up alerts for refund failures (see
menzzo:refund:alertandmenzzo:refund:checkcronjobs) - Ensure webhook endpoints are monitored and retried on failure
- Review the Refunds / After-Sales workflow for the full refund lifecycle