Apple Pay
Apple Pay integration
Apple Pay™ is a payment option for the customer. Apple securely stores the customer's card information and hands it over to the merchant for processing.
Introduction
Apple Pay can be emebedded two ways into your payment flow. In the first case, it will be displayed on Barion Smart Gateway, which needs no further development on your side. The second option is to display the Apple Pay button on your site ("integrated mode"), however this needs configuration and development on your side. This page will discuss the latter.
- Barion Smart Gateway Apple Pay demo: https://demomerchant.shop/en/DemoClub/Pay (click the Pay button)
- Apple Pay integrated mode demo: https://demomerchant.shop/en/DemoGame/Pay
Limitations
Technical
Using Apple Pay as a token payment is currently not possible.
Shopper
Apple Pay will only be visible to shoppers fulfilling the following criteria:
- Use an Apple Pay-compatible device
- Use Safari
- Located in a country or region where Apple Pay is available
- Have an existing card added to their Apple Pay wallet
Shop
- Your shop must not sell prohibited items by Apple
- Your site must use https!
Prerequisits
- you must have a Barion wallet
- the beforementioned Barion wallet must have and approved shop
- for every currency you plan to conduct payments in you have to make sure there is an account created in your Barion wallet. This means that if you plan to have USD payments then there should be an USD account created in your wallet.
- all the example codes assume the availability of jQuery
Configuration
Domain verification file
First head over to secure.barion.com, and under Manage My Shops page select the appropriate one, and from the dropdown, click on settings. At the bottom click the Manage Apple Pay settings blue button under the Apple Pay Settings section. On the next page Click on the Download domain verification file button, which will download a domain association file. You should place this file at the content root of all of your sites, you're about to use apple pay in integrated mode. The file must:
- have Content-Type: text/plain in the header.
- be externally accessible.
- not be password protected.
- the file cannot be behind a proxy or redirect.
Configure Domains
On the exact same page you've downloaded the domain association file, enter all the domains (one in each line, without https:// or https://) you're intending to use Apple Pay.
Request Apple Pay to be enabled
Head over to the Customer Center, and request Apple Pay to be enabled for your shop.
Development
Include the Apple Pay SDK
Include the following code snippet in the header of your checkout page:
<script src="https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js"></script>
Display the Apple Pay button
Add the Apple Pay button to your checkout page as discussed here
Create an Apple Pay session
When the user taps the Apple Pay button, provide a payment request and create the session as discussed here
Subscribe to the onvalidatemerchant
event
Call your backend, which will in turn call the Barion Api ValidateSession endpoint in the event handler with the provided url as the payload:
appleSession.onvalidatemerchant = function (event) {
// TODO: disable Apple Pay button
const data = {
SessionValidationUrl: event.validationURL
};
$.ajax({
method: "POST",
url: "https://yourserver.com/ValidateApplePaySession",
data: data,
success: function (response, status, xhr) {
const merchantSession = JSON.parse(response.ApplePaySessionResponse);
appleSession.completeMerchantValidation(merchantSession);
},
error: function (xhr, status, error) {
// failure callback
// TODO: enable Apple Pay button
}
});
};
Subscribe to the onpaymentauthorized
event
Call your backend, which will in turn call the Barion Api StartPaymentWithAppleToken endpoint in the event handler with the provided payment payload:
appleSession.onpaymentauthorized = function (event) {
let cart = {
Payload = event.payment
PaymentType = "Immediate",
Mode = "",
};
$.ajax({
method: "POST",
url: "https://yourserver.com/StartApplePayment",
data: cart,
success: function (response, status, xhr) {
if (response.IsSuccessful && response.PaymentStatus === 40) {
appleSession.completePayment(appleSession.STATUS_SUCCESS);
} else {
appleSession.completePayment(appleSession.STATUS_FAILURE);
}
},
error: function (xhr, status, error) {
appleSession.completePayment(appleSession.STATUS_FAILURE);
}
});
};
Call ApplePaySession.begin
method
Call the begin method, and the merchant validation process begins. So your final client side code will look like this:
var request = {
countryCode: 'HU',
currencyCode: 'HUF',
supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'],
merchantCapabilities: ['supports3DS'],
total: { label: 'Your Merchant Name', amount: '1000.00' },
};
var appleSession = new ApplePaySession(3, request);
appleSession.onvalidatemerchant = function (event) {...}
appleSession.onpaymentauthorized = function (event) {...}
appleSession.begin();