連載
» 2016年10月26日 05時00分 公開

ついに日本対応開始! 開発者が知っておきたいApple Pay決済アプリの仕組みとPassKitの使い方Apple Payアプリ開発入門(1)(3/3 ページ)

[杉本裕樹,マネーフォワード]
前のページへ 1|2|3       

決済情報入力画面を表示

 次は決済情報入力画面を表示する処理を追加します。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行目のコメント辺り)。

 事前に各決済プラットフォームのアカウントを取得しておく必要があります。具体的な処理の流れは以下のようになります。

  1. paymentAuthorizationController:payment:completionメソッドが呼ばれる
  2. 引数で決済トークンを受け取るので、それを決済プラットフォームに送信
  3. 決済プラットフォームがカード会社と通信して決済処理を行う

 対応しているプラットフォームはアップル公式ドキュメント「Apple Pay - Apple Developer」の「Payment Platforms」に記載されていますが、2016年10月現在、下記のプラットフォームが対応しています。

「Payment Platforms」のJapan(「Apple Pay - Apple Developer」から引用)

 決済プラットフォームとの連携方法は各プラットフォームのドキュメントへのリンクがあるので、それぞれ参照してください。

次回は、「Apple Pay on the Web」について

 本稿では、Apple Payのアプリ内課金における決済の流れを見てきましたがいかがでしょうか。Apple Payを利用する一助になりましたら幸いです。

 本稿で作成したソースコードは、こちら(ApplePaySample.zip)からダウンロードできます。

 次回はWebブラウザー上での決済「Apple Pay on the Web」について説明します。

筆者紹介

杉本裕樹

田町のベンチャーで働くエンジニア。

仕事ではiPhoneアプリの開発やRailsを使ったWebサービス開発を行っている。最近のマイブームはUnityを使った3Dゲーム開発。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。