Apple Pay enables secure, simple checkouts in your app or on your website

User Action: the buyer taps the Apple Pay button in the app or on the website, selects the payment card and uses the Touch-ID to complete the transaction.

  • The Merchant App communicates with the merchant server and creates a transaction ID.
  • The Merchant App obtains the encrypted transaction payload (The tokenized card data "DPAN", Cryptogram, and transaction details) from Apple's Pass Kit Framework.
  • The Merchant App sends the encrypted transaction payload to processor API using the Apple Pay SDK.
  • Processor API decrypts the encrypted transaction payload and processes the transaction.
  • Processor API responds back to the Merchant App (through the SDK) with either an approval or decline
    To get more information on participating banks and countries for Apple Pay, click here.

Integration

📘

You need to create a "Merchant ID" and share the "Merchant Identifier" with the boarding team to get the CSR file.

1. Generate Payment Processing Certificate from Apple Portal

Steps to create a Payment processing certificate in the Apple portal:

  • Login to Apple 'Account' in developer.apple.com
  • In-order to generate certificate you must have a paid apple developer account or an organization account. New users must follow the prompts to set up a developer account.
  • Select Certificates, Identifiers and Profile :

Select Identifiers

Enter a unique Merchant ID (Name field) and share the Identifier with your boarding team to get the CSR file.

Upload the CSR file in .pem format which you got from the boarding team under "Apple Pay Payment Processing Certificate".

  • Once successfully uploaded, Apple provides the payment processing certificate.
  • Send the Certificate (.cer file) back to the Boarding Team.

2. Upload and register the apple development certificate for your machine

  • Request a new certificate from your keychain access.

  • Follow the prompt and request the certificate to be saved on file.
  • In the 'Certificate' section in the apple portal, click on the '+' and follow the prompt to request apple developer certificate for 'IOS' development.
  • Upload the requested certificate.
  • Download and install the apple pay developer certificate.
  • Your machine is now setup for programming IOS app using Xcode.

3. Set-up Provision Profile for the application

  • In the 'Certificate, Identifier and Profile' section in the apple portal navigate to profile.
  • Click the '+' sign to create a new profile.
  • Choose, 'IOS' development and follow the prompts
  • In the capabilities select 'Apple Pay' and 'In-App Purchases'
  • You can also register the test devices here using, uuid. (Xcode also does this when the app is built on the phone)
  • Download the provision profile on to your mac.

4. Set-up Project in Xcode

  • Select new xcode project with a single view or import an existing project.
  • Register the app using the app-id in the apple portal under Identifier->appId
  • Go to Xcode->Preferences,->accounts and install the downloaded provision profile, your profile is now linked to your Xcode.
  • Click on your project, go to Signing & Capabilities select 'Automatically manage signing'.
  • '+ capabilities' add apple pay.
  • Under 'Apple Pay' click '+' and add the merchant id's registered in the portal, which in turn will be added to the entitlements file.

Now the Xcode is set-up for coding.

In the SDK enter the URL, api key and api secret and build the app:

  • Merchant ID: Enter any valid merchant ID registered in the apple portal. This gives the capability for a single user to use multiple merchant id's
  • Amount: Enter the amount of the transaction
  • Transaction type: Select PreAuth or Sale.
  • Apple Pay Button: Click this to produce payment sheet and fingerprint authentication for the transaction.

5. Usage

Once the user authenticates the transaction then Apple returns the payment token. As a result the SDK generates the payload that needs to be included the payment request towards the Gateway.

Gateway Payload

Encrypted Format

In order to start an encrypted Apple Pay transaction via the Gateway you need to send a primary transaction with requestType "WalletSaleTransaction" including the walletPaymentMethod object "encryptedApplePay".

Click for example request / response

Endpoint: .../payments-gateway/v2/payments

{

   "walletPaymentMethod":{
      "walletType":"EncryptedApplePayWalletPaymentMethod",
      "encryptedApplePay":{
      "data":"hbreWcQg980mUoUCfuCoripnHO210lvtizOFLV6PTw1DjooSwik778bH/qgK2pKelDTiiC8eXeiSwSIfrTPp6tq9x8Xo2H0KYAHCjLaJtoDdnjXm8QtC3m8MlcKAyYKp4hOW6tcPmy5rKVCKr1RFCDwjWd9zfVmp/au8hzZQtTYvnlje9t36xNy057eKmA1Bl1r9MFPxicTudVesSYMoAPS4IS+IlYiZzCPHzSLYLvFNiLFzP77qq7B6HSZ3dAZm244v8ep9EQdZVb1xzYdr6U+F5n1W+prS/fnL4+PVdiJK1Gn2qhiveyQX1XopLEQSbMDaW0wYhfDP9XM/+EDMLaXIKRiCtFry9nkbQZDjr2ti91KOAvzQf7XFbV+O8i60BSlI4/QRmLdKHmk/m0rDgQAoYLgUZ5xjKzXpJR9iW6RWuNYyaf9XdD8s2eB9aBQ=",

         "header":{
            "applicationDataHash":"94ee059335e587e501cc4bf90613e0814f00a7b08bc7c648fd865a2af6a22cc2",
           "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvR+anQg6pElOsCnC3HIeNoEs2XMHQwxuy9plV1MfRRtIiHnQ6MyOS+1FQ7WZR2bVAnHFhPFaM9RYe7/bynvVvg==",
            "publicKeyHash":"KRsyW0NauLpN8OwKr+yeu4jl6APbgW05/TYo5eGW0bQ=",
            "transactionId":"31323334353637"

         },
        "signature":"MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIIB0zCCAXkCAQEwCQYHKoZIzj0EATB2MQswCQYDVQQGEwJVUzELMAkGA1UECAwCTkoxFDASBgNVBAcMC0plcnNleSBDaXR5MRMwEQYDVQQKDApGaXJzdCBEYXRhMRIwEAYDVQQLDAlGaXJzdCBBUEkxGzAZBgNVBAMMEmQxZHZ0bDEwMDAuMWRjLmNvbTAeFw0xNTA3MjMxNjQxMDNaFw0xOTA3MjIxNjQxMDNaMHYxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOSjEUMBIGA1UEBwwLSmVyc2V5IENpdHkxEzARBgNVBAoMCkZpcnN0IERhdGExEjAQBgNVBAsMCUZpcnN0IEFQSTEbMBkGA1UEAwwSZDFkdnRsMTAwMC4xZGMuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErnHhPM18HFbOomJMUiLiPL7nrJuWvfPy0Gg3xsX3m8q0oWhTs1QcQDTT+TR3yh4sDRPqXnsTUwcvbrCOzdUEeTAJBgcqhkjOPQQBA0kAMEYCIQDrC1z2JTx1jZPvllpnkxPEzBGk9BhTCkEB58j/Cv+sXQIhAKGongoz++3tJroo1GxnwvzK/Qmc4P1K2lHoh9biZeNhAAAxggFSMIIBTgIBATB7MHYxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOSjEUMBIGA1UEBwwLSmVyc2V5IENpdHkxEzARBgNVBAoMCkZpcnN0IERhdGExEjAQBgNVBAsMCUZpcnN0IEFQSTEbMBkGA1UEAwwSZDFkdnRsMTAwMC4xZGMuY29tAgEBMA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTkwNjA3MTg0MTIxWjAvBgkqhkiG9w0BCQQxIgQg0PLaZU4YWZqtP9t/ygv9XIS/5ngU6FlGjpvyK6VFXVMwCgYIKoZIzj0EAwIERjBEAiBTNmQEPyc3aMm4Mwa0riD3dNdSc9aAhslj65Us8b3aKwIgNSc/y+CWpsr8qDln0fZK6ZD/LWPMxofQedlPy7Q6gY8AAAAAAAA=",

         "version":"EC_v1",
         "applicationData":"VEVTVA==",
         "merchantId":"merchant.com.fapi.tcoe.applepay"
      }
   },

   "transactionAmount":{
      "total":"12.99",
      "currency":"USD"

   }

}
{

   "clientRequestId":"741666",
   "apiTraceId":"rrt-01b12ed35a0f32f98-c-ea-12855-958124-1",
   "ipgTransactionId":"84290618651",
   "orderId":"R-3f8d4c21-66c9-47d4-bb59-c7f167ace094",
   "transactionType":"SALE",
   "transactionOrigin":"ECOM",
   "paymentMethodDetails":{

      "expiryDate":{

         "month":"**",
         "year":"****"
},
      "bin":"******",
      "last4":"****",
      "brand":"AMEX"
},
   "paymentMethodType":"PAYMENT_CARD",
   "country":"USA",
   "terminalId":"1588390",
   "transactionTime":1579707422,
   "approvedAmount":{

      "total":12.00,
      "currency":"USD",
      "components":{

         "subtotal":12.00
},
      "transactionStatus":"APPROVED",
      "schemeTransactionId":"010022066071191",
      "processor":{

         "referenceNumber":"84290618651 ",
         "authorizationCode":"OK4090",
         "responseCode":"00",
         "network":"AMEX",
         "associationResponseCode":"000",
         "responseMessage":"APPROVAL",
         "avsResponse":{

            "streetMatch":"Y",
            "postalCodeMatch":"Y"

}

},
      "additionalDetails":{

         "walletProvider":"APPLE_PAY"

}

}

}

Decrypted format

In order to start a decrypted Apple Pay transaction you need to send a primary transaction with requestType 'WalletSaleTransaction' including the walletPaymentMethod containing the following objects:

  • walletType with value "DecryptedApplePayWalletPaymentMethod"
  • decryptedApplePay containing accountNumber, expiration and cryptogramparameters
Click for a request example
{
    "requestType": "WalletPreAuthTransaction",
    "transactionAmount": {
        "total": "15.00",
        "currency": "GBP"
    },
    "order": {
        "billing": {
            "name": "Name Lastname",
            "contact": {
                "mobilePhone": "123456789",
                "email": "[email protected]"
            }
        }
    },
    "merchantTransactionId": "97f0ffc860xxx7481da42780",
    "storeId": "1301xxx8733",
    "walletPaymentMethod": {
        "walletType": "DecryptedApplePayWalletPaymentMethod",
        "decryptedApplePay": {
            "accountNumber": "537212XXXXXX9662",
            "expiration": "022026",
            "cryptogram": "MDwCsAM4+xxxzq2AoABFIA="
        }
    }
}


Want a quick overview?