Integration checklist
Run against the test environment before calling a v1 integration finished. The first block applies to every contract; the contract blocks add to it.
Every contract
- Success is decided on a final status, never on the HTTP code.
- An unrecognised status leaves the transaction unresolved rather than failing it.
- A timeout triggers a retry of the identical request, not a new transaction.
- A polling timeout stops polling without marking the transaction failed.
- Signatures are computed over the exact bytes sent or received, with no re-serialization.
- Callback handlers are idempotent and tolerate out-of-order delivery.
- The transaction is re-read after a callback, before goods are released.
- Your own transaction reference is generated once and persisted before the call.
- Request and response identifiers are logged for every call.
Pay-ins — Apple Pay and Google Pay
- Both
Sdk-Partner-TokenandX-Signatureare sent on every write. - The signature is over compact JSON, in transmitted field order,
nulls included, lowercase hex. - One payment taken to
paidand one toorder_failed. - Whenever a response carries
redirect_data, the buyer is sent toredirect_data.urland returns tosuccess_urlorfailure_url, with 3DS passed there when asked. -
GET /sdk-partner/alternative-mobile-pay/mobile-pay/{id}/statusis polled from 5 seconds after the create until the status is final. - A partial and a full refund issued, then the same
merchant_refund_idreplayed. -
refundedis not read as "fully refunded" —refunded_amountis checked.
Pay-ins — card payments
-
datais base64 of the request JSON andsignishash_hmacMD5 over that base64 string. -
api_keyis inside the encodeddata, not sent beside it. - Callback
signis verified before the payload is trusted. -
statusis read as an integer, and1is handled as authorization rather than payment. -
8triggers a redirect to the returned payment form rather than a failure. - A refund left at
15is polled rather than treated as lost. - Card payment credentials are kept separate from the Apple Pay and Google Pay ones.
Payouts
-
OKandPROCESSINGare handled as non-final. - The MD5 hash is built from the exact field list for that endpoint, concatenated with no delimiter.
- A validation failure arriving as HTTP 200 is detected and handled.
- A retry never changes the body under an existing
id. -
checkreconciles a transaction whose callback was lost. - Callback
HASHis verified and repeated deliveries are ignored.