It is possible to use Apple Pay in an iOS app without our SDK. To learn how to integrate Apple Pay we recommend following Apple’s documentation.

The steps below will highlight the basics and focus on the interaction with our API. A full sample app is available in Apple’s developer documentation.

About this integration

Similar to our SDK integration this setup requires you to perform the following steps.

Additionally, you will then need to implement the following.

  • Render your own Apple Pay button.
  • Create a session with the right merchant ID.
  • Catch the Apple Pay token and pass it to our API for processing.

Enable Apple Pay

To enable Apple Pay, head over to your dashboard and then go to Connections -> Catalog -> Apple Pay.

Next, complete and submit the form to create a new Apple Pay service.

Register a certificate

To process Apple Pay in a mobile application you will need to register for an Apple Pay developer account and join the Apple developer program.

Once set up, you can generate a new Apple Pay processing certificate using the Gr4vy dashboard.

Go to Connections -> Apple Pay -> Certificates and click on Add certificate to start the process.

Apple Pay: Add a new certificate

You will be prompted to provide a name and download a Certificate Signing Request (CSR).

Next, visit the Apple developer dashboard to generate a payment processing certificate.

  • Create or select a Merchant ID to associate a payment processing certificate with.
  • In the Apple Pay Payment Processing Certificate section click on Create Certificate.
  • Select Choose File to upload the CSR you downloaded from the dashboard, and then Continue.
  • Verify the certificate details and Download the signed certificate from Apple.

Next, go back to our dashboard and upload the signed certificate.

Add the certificate to your app

In order for your app to accept Apple Pay, you must set the same Apple Merchant ID in your application. In your Xcode project find the Signing & Capabilities in your project editor.

Select the same Merchant ID you used to register your payment certificate. Please ensure your provisioning profiles and signing certificates are updated to contain this ID.

Integrate Apple Pay

Display an Apple Pay button

An Apple Pay button can be displayed in a few different ways. Apple’s guide shows a code sample that checks if Apple Pay is enabled on the device and then adds the button directly to a view with code.

if let applePayButton = button {
    let constraints = [
        applePayButton.centerXAnchor.constraint(equalTo: applePayView.centerXAnchor),
        applePayButton.centerYAnchor.constraint(equalTo: applePayView.centerYAnchor)
    applePayButton.translatesAutoresizingMaskIntoConstraints = false

The sample app doesn’t display the add button if a device can’t accept payments due to hardware limitations, parental controls, or any other reasons.

Set the merchant ID

Once the button is clicked the guide requires you to set up a new payment request. In this step, set the merchantIdentifier to the merchant ID for the Apple Pay certificate you’ve registered in our merchant dashboard.

For example, if you registered a certificate for merchant ID in the dashboard then set this same ID in your application code.

let paymentRequest = PKPaymentRequest()
paymentRequest.paymentSummaryItems = paymentSummaryItems
paymentRequest.merchantIdentifier = ""

Apple’s documentation has an extensive guide on setting up your iOS app to accept Apple Pay.

Create a transaction

Finally, once the Apple Pay transaction has been authorized by Apple, create a transaction with our API.

This API call could be made in your frontend code in Swift or Objective C, or the token could be sent to your backend for processing.

curl -X POST \
  -H "Authorization: bearer [JWT]"
  -d '{
        amount: 1299,
        currency: "AU",
        currency: "AUD",
        payment_method: {
           method: "applepay",
           token: "[TOKEN]"

In this example, the [TOKEN] value is the token from the PKPayment object as returned by Apple Pay in the paymentAuthorizationController(_:didAuthorizePayment:handler:) method.

Common Issues