|
Customers with iOS devices or Macs can use Apple Pay to make payments using their stored payment methods. To enable eligible customers to use Apple Pay, merchants should display an Apple Pay button. Upon selection, customers are presented with a payment sheet or a QR code for an easy review of the order and payment details. Apple Pay on the Web can now be used via Payone without the need to have your own Apple developer account, making the integration process simpler and removing additional maintenance and registration with the Apple Pay developer program. |
At the moment Session initiation request is only available in mode live.
Test mode support will be available at a later time. We apologize for the inconvinience.
---end
Apple Pay is currently not supported in all countries, please check with Apple Pay if it is available in your country/region. This specific version is not supported in Mainland China.
All currencies that Apple Pay supports are currently also supported by the PAYONE platform.
Supported Payment methods:
The Apple Pay token serves as a pseudo card PAN, resembling a credit card number, allowing third-party systems to utilize it without needing to adhere to PCI DSS requirements for storing card data. However This information is not available for the Merchant using Apple Pay without own developer account and can be accessed only by Payment Service Provider responsible for the Payment.
Clearingtype / Clearingsubtype
clearingtype | wallettype |
wlt | APL |
The test data that can be used is documented on the developer page of Apple Pay
Apple Pay supports liability shift globally for all the major Schemes, except for Visa.
The liability shift rules for Visa are defined as following:
Liability shift applies only to the Customer-Initiated Transactions (CITs).
It is not available for Merchant-Initiated Transactions (MITs) since the cardholder is not present in-session for biometrics authentication.
However in certain scenarios the liability can stay with a Merchant if it was indicated in the Apple Pay payload by providing a specific ECI value.
Please make sure you only make payment methods available for Apple Pay which are part of your contract with us.
Significantly simplified sequence diagram in order to present the implementation with Payone Server API showing a sample positive scenario of a Authorization request.
Apple Pay implementation is done on the Merchant side and is presented simplified with a focus on a Session retrieval and payment requests being sent.
Compared to a regular credit card payment there is no 3ds flow and no redirect needed.
Opposed to the Apple pay integration with your own Apple Pay Developer Accounts, there is no need to create or have a Developer Account with Apple, but there are other requirements which should be followed.
In order to begin processing with Apple Pay you should contact our customer support, however first ensure that you have completed the Domain verification steps described below.
Prior to requesting the Apple Pay without Developer account with our Merchant Services team , prepare your website for registration (will be done by Payone) with Apple pay. Please see the same process should be completed each time you change any URL`s or would like to enable a new Merchant ID (MID) or Portal.
Download domain verification file
Path where this file should be located on each your domain:
/.well-known/apple-developer-merchant-id-domain-association
Follow Apple guidelines for Server Setup. You should specifically allow Apple IP Addresses for Domain Verification and payment processing.
Please ensure that domain has a valid SSL certificate. For future it is crucial to update the certificate not later than 7 days prior to it`s expiration to keep Apple Pay functional. If not done in the mentioned time, contact our merchant service team to onboard you to Apple Pay again.
Once all prerequisites are done, contact our Merchant Services team in order to be on-boarded and receive merchantIdentifier. You will need this identifier in order to begin payment processing with Apple Pay on the Web.
You will be able to see your merchantIdentifier in the PMI for the onboarded Portal once the registration is completed. This can be found at the following path : CONFIGURATION/PAYMENT PORTALS - choose an onboarded Portal and go to Payment type configuration tab.
Similar to other payment buttons, Apple Pay is designed to bypass the typical checkout steps by displaying a comprehensive payment sheet to the customer.
source: Apple
Apple Pay on the Web utilizes JavaScript APIs integrated into Safari on both Mac and mobile devices.
In order to be able to process the transaction with Apple Pay without developer account, you will need to implement a session retrieval process for the onvalidatemerchant event, which would be done against Payone Endpoint using a generic request.
API PARAMETER | REQUIRED | Definition |
add_paydata[action]="init_applepay_session" | YES | Generic action |
add_paydata[display_name]="testStore" | YES | Merchant Display Name |
add_paydata[domain_name]="aTestDomain"' | YES |
Merchant Domain Name |
Please use the following generic request to retrieve a session against Payone Server API
request="genericpayment"
mid="1234"
aid="1235"
portalid="2013224"
key="123456789abcdefghij"
mode="live"
clearingtype="wlt"
wallettype="APL"
currency: "EUR"
add_paydata[action]="init_applepay_session"
add_paydata[display_name]="testStore"
add_paydata[domain_name]="aTestDomain"
"status": "OK",
"workorderid": "PP2AADH3T16XW53W",
"add_paydata[applepay_payment_session]": "BASE64_encoded_STRING"
You will have to decode the session data from BASE64 and use it `as is` to identify yourself with Apple Pay
"For information on displaying the buttons and initiating the payment session, please refer to the Apple documentation: https://developer.apple.com/documentation/apple_pay_on_the_web/displaying_apple_pay_buttons and https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/creating_an_apple_pay_session
Visit https://applepaydemo.apple.com for a comprehensive overview and some demo code.
Ensure that your payment request is configured correctly to align with your merchant account capabilities. For instance, a basic request for a merchant who can process Mastercard, Visa, and girocard in live mode might look like this:
{
"countryCode": "DE",
"currencyCode": "EUR",
"merchantCapabilities": [
"supports3DS" // mandatory
],
"supportedNetworks": [
"visa",
"masterCard",
"girocard"
],
"total": {
"label": "Demo (Card is not charged)",
"type": "final",
"amount": "1.99"
}
}
Starting with iOS 15.4, the Apple Pay APIs will honor the order in which the supportedNetworks array is listed. If both networks of a co-badged card are supported by the merchant and the customer’s default card is co-badged, the pre-selected network will be chosen based on the listed order of the networks. This preference affects only the user’s default card (if it’s co-badged), as merchants cannot change the default card selection. However the customer can choose what network he will use.
For Mastercard co-badged Girocards, you can specify the preferred network order like this:
|
|
Apple Pay in the App is not supported without Developer Account as this a limitation from Apple. You will need to have your own developer account and implement the regular version of the Apple Pay available from Payone.
After the customer completes the payment sheet and authenticates using biometric methods (such as Touch ID or Face ID), you'll receive an Apple Pay object like this:
|
Many contents of this object can be mapped to existing Server API parameters.
Apple Pay Object
|
⇨ |
PAYONE Server API
|
However, the payment component of the object is encrypted and must be sent to the PAYONE API using specific parameters.
Please note that the token generated by Apple has a limited lifespan of 5 minutes. In live mode (mode=live), PAYONE is required to reject expired tokens.
Error | Description | Suggested Activity |
---|---|---|
apple-pay-technical-error |
Your domain is no longer activated. This could have happened due to the loss of registration with Apple. Main reason for it is a failure to update the SSL certificate on time. Contact our Merchant services team to enable yourself again with Apple Pay |
|
validation-error - missing-domain-name |
Provide the domain name in the API Request |
|
validation-error - missing-display-name |
Provide the display name in the API Request |
|
2700 |
Request amount differs from apple pay token amount. |
Make sure to use the same amount as in your Apple Pay payment sheet |
2701 |
Request currency differs from apple pay token amount. |
Make sure to use the same currency as in your Apple Pay payment sheet |
2702 |
Failed to decrypt apple pay token |
Check whether your Payment Processing Certificate is valid and uploaded to our merchant backend |
2703 |
Certificate service declined request because of validation errors. |
|
2704 |
Required parameter in apple pay token is missing or empty |
Check if all required parameters for the Apple Pay token are set |
The API request below describe only Apple Pay on the web without specific Payment requests.
Standard request such as Capture, Debit, Refund should be done as for creditcard with defining a clearingtype="wlt" and wallettype="APL"
POST Genericpayment
request
required
|
Fixed Value: preauthorization
|
mid
required
|
your merchant ID, 5-digit numeric
|
aid
required
|
your subaccount ID, 5-digit numeric
|
portalId
required
|
your Portal ID, 7-digit numeric
|
key
required
|
your key value, alpha-numeric
|
mode required
|
Format CHAR(2..50)
Payment mode - can be test or live. Only live mode is supported at the moment. Test mode will be available later this year.
---end
|
clearingtype required
|
Should be set as wlt as for other walllet based payment methods |
wallettype required
|
Should be set as APL for Apple Pay |
Currency
required
|
Format ISO 4217 3-letter codes example: EUR |
add_paydata[action]
required
|
Format STRING
init_applepay_session
|
add_paydata[display_name]
required
|
Format STRING Will be displayed to the Endconsumer in the Apple UI |
add_paydata[domain_name]
required
|
Format STRING
Your domain name that uses Apple Pay
|
status
|
Permitted Values
OK
ERROR
|
txid
|
Format NUMERIC(9..12)
The txid specifies the payment process within the PAYONE platform |
userid
|
Format NUMERIC(9..12)
PAYONE User ID, defined by PAYONE |
errorcode
|
Format NUMERIC(1..6)
In case of error the PAYONE Platform returns an error code for your internal usage. |
errormessage
|
Format CHAR(1..1024)
In case of error the PAYONE Platform returns an error message for your internal usage. |
customermessage
|
Format CHAR(1..1024)
The customermessage is returned to your system in order to be displayed to the customer. (Language selection is based on the end customer's language, parameter "language") |
Host: api.pay1.de Content-Type: application/x-www-form-urlencoded
request="genericpayment"
mid="1234"
aid="1235"
portalid="2013224"
key="123456789abcdefghij"
mode="live"
clearingtype="wlt"
wallettype="APL"
currency: "EUR"
add_paydata[action]="init_applepay_session"
add_paydata[display_name]="testStore"
add_paydata[domain_name]="aTestDomain"
RESPONSE
"status": "OK",
"workorderid": "PP2AADH3T16XW53W",
"add_paydata[applepay_payment_session]": "BASE64_encoded_STRING"
POST Request Pre- /Authorization
request
required
|
Fixed Value: preauthorization
|
mid
required
|
your merchant ID, 5-digit numeric
|
aid
required
|
your subaccount ID, 5-digit numeric
|
portalId
required
|
your Portal ID, 7-digit numeric
|
key
required
|
your key value, alpha-numeric
|
firstname
optional
|
Format CHAR(1..50)
First name of customer; optional if company is used, i.e.: you may use "company" or "lastname" or "firstname" plus "lastname" |
lastname
required
|
Format CHAR(2..50)
Last name of customer; optional if company is used, i.e.: you may use "company" or "lastname" or "firstname" plus "lastname" |
company
optional
|
Format CHAR(2..50)
Company name, required for B2B transactions (if add_paydata[b2b] = “yes”) |
street
optional
|
Format CHAR(1..50)
Street number and name (required: at least one character) |
zip
optional
|
Format CHAR(2..50)
Permitted Symbols [0-9][A-Z][a-z][_.-/ ]
Postcode |
city
optional
|
Format CHAR(2..50)
City of customer |
country
required
|
Format LIST
Permitted values ISO 3166 2-letter-codes
Samples
DE GB US Specifies country of address for the customer. Some countries require additional information in parameter "state"
|
email
optional
|
Format CHAR(5..254)
Permitted Symbols RFC 5322 Special Remark email validation: Max. length for email is 254 characters. Validation is set up in the following way: Username = Max. 63 characters Domain Name = Max. 63 characters "@" and "." is counted as a character as well; in case of a total of three suffixes, this would allow a total of 254 characters. email-address of customer |
birthday
optional
|
Format DATE(8), YYYYMMDD
Samples 20190101 / 19991231 Date of birth of customer |
telephonenumber
optional
|
Telephone number |
add_paydata[paymentdata_token_version]
required
|
Format STRING
Sample EC_v1 |
add_paydata[paymentdata_token_data]
required
|
Sample rhHAQUrR118u[...]cwDw== |
add_paydata[paymentdata_token_signature]
required
|
Format STRING
Sample MIAGCSqGSIb3DQEHAqCAMIACAQE[...] |
add_paydata[paymentdata_token_ephemeral_publickey]
required
|
Sample MFkwEwYHKoZIzj0[...]Y2A== |
add_paydata[paymentdata_token_publickey_hash]
required
|
Format STRING
Sample ilecVF58bpB8qio[...]l6eirw2Y1v1KU |
add_paydata[paymentdata_token_transaction_id]
|
Format STRING
Sample be2e745845b31dfac7778c6e29[...] |
status
|
Permitted Values
APPROVED
ERROR
|
txid
|
Format NUMERIC(9..12)
The txid specifies the payment process within the PAYONE platform |
userid
|
Format NUMERIC(9..12)
PAYONE User ID, defined by PAYONE |
errorcode
|
Format NUMERIC(1..6)
In case of error the PAYONE Platform returns an error code for your internal usage. |
errormessage
|
Format CHAR(1..1024)
In case of error the PAYONE Platform returns an error message for your internal usage. |
customermessage
|
Format CHAR(1..1024)
The customermessage is returned to your system in order to be displayed to the customer. (Language selection is based on the end customer's language, parameter "language") |
Host: api.pay1.de Content-Type: application/x-www-form-urlencoded
Payload
add_paydata[paymentdata_token_data]=FpFyA6zSGkZC[...]xi8xeXCNbpGBpvlNXfcang==
add_paydata[paymentdata_token_ephemeral_publickey]=MFkwEwYHKoZIzj0CA[...]iXv34cYJ4lxZsjVgnsE0i6RX+mg==
add_paydata[paymentdata_token_publickey_hash]=tWOdQ0ARSRiQNsrS4[...]7X6KBxLLAa8=
add_paydata[paymentdata_token_signature]=MIAGCSqGSIb3DQEHAq[...]s9oHcqWMnolhsgAAAAAAAA
add_paydata[paymentdata_token_transaction_id]=12d7[...]d4eebc2e54109386
add_paydata[paymentdata_token_version]=EC_v1
aid=12345
amount=1000
api_version=3.11
cardtype=V
clearingtype=wlt
country=DE
currency=EUR
encoding=UTF-8
firstname=Demo
key=123456789abcdefghij
lastname=Dude
mid=12345
mode=test
portalid=123456
reference=013265464564654
request=preauthorization
wallettype=APL
RESPONSE
status=APPROVED
txid=123456789
userid=987654321