Skip to main content

Online payments

Apple Pay

Last updated: 04-Jun-2024

You can also accept payments through Apple Pay via Checkout (Hosted Payments Page - HPP).

Follow the integration steps below to process transactions via Verifone eComm API.

Initiate a wallet payment using ApplePay

Check also our API documentation.

  1. Enable ApplePay via Verifone's Hosted Checkout or via Direct API, as per the instructions from the Apple Pay | Online payments | Verifone Developer Portal documentation.

       To enable the ApplePay wallet with Mobile SDKs check the  Apple Pay | Online payments | Verifone Developer Portal  information.
  2. Generate a unique merchant_reference.

    The merchant_reference needs to be unique to identify the shopper when they are redirected to your server by Apple Pay. In the next step, you will be creating a transaction through the API, the transaction will return an id that needs to be stored safely with the reference. When the shopper returns, you can use this reference to confirm either through the webhook or through the GET transaction API call if the shopper has successfully completed the transaction.

  3. Required fields.

    Parameters Description
    payment_provider_contract In the Payment Provider Contracts section in Verifone Central, set the Payment Type to Apple Pay for web, select your contract and copy the Payment Provider Contract ID. Note this value is different in Sandbox and in Production.
    amount Amount of the transaction.
    merchant_reference Unique UUID you generate and can link the transaction to when the customer returns.
    currency_code More on the all currencies supported here: Verifone eCommerce API | Verifone Developer Portal.
    wallet_type string Enum: "APPLE_PAY"
    wallet_payload object
    The encrypted payload object provided by the Wallet on the frontend.

Start a payment session for Apple Pay wallet transactions

The Create a merchant payment session API documentation can be found here.

Create a merchant payment session

Parameters Description
validation_url

string

The ULR pointing to the Apple Pay validation location.

domain

string

The domain from which the payment request will be initiated.

payment_provider_contract

string <uuid-flexible>

The identifier of payment provider contract you want to process the transaction request with

Web Integration

An Apple Pay web integration consists of implementing both client side and server side components. You will need to implement the following:

Code sample

const ApplePaymentOptions = {
  countryCode: "US",
  currencyCode: "USD",
  merchantCapabilities: ["supports3DS"],
  supportedNetworks: ["visa", "masterCard", "amex", "discover"],
  total: {
    label: "Demo (Card is not charged)",
    type: "final",
    amount: "1.99",
  },
};
const canMakePayments =
  window.ApplePaySession && window.ApplePaySession.canMakePayments();
let session;
function handleApplePayRequest(formValues) {
  if (canMakePayments) {
    session = new window.ApplePaySession(3, ApplePaymentOptions);
    session.onpaymentauthorized = makeTransaction(formValues);
    session.addEventListener("validatemerchant", validateMerchant);
    session.begin();
    console.log("INFO - BEGIN SESSION...");
  }
}
function validateMerchant(e) {
  // Pass the validation URL and domain to your server to make the wallet transaction API call
  fetch(`YOUR_ENDPOINT`, {
    method: "POST",
    headers: REQUEST_HEADERS,
    body: JSON.stringify({
      validation_url: e.validationURL,
      domain: window.location.hostname
    }),
  })
    .then((res) => res.json())
    .then((sessionObject) => {
      session.completeMerchantValidation(sessionObject);
    })
    .catch((err) => console.log("ERROR - MERCHANT VALIDATION: ", err));
}
function makeTransaction(formValues) {
  return (e) => {
    const applePaymentObject = e.payment;
    const payload = {
      token: applePaymentObject.token.paymentData,
    };
    // Pass the apple pay token to your server to make the wallet transaction API call
    fetch(`YOUR_ENDPOINT`, {
      method: "POST",
      headers: REQUEST_HEADERS,
      body: JSON.stringify(payload),
    })
      .then((res) => res.json())
      .then((res) => {
        // Check the response status and complete the payment session
        if (res.status === 'AUTHORIZED') {
          session.completePayment(0);
        }
      })
      .catch((err) => console.log("ERROR: ", err));
  };
}

Need help?

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

Not yet a Verifone customer?

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

Verifone logo