Apple Pay
Apple Pay umożliwia dokonywanie płatności za pomocą kart płatniczych zapisanych w Apple Pay oraz w aplikacji Portfel (Apple Wallet). Gdy użytkownik zdecyduje się na płatność za pośrednictwem tego kanału i jest zalogowany na swoim urządzeniu na konto Apple, wyświetlona zostaje mu preferowana karta płatnicza. Istnieje również możliwość wyboru innej zapisanej karty oraz potwierdzenie transakcji za pomocą biometrii (Face ID, Touch ID) lub kodu dostępu, w zależności od urządzenia i ustawień bezpieczeństwa. Jeśli użytkownik nie jest zalogowany, pojawi się formularz logowania do konta Apple. Podczas przetwarzania płatności generowany jest przez Apple jednorazowy token płatniczy, który zastępuje dane karty podczas transakcji, co zwiększa bezpieczeństwo płatności.
Płatność za pomocą Apple Pay jest możliwa wyłącznie na urządzeniach Apple, takich jak iPhone, iPad, MacBook czy iMac. Nie jest możliwe dokonanie płatności na urządzeniach z systemami operacyjnymi innymi niż iOS, na przykład Windows czy Android.
Zanim zaczniesz
Upewnij się, że:
- Posiadasz dane autoryzacyjne do API.
- Obsługujesz notyfikacje transakcji.
- Posiadasz włączone płatności kartowe.
- Posiadasz włączony kanał płatności Apple Pay.
Transakcja Apple Pay
Realizuj płatności Apple Pay wykorzystując endpoint zakładania transakcji podając channelId: 75
.
Wyślij zapytanie o utworzenie transakcji Apple Pay
Aby utworzyć transakcję Apple Pay, wyślij żądanie POST
na endpoint:
https://api.tpay.com/transactions
Sprawdź szczegóły w dokumentacji API Reference: POST /transactions
W zapytaniu określ następujące parametry:
amount | Kwota transakcji (w złotówkach). |
description | Opis transakcji widoczny dla płatnika. |
payer.email | Adres e-mail płatnika. |
payer.name | Imię i nazwisko płatnika. |
pay.channelId | Identyfikator kanału płatności dla Apple Pay: 75. |
Podstawowe body żądania powinno wyglądać następująco:
{ "amount": 0.1, "description": "Testowa płatność Apple Pay", "payer": { "email": "[email protected]", "name": "Jan Nowak" }, "pay": { "channelId": 75 } }
Przykład:
curl --location 'https://api.tpay.com/transactions' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "amount": 0.1, "description": "Testowa płatność Apple Pay", "payer": { "email": "[email protected]", "name": "Jan Nowak" }, "pay": { "channelId": 75 } }'
Po wysłaniu żądania otrzymasz w odpowiedzi schemat TransactionCreated
.
Najważniejsze parametry odpowiedzi:
result | success - Transakcja została utworzona pomyślnie. |
status | pending - Transakcja oczekuje opłacenia. |
transactionPaymentUrl | Adres URL, na który należy przekierować płatnika. |
Przykład odpowiedzi:
{ "result": "success", "requestId": "786dee7ec39502226238", "transactionId": "01K5BK4HEPB0WBCGT51FMTYSYJ", "title": "TR-CWM-D14339X", "posId": "ps_e4dkPVDEm4Jg726q", "status": "pending", "date": { "creation": "2024-07-04 21:15:23", "realization": null }, "amount": 0.1, "currency": "PLN", "description": "Testowa płatność Apple Pay", "hiddenDescription": "", "payer": { "payerId": "py_a9rjlZWxRLdG1bqY", "email": "[email protected]", "name": "Jan Nowak", "phone": "", "address": "", "city": "", "country": "PL", "postalCode": "" }, "payments": { "status": "pending", "method": "pay_by_link", "amountPaid": 0, "date": { "realization": null } }, "transactionPaymentUrl": "https://secure.tpay.com/?title=TR-CWM-D14339X&uid=01J1ZJREPKDXXJ5E4JRWYVXMN2" }
Przekieruj płatnika na Panel Transakcyjny
Przekieruj płatnika na URL zawarty w odpowiedzi w polu transactionPaymentUrl
.
Pod wskazanym URL płatnik zobaczy arkusz płatności z listą dostępnych kart płatniczych zapisanych na jego koncie Apple albo formularz logowania do konta Apple.
Płatnik wybiera kartę i finalizuje transakcję.
Płatnik zostanie przekierowany na stronę sukcesu lub porażki
Gdy płatność zostanie zakończona, płatnik zostanie przekierowany na stronę sukcesu (success page) lub stronę porażki (error page) w zależności od tego, czy transakcja się udała.
Obsłuż powiadomienie
Poinformujemy Ciebie o statusie transakcji za pośrednictwem notyfikacji po zaksięgowaniu transakcji.
Apple Pay on-site
Apple Pay on-site jest to integracja płatności Apple Pay bezpośrednio w Twojej witrynie/aplikacji mobilnej.
Polega ona na umieszczeniu mechanizmu do płatności Apple Pay w sposób umożliwiający klientom płatność bezpośrednio z poziomu Twojego systemu/aplikacji mobilnej.
Zarejestruj domenę w Apple Pay
Do konfiguracji Apple Pay on-site potrzebujesz konta developerskiego Apple link
Zarejestruj domenę w Apple Developer, w tym celu należy wgrać na swój serwer plik z konta Apple Pay, który będzie dostępny dla przeglądarek z poziomu domeny. Plik ten służy do weryfikacji domeny podczas jej rejestracji. Apple, w celu weryfikacji domeny, odpytuje zarejestrowaną domenę, jak na przykładzie poniżej.
https://{DOMAIN_NAME}/.well-known/apple-developer-merchantid-domain-association
https://secure.tpay.com/.well-known/apple-developer-merchantid-domain-association
Kolejnym krokiem w implementacji jest konfiguracja wcześniej wspomnianej domeny. W tym celu należy zalogować się do Panelu Akceptanta i wejść w zakładkę Integracji, a następnie wybrać z listy Apple Pay.
Następnie należy kliknąć przycisk edycji oraz ikonę plusa znajdującą się po lewej stronie Domains. Należy wprowadzić adres URL domeny, na której ma się znaleźć przycisk i zapisać ustawienia. Merchant może dodać więcej niż jedną domenę. W celu zdefiniowania, kolejnych należy ponownie użyć ikony plusa.
W przypadku, gdy dodawana domena nie istnieje na liście domen dodanych podczas rejestracji konta akceptanta prosimy o ich uprzednią rejestrację w zakładce Twoje konto > Twoje dane > Punkt Sprzedaż.
Dodaj przycisk płatność Apple Pay
W celu wygenerowania przycisku zaleca się wykorzystanie strony demo Apple. Można znaleźć ją tutaj.
Zaimplementuj bibliotekę Apple Pay
Po wygenerowaniu kodu należy umieścić go w kodzie źródłowym strony w miejscu, gdzie ma być dokonywana płatność. W tym samym miejscu należy również zaimplementować skrypt wykorzystywany do obsługi przycisku.
Sprawdź urządzenie
Przy uruchomieniu kodu należy sprawdzić, czy urządzenie wspiera płatności Apple Pay. W tym celu sprawdza się, czy istnieje obiekt ApplePaySession
w przeglądarce oraz, czy użytkownik ma podpiętą aktywną kartę Apple Pay.
Skonfiguruj płatność
Po pomyślnej weryfikacji należy utworzyć nową sesję, w której zdefiniowane zostaną wszystkie dane dotyczące płatności. Opcjonalnie można przekazać requiredShippingContactFields
oraz requiredBillingContactFields
, gdzie wskazane parametry umożliwiają otrzymanie od płatnika danych dostawy oraz kontakt. Więcej informacji o danych płatności znajdziesz tutaj.
// Apple Pay script version const applePayVersion = 1; // Payment data const paymentRequest = { currencyCode: 985, countryCode: "POL", total: { label: "Payment description", amount: 10, type: "final", }, supportedNetworks: ["visa", "masterCard", "electron", "maestro", "vPay"], merchantCapabilities: ["supports3DS"], //optional parameters requiredShippingContactFields: ["postalAddress", "name", "phone", "email"], requiredBillingContactFields: ["postalAddress"], };
Po utworzeniu sesji należy obsłużyć event sprawdzający domenę akceptanta. W tym celu należy wysłać żądanie do własnego środowiska back-end, które odpyta API Tpay na endpoint POST
/wallet/applepay/init
oraz zwróci odpowiedź do aplikacji frontowej.
Sprawdź szczegóły w dokumentacji API Reference: POST /wallet/applepay/init
Pamiętaj, aby zapytanie na endpoint POST
/wallet/applepay/init
w Tpay, odbywało się z poziomu backendu, endpoint ten wymaga autoryzacji, nie udostępniaj danych autoryzacyjnych osobom trzecim.
// Validate merchant domain applePaySession.onvalidatemerchant = async function (event) { await fetch("/wallet/applepay/init", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ // Correct domain name ( same as in Tpay's Apple Pay Settings ) domainName: "", // Name displayed when paying displayName: "", // The URL that is required to obtain an Apple Pay session validationUrl: event.validationURL, }), }).then(async (response) => { if (response.status === 200) { let json; try { json = await response.json(); } catch { alert("Tpay error occurred"); return; } applePaySession.completeMerchantValidation(response.session); } else { alert("Error occurred"); return; } }); };
Wyślij zapytanie o utworzenie transakcji Apple Pay
Aby utworzyć transakcję Apple Pay, wyślij żądanie POST
na endpoint:
https://api.tpay.com/transactions
Sprawdź szczegóły w dokumentacji API Reference: POST /transactions
W zapytaniu określ następujące parametry:
amount | Kwota transakcji (w złotówkach). |
description | Opis transakcji widoczny dla płatnika. |
payer.email | Adres e-mail płatnika. |
payer.name | Imię i nazwisko płatnika. |
payer.ip | Adres IP płatnika (IPv4 lub IPv6). |
pay.channelId | Identyfikator kanału płatności dla Apple Pay: 75. |
Podstawowe body żądania powinno wyglądać następująco:
{ "amount": 0.1, "description": "Testowa płatność Apple Pay", "payer": { "email": "[email protected]", "name": "Jan Nowak", "ip": "127.0.0.1" }, "pay": { "channelId": 75 } }
Przykład:
curl --location 'https://api.tpay.com/transactions' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "amount": 0.1, "description": "Testowa płatność Apple Pay", "payer": { "email": "[email protected]", "name": "Jan Nowak" “ip”: “127.0.0.1” }, "pay": { "channelId": 75 } }'
Po wysłaniu żądania otrzymasz w odpowiedzi schemat TransactionCreated
.
Najważniejsze parametry odpowiedzi:
result | success - Transakcja została utworzona pomyślnie. |
status | pending - Transakcja oczekuje opłacenia. |
transactionId | Unikalny identyfikator transakcji - przechowaj go swoim systemie. |
Przykładowa odpowiedź:
{ "result": "success", "requestId": "b72641d11e4edbaf6110", "transactionId": "01K5BK4HEPB0WBCGT51FMTYSYJ", "title": "TR-CWM-D14908X", "posId": "ps_e4dkPVDEm4Jg726q", "status": "pending", "date": { "creation": "2024-07-04 21:37:04", "realization": null }, "amount": 0.1, "currency": "PLN", "description": "Testowa płatność Apple Pay", "hiddenDescription": "", "payer": { "payerId": "py_a9rjlZWxRLdG1bqY", "email": "[email protected]", "name": "Jan Nowak", "ip": "127.0.0.1", "phone": "", "address": "", "city": "", "country": "PL", "postalCode": "" }, "payments": { "status": "pending", "method": "pay_by_link", "amountPaid": 0, "date": { "realization": null } }, "transactionPaymentUrl": "https://secure.tpay.com/?title=TR-CWM-D14908X&uid=01J1ZM04S5BJ9RFRMAT13NMPFQ" }
Opłać transakcję wykorzystując token płatniczy
W tym evencie należy wysłać żądanie do własnego środowiska backend, które odpyta Tpay API na endpoint POST /transactions
oraz zwróci rezultat do aplikacji frontendowej. W evencie zwracane są również informacje o płatniku (ApplePayPayment | Apple Developer Documentation), które mogą zostać wykorzystane do uzupełniania danych transakcji. Dane dostawy lub/i kontakt są dostępne, jeśli zostały wskazane w paymentRequest
.
Opłać transakcję wykorzystując token płatniczy
W celu opłacenia transakcji Apple Pay on-site wykorzystaj wcześniej przechowany parametr transactionId
, wysyłając żądanie POST
na adres:
https://api.tpay.com/transactions/{transactionId}/pay
Umieść {transactionId}
w adresie url np.:
https://api.tpay.com/transactions/01K5BK4HEPB0WBCGT51FMTYSYJ/pay
Sprawdź szczegóły w dokumentacji API Reference: POST /transactions/{transactionId}/pay
W zapytaniu określ następujące parametry:
channelId | Identyfikator kanału płatności dla Apple Pay: 75. |
applePayPaymentData | Zaszyfrowany token płatności w formacie base64. |
Token płatności znajduje się w obiekcie payment.token.paymentData
. Zaszyfruj jego zawartość algorytmem base64.
Przykład implementacji:
// Payment finalization applePaySession.onpaymentauthorized = async function (event) { if (event.payment || event.payment.token || event.payment.token.paymentData) { applePaySession.completePayment(ApplePaySession.STATUS_FAILURE); return; } //Get billingContact if required in paymentRequest //event.payment.billingContact //Get shippingContact if required in paymenRequest //event.payment.shippingContact await fetch("/transactions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ base64_payment_data: btoa(encodeURIComponent(event.payment.token.paymentData)), }), }).then(async (response) => { let status = ApplePaySession.STATUS_FAILURE; if (response.status === 200) { let json; try { json = await response.json(); } catch { alert("Tpya error occurred"); } if (json.result && json.result === true) { status = ApplePaySession.STATUS_SUCCESS; } } else { alert("Error occurred"); } applePaySession.completePayment(status); }); };
Podstawowe body żądania powinno wyglądać następująco:
Obsłuż powiadomienie
Poinformujemy Ciebie o statusie transakcji za pośrednictwem notyfikacji po zaksięgowaniu transakcji.
Wyświetl wynik transakcji
Po otrzymaniu notyfikacji o statusie transakcji wykorzystaj pole tr_status
i wyświetl wynik transakcji.
Dokumentacja Apple Pay
Po więcej informacji dotyczących implementacji przycisku płatności Apple Pay odsyłamy do oficjalnej dokumentacji znajdującej się tutaj.
Ze względów bezpieczeństwa, wszystkie requesty wysyłane do API Tpay powinny być wysyłane za pośrednictwem własnego środowiska back-end. Wynika to z faktu, iż każde z zapytań wymaga przekazania poświadczeń, które nie powinny być ujawniane płatnikom. W przykładzie zostało to zaimplementowane jedynie w celu ułatwienia w zrozumieniu logiki.
Aby zwiększyć efektywność sprzedaży i wzmocnić wykorzystanie komercyjne tej metody płatności rekomendujemy wykorzystanie możliwości rozszerzonej integracji uwzględniającej takie funkcje jak adres dostawy, opcje dostawy oraz kupony rabatowe. Szczegółowe informacje znajdują się w dokumentacji Apple Pay.