ついに日本対応開始! 開発者が知っておきたいApple Pay決済アプリの仕組みとPassKitの使い方:Apple Payアプリ開発入門(1)(3/3 ページ)
2016年10月25日から日本でも利用可能になったApple Payについて、アプリ内課金における決済処理の流れを、実装フレームワークPassKitの使い方とともに解説します。
決済情報入力画面を表示
次は決済情報入力画面を表示する処理を追加します。ViewControllerクラスのtapPaymentButtonメソッドを以下のように修正してください。
class ViewController: UIViewController { let summary = PKPaymentSummaryItem(label: "ひまわりの花", amount: NSDecimalNumber(string: "1200"), type: .final) override func viewDidLoad() { // 省略 } func tapPaymentButton() { let paymentRequest = PKPaymentRequest() paymentRequest.paymentSummaryItems = [summary] paymentRequest.merchantIdentifier = "merchant.com.clhs09.sample" paymentRequest.merchantCapabilities = .capability3DS paymentRequest.countryCode = "JP" paymentRequest.currencyCode = "JPY" paymentRequest.requiredShippingAddressFields = [.email, .name, .phone, .postalAddress] paymentRequest.supportedNetworks = [ PKPaymentNetwork.amex, PKPaymentNetwork.discover, PKPaymentNetwork.masterCard, PKPaymentNetwork.visa ] let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest) paymentController.present(completion: nil) } }
「PKPaymentRequest」「PKPaymentAuthorizationController」はPassKitのクラスです。PKPaymentRequestに商品情報やMerchantIDなどをセットしてPKPaymentAuthorizationControllerに渡すことで決済確認画面を表示しています。
アプリを起動して購入ボタンを押すと情報入力画面が立ち上がります。
この画面で一通りの情報入力すると、下のボタンが「Touch IDで支払う」に変わります。指紋認証が完了すると決済処理を行えます。
指紋認証した後の処理
指紋認証した後の処理を実装します。以下のように、ViewControllerをPKPaymentAuthorizationControllerDelegateに準拠させます。
class ViewController: UIViewController { // 省略 func tapPaymentButton() { // 省略 let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest) paymentController.delegate = self // この行も追加 paymentController.present(completion: nil) } } extension ViewController: PKPaymentAuthorizationControllerDelegate { func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, completion: @escaping (PKPaymentAuthorizationStatus) -> Void) { // ユーザーが決済を許可したときに呼ばれる // paymentの中にトークン情報が入っているので、これを使って決済する completion(.success) } func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) { // 決済完了時・キャンセルを押したときに呼ばれる controller.dismiss(completion: nil) } }
ここまで実装したところで指紋認証をすると、決済完了の表示が出るようになりました。
各決済プラットフォームとの連携
最後に、各決済プラットフォームとの連携についても触れておきます。決済処理にはApple Payに対応した各決済プラットフォームとの連携が必要で、PKPaymentAuthorizationControllerDelegateのpaymentAuthorizationController:payment:completionメソッド内で決済処理を実装する必要があります(前述のコードの15〜16行目のコメント辺り)。
事前に各決済プラットフォームのアカウントを取得しておく必要があります。具体的な処理の流れは以下のようになります。
- paymentAuthorizationController:payment:completionメソッドが呼ばれる
- 引数で決済トークンを受け取るので、それを決済プラットフォームに送信
- 決済プラットフォームがカード会社と通信して決済処理を行う
対応しているプラットフォームはアップル公式ドキュメント「Apple Pay - Apple Developer」の「Payment Platforms」に記載されていますが、2016年10月現在、下記のプラットフォームが対応しています。
決済プラットフォームとの連携方法は各プラットフォームのドキュメントへのリンクがあるので、それぞれ参照してください。
次回は、「Apple Pay on the Web」について
本稿では、Apple Payのアプリ内課金における決済の流れを見てきましたがいかがでしょうか。Apple Payを利用する一助になりましたら幸いです。
本稿で作成したソースコードは、こちら(ApplePaySample.zip)からダウンロードできます。
次回はWebブラウザー上での決済「Apple Pay on the Web」について説明します。
筆者紹介
杉本裕樹
田町のベンチャーで働くエンジニア。
仕事ではiPhoneアプリの開発やRailsを使ったWebサービス開発を行っている。最近のマイブームはUnityを使った3Dゲーム開発。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- iOS 10 SDKの新機能SiriKit、音声認識、iMessage拡張を自作アプリに生かすには
iOS 10で開発者にAPIが解放されたと話題の音声アシスタント「Siri」。その実態はどんなものなのか。SiriKit、Speech/Messages Frameworkの使い方と併せて、簡単なアプリを作りながら解説します。 - 「iPhone 7」の新機能、エンジニアは“どこ”を評価した?
「fabcross for エンジニア」が、設計/開発系エンジニアに聞いたiPhone 7/iPhone 7 Plusに関する意識調査結果を発表。彼らがiPhone 7の新機能で特に評価した項目は……? - 2Dゲームを例にSwift 2からSwift 3への変更点と移行のポイントを見る
iPhoneゲームをSwift言語で作成してみたいという初心者向けにiOSのゲームフレームワークを使った作り方を一から解説する入門連載。今回は、これまでに作成したアプリのコードをSwift 3.0に対応することで、対応する際のポイントや3.0での変更点を解説します。併せて、Xcode 8のSwift 3.0自動変換ツールの使い方なども紹介します。