- Directives d'intégration
- Fonctionnalités prises en charge (Modes de paiement)
- Paiements mobiles
- Paiements par Apple Pay
Apple Pay
Apple Pay est un service de paiement mobile et de portefeuille numérique fourni par Apple Inc. qui permet aux payeurs d'effectuer des paiements à l'aide d'appareils iOS et macOS pris en charge. Apple Pay est un paiement mobile pris en charge sur American Express Payment Gateway.
Cette page explique les détails de l'intégration spécifique à Apple Pay. Nous vous recommandons de lire les instructions d'intégration pour les paiements mobiles avant de créer une intégration Apple Pay.
Conditions préalables
Pour accepter les paiements par Apple Pay :
- Vous devez vous inscrire auprès d'Apple et créer votre ID de commerçant.
- Votre your payment service provider doit activer les paiements mobiles pour votre profil de commerçant sur la passerelle.
- Si vous voulez que la passerelle gère le décryptage du jeton de paiement, l'autorisation « Activer le décryptage des paiements mobiles sur Apple Pay » doit être activée pour votre profil de commerçant sur la passerelle.
Ajout de la prise en charge d'Apple Pay à votre intégration
Vous pouvez intégrer Apple Pay à votre application mobile ou la page de paiement de votre site Web à l'aide de Web-Services API.
- Procurez-vous un certificat signé auprès d'Apple et chargez-le sur la passerelle via Merchant Administration.
Si vous voulez décrypter le jeton de paiement sur votre serveur, voir Décrypter le jeton de paiement.
- Sur la confirmation du paiement, renseignez les champs suivants dans la requête Authorize/Pay (Autoriser/Payer) ou Update Session (Mettre à jour la session).
order.walletProvider
=APPLE_PAY
order.amount
: la valeur indiquée doit correspondre au montant final de la commande (notamment les montants d'expédition et autres).order.currency
sourceOfFunds.provided.card.devicePayment.paymentToken
: jeton de paiement crypté obtenu à partir du SDK Apple Pay. Par exemple, la valeur dePKPaymentToken.paymentData
sourceOfFunds.provided.card.devicePayment.paymentToken [REST][NVP]
- La passerelle décrypte le jeton de paiement pour vous et traite la transaction avec les données décryptées.
Outre les champs standard, les champs de réponse suivants sont retournés pour une autorisation réussie à l'aide du jeton de paiement.
sourceOfFunds.provided.card.encryption
=DEVICE
sourceOfFunds.provided.card.deviceSpecificNumber
: DPAN en format masqué.sourceOfFunds.provided.card.deviceSpecificExpiry.month
sourceOfFunds.provided.card.deviceSpecificExpiry.year
sourceOfFunds.provided.card.number
: FPAN en format masqué.sourceOfFunds.provided.card.expiry.month
: mois d'expiration de la carte.sourceOfFunds.provided.card.expiry.year
: année d'expiration de la carte.sourceOfFunds.provided.card.devicePayment.cryptogramFormat
L'exemple ci-dessous présente une demande Authorization (Autorisation) dans REST, où le jeton de paiement est décrypté par la passerelle.
{ "apiOperation": "AUTHORIZE", "order": { "currency": "USD", "amount": "61.00", "walletProvider": "APPLE_PAY" }, "sourceOfFunds": { "type": "CARD", "provided":{ "card":{ "devicePayment":{ "paymentToken":"{\r\n\t\"version\": \"EC_v1\",\r\n\t\"data\":\"WO\/fTbdARsB1Rg3tS4ISwNG4cWDRk3JZDSbP32iDdeMP7UFouS...\", \r\n\t\"signature\": \"MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkg...\", \r\n\t\"header\": {\r\n\t\t\"transactionId\": \"c162557e7ae1c69a47583bc2364d1a3e531428d13fb664032f9e09fa37381fc1\", \r\n\t\t\"ephemeralPublicKey\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMeuRqVEOZAQ...\", \r\n\t\t\"publicKeyHash\": \"tBGp1mEoHLiHwfOkazpKVbf3cMKmVS98PGufUJ2Q3ys=\"\r\n\t}\r\n}" //This is only a sample token and will not pass validation. You should substitute this with an actual payment token returned from Apple Pay (PKPaymentToken.paymentData). //The gateway considers this value to be a string, NOT JSON itself. The parenthesis are a part of the string. } } } }, "transaction": { "source": "INTERNET" } }
{ "authorizationResponse": { "commercialCard": "123", "commercialCardIndicator": "1", "date": "0314", "financialNetworkCode": "MCC", "posData": "1025104006600", "posEntryMode": "812", "processingCode": "003000", "responseCode": "00", "stan": "46465", "time": "101534", "transactionIdentifier": "447345902", "transactionIntegrityClass": "A1" }, "device": { "ani": "12341234" }, "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "TESTMERCHANT", "order": { "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "certainty": "FINAL", "chargeback": { "amount": 0, "currency": "USD" }, "creationTime": "2023-03-14T10:15:33.819Z", "currency": "USD", "id": "844205983", "lastUpdatedTime": "2023-03-14T10:15:34.265Z", "merchantAmount": 30.10, "merchantCategoryCode": "1234", "merchantCurrency": "USD", "status": "AUTHORIZED", "totalAuthorizedAmount": 30.10, "totalCapturedAmount": 0.00, "totalDisbursedAmount": 0.00, "totalRefundedAmount": 0.00, "walletProvider": "APPLE_PAY" }, "response": { "acquirerCode": "00", "acquirerMessage": "Approved", "gatewayCode": "APPROVED", "gatewayRecommendation": "PROCEED" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "devicePayment": { "cryptogramFormat": "3DSECURE" }, "deviceSpecificExpiry": { "month": "1", "year": "39" }, "deviceSpecificNumber": "512345xxxxxx0008", "fundingMethod": "UNKNOWN", "number": "xxxxxxxxxxxxxxxx", "scheme": "MASTERCARD", "storedOnFile": "NOT_STORED" } }, "type": "CARD" }, "timeOfLastUpdate": "2023-03-14T10:15:34.265Z", "timeOfRecord": "2023-03-14T10:15:33.930Z", "transaction": { "acquirer": { "batch": 20230314, "date": "0314", "id": "SYSTEST_ACQ_S2I", "merchantId": "12345678", "transactionId": "447345902" }, "amount": 30.10, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "authorizationCode": "112233", "currency": "USD", "id": "950596203", "receipt": "307310046465", "source": "INTERNET", "stan": "46465", "terminal": "1111", "type": "AUTHORIZATION" }, "version": "71" }
Décrypter le jeton de paiement
Vous pouvez choisir de décrypter le jeton de paiement sur votre serveur plutôt que de fournir le jeton de paiement pour décryptage à la passerelle. Dans ce cas, vous devez prendre la responsabilité de stocker les informations de cryptage et d'exécuter le décryptage.
- Lors de la confirmation du paiement, vous soumettez le jeton de paiement crypté retourné par Apple Pay à votre serveur.
- Décryptez le jeton de paiement sur votre serveur en utilisant votre clé privée. Reportez-vous aux étapes de décryptage ici.
- Renseignez les champs de transaction correspondants sur la demande Authorize/Pay (Autoriser/Payer) ou la demande Update Session (Mettre à jour la session) avec les clés des données de paiements du jeton décrypté.
Clé JSON Apple PayChamp de demande d'API correspondantDescriptionapplicationPrimaryAccountNumber sourceOfFunds.provided.card.number Numéro de compte principal spécifique à l'appareil (c.-à-d. jeton ou DPAN) de la carte finançant cette transaction. applicationExpirationDate sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.yearDate d'expiration de la clé applicationPrimaryAccountNumber. cardholderName sourceOfFunds.provided.card.nameOnCard (Facultatif) Nom du titulaire de la carte. currencyCode order.currency Code devise ISO 4217 pour la transaction. transactionAmount order.amount Montant de la commande. paymentDataType sourceOfFunds.provided.card.
devicePayment.cryptogramFormatFormat du cryptogramme. Définissez ce champ avec la valeur 3DSECURE. onlinePaymentCryptogram sourceOfFunds.provided.card.devicePayment.
onlinePaymentCryptogramCryptogramme au format 3DSecure. eciIndicator sourceOfFunds.provided.card.devicePayment.
eciIndicatorSi disponible, indiquez la valeur ECI (Electronic Commerce Indicator). - Outre les champs ci-dessus, incluez les champs suivants dans la demande Authorize/Pay (Autoriser/Payer) ou Update Session (Mettre à jour la session) et soumettez cette dernière à la passerelle.
- transaction.source=INTERNET
- order.walletProvider=APPLE_PAY
- device.mobilePhoneModel : (facultatif) identifiant de l'appareil mobile utilisé pour initier le paiement.
- posTerminal.location : vous pouvez spécifier
PAYER_TERMINAL_OFF_PREMISES
ouPAYER_TERMINAL_ON_PREMISES
. Si vous n'indiquez pas de valeur, la valeurPAYER_TERMINAL_OFF_PREMISES
est utilisée.
L'exemple ci-dessous présente une demande Authorization (Autorisation) dans REST où les valeurs du jeton de paiement décrypté sont fournies à la passerelle.
{ "apiOperation": "AUTHORIZE", "order": { "amount": "30.10", "currency": "USD", "walletProvider": "APPLE_PAY" }, "sourceOfFunds": { "provided": { "card": { "number": "512345000000X008", Replace "X" with "0" "expiry": { "month": "01", "year": "39" }, "devicePayment": { "cryptogramFormat": "3DSECURE", "onlinePaymentCryptogram": "IA/8pdiWftSsxpFT6wABoDABhgA=", "eciIndicator": "20" } } }, "type": "CARD" }, "device": { "ani": "12341234" }, "transaction": { "source": "INTERNET" } }
{ "authorizationResponse": { "commercialCard": "123", "commercialCardIndicator": "1", "date": "0329", "financialNetworkCode": "MCC", "posData": "1025104006600", "posEntryMode": "812", "processingCode": "003000", "responseCode": "00", "stan": "287916", "time": "005723", "transactionIdentifier": "260113124", "transactionIntegrityClass": "A1" }, "device": { "ani": "12341234" }, "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "TEST_MERCHANT", "order": { "amount": 30.1, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "certainty": "ESTIMATED", "chargeback": { "amount": 0, "currency": "USD" }, "creationTime": "2022-03-29T00:57:22.553Z", "currency": "USD", "id": "C999903", "lastUpdatedTime": "2022-03-29T00:57:23.813Z", "merchantAmount": 30.1, "merchantCategoryCode": "1234", "merchantCurrency": "USD", "status": "AUTHORIZED", "totalAuthorizedAmount": 30.1, "totalCapturedAmount": 0, "totalDisbursedAmount": 0, "totalRefundedAmount": 0, "walletProvider": "APPLE_PAY" }, "response": { "acquirerCode": "00", "acquirerMessage": "Approved", "gatewayCode": "APPROVED" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "devicePayment": { "cryptogramFormat": "3DSECURE" }, "deviceSpecificExpiry": { "month": "1", "year": "39" }, "deviceSpecificNumber": "512345xxxxxx0008", "fundingMethod": "UNKNOWN", "number": "xxxxxxxxxxxxxxxx", "scheme": "MASTERCARD", "storedOnFile": "NOT_STORED" } }, "type": "CARD" }, "timeOfLastUpdate": "2022-03-29T00:57:23.813Z", "timeOfRecord": "2022-03-29T00:57:22.675Z", "transaction": { "acquirer": { "batch": 20220329, "date": "0329", "id": "TESTACQUIRER", "merchantId": "123463", "transactionId": "260113124" }, "amount": 30.1, "authenticationStatus": "AUTHENTICATION_NOT_IN_EFFECT", "authorizationCode": "112233", "currency": "USD", "id": "1", "receipt": "208800287916", "source": "INTERNET", "stan": "287916", "terminal": "12333", "type": "AUTHORIZATION" }, "version": "71" }
Test de l'intégration d'Apple Pay
Vous pouvez tester votre intégration avec la passerelle en environnement de production à l'aide de votre profil de commerçant de test et un FPAN pris en charge comme indiqué par Apple pour les tests de la sandbox.
Vous devez configurer votre application de manière à utiliser l'environnement de la sandbox d'Apple Pay avec votre profil de commerçant de test de la passerelle. Lorsque le payeur sélectionne une carte dans Apple Pay, l'application génère un jeton de paiement en mode test.
Si vous décryptez le jeton de paiement, utilisez le DPAN du jeton de paiement décrypté pour exécuter les transactions de test.
Si la passerelle décrypte le jeton de paiement, vous devez vous procurer un certificat signé auprès d'Apple et le charger sur la passerelle via Merchant Administration en environnement de production à l'aide de votre profil de commerçant de test de la passerelle. La passerelle utilise le certificat pour décrypter le jeton de paiement.
Comme la carte Apple pay serait toujours en cours de modification, American Express Payment Gateway ne peut pas se synchroniser avec les modifications apportées chez un commerçant et maintenir le système pour les transactions approuvées. Ainsi, il sera toujours refusé.
Apple Pay via Mobile SDK
Mobile SDK vous aide à développer une application mobile (app) qui acceptera les paiements numériques via American Express Payment Gateway. La passerelle propose un prise en charge d'Apple Pay via Mobile SDK. Cliquez ici pour des directives d'intégration Mobile SDK pour la plateforme iOS.