Digital Wallets¶
Integrate fast, one-touch digital wallet payments into your applications. Digital wallets provide frictionless checkout, enhanced security with device-level biometrics, and reduced cart abandonment.
Supported Wallets & Platforms¶
-
Apple Pay
Accept Apple Pay across Safari on iOS/macOS, native iOS apps (Swift/Objective-C), and cross-platform Flutter applications.
-
Google Pay
Integrate Google Pay across Chrome & modern browsers, native Android apps (Kotlin/Java), and cross-platform Flutter applications.
Platform Matrix¶
| Platform | Apple Pay | Google Pay |
|---|---|---|
| Web Browsers | Guide (Safari) | Guide (Chrome, Edge, Firefox, Safari) |
| Native iOS | Guide (PassKit) | - |
| Native Android | - | Guide (Play Services) |
| Cross-Platform Flutter | Guide (pay plugin) |
Guide (pay plugin) |
Duplicate references and retries¶
The following contract applies to SaleWithApplePay and SaleWithGooglePay. Do not assume that another sale endpoint has the same retry behavior.
- Send a non-empty
UserTransactionNumberof at most 50 characters. Its uniqueness scope is the merchant (mid), shared across endpoints, applications using that merchant, and test/live modes. Use distinct references for separate payment attempts, including sandbox tests. - Reusing a previously reserved reference returns
ResponseCode: 5. The API does not replay the original payment response, even when the repeated payload is identical. RC 5 alone does not establish that the first payment succeeded; invalid references can also produce that code. - Once reserved, the reference remains used even if the payment is declined or processing fails. A failure before reservation does not necessarily consume it. The reference is not automatically released for another attempt.
- A timeout or lost response leaves the payment outcome unknown. Keep the original reference and reconcile the original attempt through transaction records, your webhook, or support before deciding whether to create a new payment attempt. Do not automatically switch to a new reference and charge again.
- Prevent concurrent checkout submissions in your application and persist the reference before sending the request. Duplicate-reference rejection is not a response-replay service or an end-to-end exactly-once payment guarantee.
- Correlate the synchronous response and webhook for the same payment; do not credit the order twice. Webhook delivery deduplication is separate from request-reference handling. See Receiving Events.
In these wallet guides, duplicate protection means rejection of a reserved reference, not a promise that retrying the request returns the previous result.