Recover failed 2Checkout (Verifone) payments
2Checkout, now part of Verifone, is a merchant of record used heavily for cross-border software sales. Recovery there is dominated by cross-border declines and expired local cards, so channel choice and language matter more than retry frequency.
The 2Checkout (Verifone) events recovery depends on
- RECURRING_INSTALLMENT_FAILED
- A recurring installment failed — open a recovery case.
- RECURRING_INSTALLMENT_SUCCESS
- The installment was collected. Close the case.
- RECURRING_STOPPED
- The recurring billing was stopped.
Verifying 2Checkout (Verifone) webhooks
- Scheme
- Hash over concatenated notification fields with your secret word
- Signature location
- HASH field inside the IPN payload
2Checkout signs inside the payload rather than a header. Recompute the hash from the documented field order and compare timing-safely before acting.
import { createHash, timingSafeEqual } from "crypto";
// 2Checkout IPN: fields are form-encoded, the signature travels as HASH
const expected = createHash("md5")
.update(buildIpnSigningString(fields, process.env.TWOCHECKOUT_SECRET_WORD!))
.digest("hex")
.toUpperCase();
if (!timingSafeEqual(Buffer.from(expected), Buffer.from(fields.HASH))) {
return new Response("Invalid signature", { status: 401 });
}
if (fields.MESSAGE_TYPE === "RECURRING_INSTALLMENT_FAILED") {
await rrlabs.enqueueRecovery({
provider: "2checkout",
externalId: fields.SALE_ID,
});
}Decline playbook for 2Checkout (Verifone)
| Failure signal | Recovery action |
|---|---|
| Cross-border decline | Offer an alternative local payment method rather than retrying the same card. |
| Expired local card | Send the 2Checkout myAccount update link in the buyer's own language. |
| Repeated installment failure | Escalate the channel before the recurring billing is stopped. |
What happens after a payment fails
T+0s
Payment failed
Provider webhook received and verified
T+2s
AI analysis
Decline reason classified, amount at risk scored
T+5s
Dynamic email
Copy generated for that decline code and customer
Day 2
Smart retry
Retry scheduled only when the decline code is retryable
Day 2
WhatsApp push
Second channel used when the email went unanswered
On success
Recovered
Counted only when the provider confirms the charge
Timings describe the configured workflow, not a guaranteed outcome. Every step is skipped when the decline reason makes it counter-productive.
Frequently asked questions
- Who is the merchant of record with 2Checkout?
- 2Checkout (Verifone) is, which means it handles the charge, tax and refunds. RRLabs only reads notifications and sends recovery messages.
- Why do cross-border declines need different handling?
- Retrying the same card rarely changes an issuer's cross-border decision, so the productive move is offering a different payment method.
Connect 2Checkout (Verifone) with read-only credentials
RRLabs reads failure events and orchestrates recovery. It never holds card data and never becomes the merchant of record.
Get early access