Skip to main content

Apple Pay

Apple Pay is a secure digital wallet payment service developed by Apple to enable consumers to make card payments using Apple mobile devices, such as phones, tablets, and watches. Apple Pay also supports use of encrypted merchant token (MPANs) payment bundles to support recurring payments that are tied to a specific merchant instead of a device.

The Online Payments API supports submission of payments using both Apple Pay DPAN and MPAN encrypted bundles.

Note

The Online Payments API does not support submission of Multi Token encrypted bundles. Refer to the Wallet Decryption API for details on the processing of multiple merchant payments from a single Apply Pay Multi Token payment bundle.

Availability

List of currencies supported for the Apple Pay Wallet
Payment method Payment type Countries Supported presentment currencies
Apple Pay Wallet CA, EU, UK, US
AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, ISK, JMD, JPY, KES, KHR, KMF, KRW, KYD, KZT, LAK, LBP, LKR, LRD, LSL, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RWF, SAR, SBD, SCR, SEK, SGD, SHP, SLL, SOS, SRD, STN, SZL, THB, TJS, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XCD, XOF, XPF, YER, ZAR, ZMW

How Apple Pay works

Wallets process flow

Before you begin

Before you offer Apple Pay as a payment method for your consumers, setup with Apple Pay is required:

  1. Create an Apple developer account with your merchant information.
  2. Register with Apple and obtain a merchant ID.
  3. Contact your J.P. Morgan Technical Implementation Manager to create your certificate signing request (CSR).
  4. Create a text document using the CSR file provided by J.P. Morgan. Ensure the file has a .cert file extension.
  5. Upload your CSR to Apple to create a payment processing certificate for your merchant ID. Note: Your payment processing certificate is used to encrypt payment information and expires every 25 months.
  6. Accept and comply with Apple’s terms and conditions.

Use Apple Pay for payments

Perform the following steps to initiate Apple Pay for transaction processing after your consumer has selected Apple Pay as their payment method:

  1. Call the Apple API to obtain token payment (encrypted) data.
  2. Submit the token payment data to the J.P. Morgan Online Payments API for transaction processing.

Payment request with Apple Pay encrypted bundle (DPAN/MPAN)

Map the Apple Pay payment token field data from Apple to our Online Payments API required fields. DPAN and MPAN encrypted bundles use the same Online Payments API request fields. 

Field mappings from Apple Pay to Online Payments API
Apple Pay (payment token fields)
Online Payments API required objects/fields
Description
data paymentMethodType.applepay.encryptedPaymentBundle.encryptedPayload Encrypted payment data
ephemeralPublicKey paymentMethodType.applepay.encryptedPaymentBundle.encryptedPaymentHeader.ephemeralPublicKey Ephemeral public key bytes (EC_v1 only)
publicKeyHash paymentMethodType.applepay.encryptedPaymentBundle.encryptedPaymentHeader.publicKeyHash Hash of the X.509-encoded public key bytes of the merchant’s certificate
signature paymentMethodType.applepay.encryptedPaymentBundle.signature Signature of the payment and header data. Note: The signature includes the signing certificate, its intermediate certificate authority (CA) certificate, and information regarding the signing algorithm.
transactionId paymentMethodType.applepay.encryptedPaymentBundle.encryptedPaymentHeader.walletTransactionId Transaction identifier, generated on the device
applicationData paymentMethodType.applepay.encryptedPaymentBundle.encryptedPaymentHeader.walletApplicationData Hash of the applicationData property of the original request submitted by the merchant to wallet provider for transactions that initiate in apps.
version paymentMethodType.applepay.encryptedPaymentBundle.protocolVersion Version information about the payment token.
Note: The token uses EC_v1 for ECC-encrypted data, and RSA_v1 for RSA-encrypted data.

The following example is an Apple Pay DPAN or MPAN encryptedPayload payment request to the Online Payments API:

HTTP method: POST
Endpoint: /payments

Json
{
    "paymentMethodType": {
        "applepay": {
            "latLong": "1,1",
            "encryptedPaymentBundle": {
                "encryptedPayload": "MWRE1bbBoR9a6vXaoLXEkNCKskqNgzPaNlfB00fWOqs+LS8BsJhyvod0koenorWEQCRv41oViq70dvx7ilArOhvlCTRR1RdQyIlksZKuRF0IzyCqdA7bXALnBq/8SQQFBKM+TEmP9UEwD21l5RzKZcZMw3xidKoRjyVZiyauG4Oaea91dycFZ4EAg2st//rEj6fN+do4BAhl+Wqcg7BkiWIe30Jze2jJKrRCJxC5prRQ6Gh8C9rqeoVVCeqxIZf8p/WTKsVr1qWZ28/EviP6+VBwR7OcZyAp4er8jfYf3oQcuN/N8119d2JSwzAmGyXrmw==",
                "encryptedPaymentHeader": {
                    "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExuTcV20bPh6FjIig0rwvPfyAWoYVuu+GL3E9KyFFVBQe0FoXN8gH8r/ae57prtjA0SIFXE8gY8pzsSLgPs8A9w==",
                    "publicKeyHash": "7LPgkHSCBXf/xq4zv59spY9j35fqgkfz7AcUYsASyS4=",
                    "walletTransactionId": "27ed51c15512070be3058fb6070c2e63ddd69ca2e75b3187e2af6faf92ba2901",
                    "walletApplicationData": "27ed51c15512070be3058fb6070c2e63ddd69ca2e75b3187e2af6faf92ba2901"
                },
                "signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDTALBglghkgBZQMEAgEwgAYJKoZIhvcNAQcBAACggDCCAWIwggEIoAMCAQICBgFdZTj7ATAKBggqhkjOPQQDAzA4MSEwHwYDVQQDDBhQYXltZW50ZWNoIE1vYmlsZSBTREsgQ0ExEzARBgNVBAoMClBheW1lbnRlY2gwHhcNMTcwNzIxMTI1NjU5WhcNMzQwNzIxMTI1NjU5WjA4MSEwHwYDVQQDDBhQYXltZW50ZWNoIE1vYmlsZSBTREsgQ0ExEzARBgNVBAoMClBheW1lbnRlY2gwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARCrlzB/UN22ZXpHk7iJqI8T7h0J8QOIyCohcBd8Dh+p0GPeGrDpiyy8LNyQ/bb9jNj+6aVJfeta9eWsOPBp69lMAoGCCqGSM49BAMDA0gAMEUCIQCL3CzFvN8IHbx9DIYtWSWvdwleW2OkbuRimP9LzW9ReAIgTuGzzqlu2EfBpSesfNt78fgAE04OYKHGBq4/Larj540AADGCAUIwggE+AgEBMEIwODEhMB8GA1UEAwwYUGF5bWVudGVjaCBNb2JpbGUgU0RLIENBMRMwEQYDVQQKDApQYXltZW50ZWNoAgYBXWU4+wEwCwYJYIZIAWUDBAIBoIGTMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI0MDMxOTE1MjgwN1owKAYJKoZIhvcNAQk0MRswGTALBglghkgBZQMEAgGhCgYIKoZIzj0EAwIwLwYJKoZIhvcNAQkEMSIEILIY0263HyS7qPTL7X+hEaFAiE4ypmDpvmvO3DCRKqOOMAoGCCqGSM49BAMCBEYwRAIgFPRiS/H7PHJLT8kdfNUGnUL5YFSmj9MlTwmwV+X5t+ECIDBVTShzAoUaN5O3YBdNxXrQkFjhKx7qm5FXYsfZZ5xAAAAAAAAA",
                "protocolVersion": "EC_v1"
            }
        }
    }
}

Response:

Json
{
    "paymentMethodType": {
        "card": {
            "walletProvider": "APPLE_PAY",
            "cardType": "MC",
            "cardTypeName": "MASTERCARD",
            "maskedAccountNumber": "222241XXXXXX2531",
            "cardTypeIndicators": {
                "issuanceCountryCode": "USA",
                "isLevel3Eligible": true,
                "cardTypeCategory": "PREPAID_CARD",
                "isDurbinRegulated": true,
                "cardProductTypes": [
                    "COMMERCIAL",
                    "PAYROLL",
                    "HEALTHCARE",
                    "AFFLUENT_CATEGORY",
                    "SIGNATURE_DEBIT",
                    "PINLESS_DEBIT",
                    "PREPAID_RELOADABLE"
                ]
            },
            "networkResponse": {
                "addressVerificationResult": "ADDRESS_POSTALCODE_MATCH",
                "addressVerificationResultCode": "I3",
                "cardVerificationResult": "MATCH",
                "cardVerificationResultCode": "M",
                "networkTransactionId": "012097692169110",
                "networkResponseCode": "00"
            }
        }
    }
}

Payment parameters

The following fields are required fields within the paymentMethodType.applepay object:

  • latLong
  • encryptedPaymentBundle.encryptedPayload
  • encryptedPaymentBundle.encryptedPaymentHeader.ephemeralPublicKey
  • encryptedPaymentBundle.encryptedPaymentHeader.publicKeyHash
  • encryptedPaymentBundle. encryptedPaymentHeader.walletTransactionId
  • encryptedPaymentBundle. encryptedPaymentHeader.walletApplicationData
  • encryptedPaymentBundle.protocolVersion
  • encryptedPaymentBundle.signature

Authorize and capture a payment
Wallet Decryption API