Když nedávno přišel Apple Pay do ČR, jako správní geekové jsme si chtěli tuhle službu vyzkoušet. Někteří z nás mají to štěstí, že mají kreditky u bank, které Apple Pay podporují od prvního dne. Vložili jsme kreditky a vyrazili na oběd. Ještě ten stejný den padla výzva, že implementujeme Apple Pay do naší mobilní aplikace a chceme být první eshop, který tuto platební metodu v mobilní aplikaci spustí, a to se nakonec podařilo.
Oficiální tiskovku Pilulky si můžete přečíst zde: Pilulka.cz jako první e-shop v Česku spouští v aplikaci Apple Pay
Na implementaci jsme spolupracovali s PayU, jejichž platební bránu již částečně využíváme v mobilní aplikaci pro jiné platby a navíc již mají dobře zpracovanou SDK pro Apple Pay.
Ještě před tím, než začneme se samotnou implementací, je nutné kontaktovat svého poskytovatele platební brány a požádat o zpřístupnění Apple Pay platební metody na jejich straně. Při naší implementaci do aplikace jsme použili SDK od poskytovatele naší platební brány - PayUSDKLite.
V rámci Apple developerského účtu na https://developer.apple.com v sekci "Certificates, Identifiers & Profiles" -> "Identifiers" -> "Merchant ID" vytvoříme pomocí instrukcí na obrazovce nové Merchant ID. Merchant ID vypadá asi takto: merchant.com.yourcompany.yourapp
Dále je potřeba vytvořit certifikát, na základě kterého bude moci platební brána ověřit a zprocesovat transakce. Pro tento certifikát je potřeba .csr soubor, který vám vygeneruje platební brána. Pomocí CSR vytvoříte apple_pay.cer, který následně zašlete do platební brány a oni ho vloží na svůj server a do Apple účtu. Tento proces může trvat i více pracovních dnů, proto je dobré s ním začít co nejdříve. Podrobnější návod na vytvoření certifikátu naleznete zde: https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f
V XCode v sekci "Capabilities" zapneme "Apple Pay". Merchant ID vytvořené v 1. kroku se automaticky objeví a zaškrtne v řádku "Merchant IDs".
V iTunes Connect vstoupíme do "Users and Access" -> "Sandbox", kde po kliknutí na "+" přidáme Gmail účet. Jako "App Store Territory" pro tento účet zvolíme USA, protože Sandbox pro Apple Pay není dostupný ve všech regionech.
Přihlásíme se do Gmail účtu a pomocí linku, který nám Apple po přidání Sandbox testera v iTunes Connect poslal, potvrdíme vytvoření nového Apple ID.
Nově vytvořené Apple ID Sandbox uživatele použijeme na přihlášení do iCloudu v iPhone a region iPhonu změníme na USA.
Na iPhone přidáme do aplikace Wallet jednu z testovacich debetních karet od Apple. Testovací karty jsou přistupné na odkazu níže:
[https://developer.apple.com/apple-pay/sandbox-testing/]https://developer.apple.com/apple-pay/sandbox-testing/
Po přidání testovací debetní karty pro sandbox uživatele vytvoříme v naší aplikaci Apple Pay tlačítko, které má Apple připravené speciálně pro účely Apple Pay. Apple Pay tlačítko se vytváří takto:
applePayButton = PKPaymentButton(paymentButtonType: .buy, paymentButtonStyle: .black)
A vypadá takto:
Po kliknutí na Apple Pay tlačítko nejdříve zkontrolujeme, že zařízení podporuje platby Apple Pay a pokud ne, uživateli zobrazíme chybovu hlášku.
Podporu Apple Pay zjistíme takto:
if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [.visa, .masterCard]) { // Apple Pay platba je mozna } else { // Apple Pay platba mozna nie je }
V případě, že uživatel Apple Pay nastavení má, na základě zboží v košíku vytvoříme Apple Pay transakci.
let applePayTransaction = PUApplePayTransaction( merchantIdentifier: merchantIdentifier, // nazov nasho Merchant ID currencyCode: PUCurrencyCode.CZK, // mena, v ktorej ma byt transakcia vykonana countryCode: PUCountryCode.countryCodeCZ, // krajina contactEmailAddress: userEmailAddress, // email uzivatela paymentItemDescription: itemDescription, // popis toho, co uzivatel kupuje amount: priceString // cena kupovaneho tovaru ) let applePayHandler = PUApplePayHandler() applePayHandler.delegate = self.orderFlow applePayHandler.authorizeTransaction(applePayTransaction, withUIparent: orderController)
Řádek applePayHandler.authorizeTransaction(applePayTransaction, withUIparent: orderController)
slouží na zobrazení Apple Pay obrazovky, která obsahuje informace o nakupovaném zboží a čeká na autorizaci platby uživatele pomocí otisku prstu, Face ID nebo kódu.
V posledním kroku implementujeme delegate funkci protokolu PUApplePayHandlerDelegate
, která nám po úspěšné autorizaci platby vygeneruje platební token, který spolu s informacemi o objednávce posíláme do platební brány.
Na stržení peněz z karty slouží právě tento token, informace o kartě se neposílají.
func paymentTransaction(_ transaction: PUApplePayTransaction!, result: String!) { // Transakcia bola uspesna. Tu treba result (token string) poslat spolu s informaciami o objednavke do patobnej brany cim vytvorime objednavku. }
Uživateli zobrazíme hlášku o dokončení objednávky a máme hotovo.