Learn about Paze implementation requirements and suggested best practices for iOS applications.
The Paze component follows Paze's digital wallet guidelines for mobile implementation. This page outlines key requirements for compliance with Paze branding, security, and data handling standards on iOS.
For complete Paze compliance requirements, refer to your Paze merchant agreement and Paze's digital wallet SDK documentation provided during onboarding.
- iOS 14.0+: Set your deployment target to iOS 14.0 or later.
- URL callback scheme: Register the SDK callback scheme in
Info.plist(default:pxpcheckout). Paze checkout returns to your app at{scheme}://paze. See Implementation. - Unique URL scheme: Use a scheme that is unique to your app to prevent another app intercepting checkout callbacks.
- App Transport Security: API calls to PXP and Paze use HTTPS. Don't disable ATS globally unless required for local development, and never for production builds.
- Backend session creation: Create sessions on your backend with HMAC authentication. Never embed
hmacKey,encryptionKey, API tokens, or Paze credentials in your app binary. - Environment matching: Use UAT credentials with
environment: .testand production credentials withenvironment: .live.
- USD only: Paze currently supports USD transactions exclusively. The SDK validates currency at presentment and throws
SDK1213for other currencies. - E-commerce entry type: Set
transactionData.entryTypeto.ecomwhen initialising the SDK. Paze doesn't support other entry types. - US shoppers: When provided, phone numbers must be in US E.164 format without the
+prefix. - Card networks: Visa, Mastercard, and Discover are supported.
- Client ID: Valid Paze client ID in the session at
session.allowedFundingTypes?.wallets?.paze?.clientId. Validated at presentment. Missing values triggerSDK1202. - Profile ID: Optional field on the session response (
allowedFundingTypes.wallets.paze.profileId) for backend or portal configuration. The iOSPazeButtonComponentdoesn't readprofileIdduring create-session or complete flows. - Merchant category code: Required in the session for payment completion on iOS at
session.allowedFundingTypes?.wallets?.paze?.merchantCategoryCode. Missing values causeSDK1202Awhen the SDK builds the complete request.
The component renders official Paze button artwork. Use only the supported PazeButtonStyleConfig values:
| Requirement | Description | Status |
|---|---|---|
| Equal prominence | Paze button presented with equal prominence to other payment methods. | required |
| Approved colours | Only use supported values: .auto, .pazeBlue, .white, .whiteWithOutline, .midnightBlack. | required |
| Approved shapes | Only use supported values: .rounded, .rectangle, .pill. | required |
| Approved labels | Only use supported values: .checkoutWith, .checkout, .pazeCheckout, .donateWith. | required |
| Native button artwork | Don't replace the SDK button with a custom-styled alternative or overlay that alters Paze branding. | required |
| Responsive layout | Button scales appropriately within its container. Use disableMaxHeight only when your layout requires it. | required |
Don't apply custom SwiftUI modifiers that change Paze button colours, logos, or label artwork. Configure appearance through PazeButtonStyleConfig only. See Configuration.
- Never store raw card numbers, cryptograms, or network tokens in app storage (
UserDefaults, Keychain for payment data, files, or logs). - Validate all decrypted token data on your secure server before fulfilling orders.
- Implement proper error handling and logging without exposing sensitive payment data.
- Use HMAC authentication for all backend API calls.
- Register a unique URL callback scheme and avoid sharing schemes across unrelated apps.
- Only collect identity data required for checkout (
emailAddress,phoneNumberon the component). - Comply with applicable privacy regulations (CCPA, state privacy laws, App Store privacy requirements, and so on).
- Handle
securedPayloadand decrypted token data only on your backend when using manual decryption. - Verify transaction results on your backend before order fulfilment.
- Don't log full
securedPayloadvalues or network tokens in production.
Always verify payment results on your backend. App callbacks can be manipulated and should not be the sole basis for order fulfilment.
After a successful payment:
- Retrieve the transaction status from the PXP API using the
systemTransactionId. - Confirm the amount and currency match your order.
- Only then fulfil the order or grant access to digital goods.
See Implementation.
Paze checkout uses ASWebAuthenticationSession and redirects to {scheme}://paze when complete. Ensure:
- The scheme in
Info.plistmatches the SDK'sPXP_CALLBACK_SCHEME(defaultpxpcheckout). - No other app on the device can register the same scheme for a different purpose.
- You don't log or expose callback URLs containing checkout response data in production.
When enabling AVS (performAVS = true):
- Set
billingPreferenceto.allso Paze returns a billing address. - AVS data is included automatically in the transaction request from the decrypted payload when the SDK submits the transaction.
- AVS results should inform — not replace — your broader fraud strategy.
If you handle decryption on your backend (onPreDecryption returns false), add addressVerification to your server-side transaction request using billing data from the decrypt response.
- Pass device and session data through
onPreAuthorisationusingPazePreAuthorisationResult.transactionInitData(...). - Set
kountDisabled: trueonCheckoutConfigwhen callingPxpCheckout.initialize(config:)only if your fraud strategy doesn't require Kount device fingerprinting. - Review Kount screening results before fulfilling high-value orders.
- Use
PazeButtonStyleConfigwith approved colour, shape, and label values. - Present the Paze button with equal prominence to other payment methods.
- Provide optional
emailAddressandphoneNumberwhen you have verified shopper identity. - Implement comprehensive error handling with clear, user-friendly messages.
- Test thoroughly in UAT on physical devices and the Simulator before switching to live credentials.
- Never log or store raw card numbers, cryptograms, or network tokens.
- Fetch session data from your backend at runtime. Don't hardcode credentials.
- Validate decrypted token data and verify transaction results on your backend before order fulfilment.
- Track payment success and failure rates using analytics events.
- Monitor button visibility with
onPresentmentResolved. - Test checkout flows after iOS and SDK updates, including URL scheme handling after app reinstall.