次は決済情報入力画面を表示する処理を追加します。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行目のコメント辺り)。
事前に各決済プラットフォームのアカウントを取得しておく必要があります。具体的な処理の流れは以下のようになります。
対応しているプラットフォームはアップル公式ドキュメント「Apple Pay - Apple Developer」の「Payment Platforms」に記載されていますが、2016年10月現在、下記のプラットフォームが対応しています。
決済プラットフォームとの連携方法は各プラットフォームのドキュメントへのリンクがあるので、それぞれ参照してください。
本稿では、Apple Payのアプリ内課金における決済の流れを見てきましたがいかがでしょうか。Apple Payを利用する一助になりましたら幸いです。
本稿で作成したソースコードは、こちら(ApplePaySample.zip)からダウンロードできます。
次回はWebブラウザー上での決済「Apple Pay on the Web」について説明します。
田町のベンチャーで働くエンジニア。
仕事ではiPhoneアプリの開発やRailsを使ったWebサービス開発を行っている。最近のマイブームはUnityを使った3Dゲーム開発。
Copyright © ITmedia, Inc. All Rights Reserved.