- Ghid de integrare
- Caracteristici acceptate (Metode de plată)
- Plăți dispozitive
- Plățile Apple Pay
Apple Pay
Apple Pay este un serviciu de plăți mobile și portofel digital creat de Apple Inc., care permite plătitorilor să efectueze plăți cu dispozitivele iOS și macOS acceptate. Apple Pay este o metodă de plată prin dispozitiv acceptată în <<paymentGateway>>.
Această pagină descrie detaliile integrării specifice metodei Apple Pay. Este recomandat să citiți ghidul de integrare pentru plățile prin dispozitiv înainte de a crea o integrare Apple Pay.
Cerințe preliminare
Pentru a accepta plățile Apple Pay:
- Trebuie să vă creați un cont Apple și un ID de comerciant.
- Profilul dvs. de comerciant de pe gateway trebuie să aibă opțiunea Plăți dispozitiv activată de către <<paymentServiceProvider>>.
- Dacă doriți ca gateway-ul să efectueze decriptarea simbolurilor plăților, profilul dvs. de comerciant de pe gateway trebuie să aibă dreptul „Activați decriptarea plăților pe dispozitiv Apple Pay”.
Adăugarea compatibilității cu Apple Pay în integrarea dvs.
Puteți integra Apple Pay în aplicația dvs. mobilă sau pe pagina de validare a site-ului dvs. web folosind <<directPayment>>.
- Obțineți un certificat semnat de la Apple și încărcați-l pe gateway folosind <<merchantUI>>.
Dacă doriți să decriptați simbolurile de plată pe serverul dvs., consultați Decriptarea simbolurilor plăților.
- La confirmarea plății, completați următoarele câmpuri în solicitarea Authorize/Pay sau solicitarea Update Session.
order.walletProvider=APPLE_PAYorder.amount: Valoarea furnizată trebuie să fie valoarea finală a comenzii (inclusiv expedierea și alte sume suplimentare).order.currencysourceOfFunds.provided.card.devicePayment.paymentToken: Simbolul criptat al plății obținut din SDK-ul Apple Pay. De exemplu, valoarea dinPKPaymentToken.paymentData
sourceOfFunds.provided.card.devicePayment.paymentToken [REST][NVP]
- Gateway-ul va decripta simbolul plății pentru dvs. și va procesa tranzacția folosind datele decriptate.
În plus față de câmpurile standard, vor fi returnate următoarele câmpuri de răspuns pentru efectuarea cu succes a autorizării cu ajutorul simbolului plății.
sourceOfFunds.provided.card.encryption=DEVICEsourceOfFunds.provided.card.deviceSpecificNumber: DPAN în format ascuns.sourceOfFunds.provided.card.deviceSpecificExpiry.monthsourceOfFunds.provided.card.deviceSpecificExpiry.yearsourceOfFunds.provided.card.number: FPAN în format ascuns.sourceOfFunds.provided.card.expiry.month: Luna de expirare a cardului.sourceOfFunds.provided.card.expiry.year: Anul de expirare a cardului.sourceOfFunds.provided.card.devicePayment.cryptogramFormat
Iată un exemplu de solicitare de autorizare în REST, în care simbolul plății este decriptat de către gateway.
{
"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"
}
Decriptarea simbolului plății
Puteți alege să decriptați simbolul plății pe serverul dvs. în loc să furnizați gateway-ului simbolul plății pentru decriptare. În acest caz, va fi necesar să vă asumați responsabilitatea stocării acreditărilor de criptare și a executării decriptării.
- La confirmarea plății, trimiteți simbolul criptat al plății returnat de Apple Pay către serverul dvs.
- Decriptați simbolul plății pe serverul dvs. folosindu-vă cheia privată. Consultați etapele de decriptare aici.
- Introduceți cheile datelor plății din simbolul decriptat în câmpurile corespunzătoare ale tranzacției din solicitarea Authorize/Pay sau solicitarea Update Session.
Cheie JSON Apple PayCâmp corespunzător solicitare APIDescriereapplicationPrimaryAccountNumber sourceOfFunds.provided.card.number Numărul de cont principal specific dispozitivului (respectiv, simbolul sau DPAN) pentru cardul care finanțează tranzacția. applicationExpirationDate sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.yearData expirării pentru applicationPrimaryAccountNumber. cardholderName sourceOfFunds.provided.card.nameOnCard (Opțional) Numele posesorului cardului. currencyCode order.currency Codul ISO 4217 al monedei utilizate pentru tranzacție. transactionAmount order.amount Valoarea comenzii. paymentDataType sourceOfFunds.provided.card.
devicePayment.cryptogramFormatFormatul criptogramei. Setați acest câmp la 3DSECURE. onlinePaymentCryptogram sourceOfFunds.provided.card.devicePayment.
onlinePaymentCryptogramCriptogramă în format 3-D Secure. eciIndicator sourceOfFunds.provided.card.devicePayment.
eciIndicatorFurnizați indicatorul de comerț electronic (ECI), dacă este disponibil. - În plus față de câmpurile de mai sus, includeți următoarele în solicitarea Authorize/Pay sau solicitarea Update Session și trimiteți-o către gateway.
- transaction.source=INTERNET
- order.walletProvider=APPLE_PAY
- device.mobilePhoneModel: (opțional) Identificatorul dispozitivului mobil utilizat pentru inițierea plății.
- posTerminal.location: Puteți specifica
PAYER_TERMINAL_OFF_PREMISESsauPAYER_TERMINAL_ON_PREMISES. Dacă nu furnizați o valoare, se va utiliza valoareaPAYER_TERMINAL_OFF_PREMISES.
Iată un exemplu de solicitare Authorization din REST în care valorile din simbolul decriptat al plății sunt trimise către gateway.
{
"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"
}
Testarea integrării Apple Pay
Puteți testa integrarea pe gateway în modul de lucru, folosindu-vă profilul de testare comerciant și un FPAN acceptat, furnizat de Apple pentru testarea în sandbox.
Trebuie să vă configurați aplicația pentru mediul sandbox Apple Pay, folosindu-vă profilul de testare comerciant de pe gateway. Atunci când plătitorul selectează un card în Apple Pay, aplicația generează un simbol de plată în modul de testare.
Dacă decriptați chiar dvs. simbolurile de plată, utilizați codul DPAN din simbolul decriptat pentru a efectua tranzacțiile de testare.
Dacă gateway-ul decriptează simbolul de plată, trebuie să obțineți un certificat semnat de la Apple și să îl încărcați pe gateway folosind <<merchantUI>> în modul de lucru, folosindu-vă profilul de testare comerciant de pe gateway. Gateway-ul utilizează certificatul pentru decriptarea simbolului plății.
Deoarece cardul Apple Pay este mereu în schimbare, <<paymentGateway>> nu se poate sincroniza cu modificările făcute la un comerciant și nu poate menține sistemul pentru tranzacțiile aprobate. Astfel, va fi mereu respins.
Apple Pay prin <<mobileSDK>>
<<mobileSDK>> facilitează dezvoltarea aplicațiilor mobile care acceptă plățile digitale prin <<paymentGateway>>. Gateway-ul acceptă Apple Pay prin <<mobileSDK>>. Faceți clic aici pentru ghidul de integrare <<mobileSDK>> aplicabil platformei iOS.