Jak jsme jako první eshop v ČR implementovali Apple Pay do mobilní aplikace?

(5. 3. 2019) Implementace Apple Pay do Pilulka.cz iOS aplikace

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

Pilulka-Apple-pay

Jaké jsme zvolili řešení?

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.

Popis implementace

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.

1. Vytvoříme Merchant ID

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

2. Povolíme Apple Pay v našem XCode projektu

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".

3. Testovací email přidáme jako Sandbox testera v rámci iTunes Connect

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.

4. Potvrdíme vytvoření nového Apple ID

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.

5. Pomocí nového Apple ID se přihlásíme do iCloudu v iPhone

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.

6. Nastavíme testovací debetní kartu

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/

7. V naší aplikaci vytvoříme Apple Pay tlačítko

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:

Apple-Pay-Button

8. Implementujeme funkcionalitu Apple Pay tlačítka

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.

Apple Pay Transaction

9. Vytvoříme objednávku

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. 
}

10. Dokončíme objednávku

Uživateli zobrazíme hlášku o dokončení objednávky a máme hotovo.

Volné pozice

O autorovi

Martin Hegyi iOS Developer

V Pilulce mám na starosti mobilnú aplikáciu na iOS ktorá je napísaná v najnovšom Swifte. Pri programovaní sa snažím vždy myslieť out-of-the-box a držať krok s neustále sa meniacimi trendami vo vývoji iOS-u. Vo svojom voľnom čase sa venujem vývoju hry na štýl tower defense s použitím SpriteKit-u.