[iOS 10] 開発者のための Apple Pay 概要
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では Apple Pay の開発者向けの概要をご紹介していきます。一般的な情報についてはこちらの記事などをご覧ください!
特徴
「Apple Pay」はアプリ内での決済を安全、簡単に行うためのサービスです。アプリが「Apple Pay」に対応することによって、ユーザーや開発者は以下のような利益を得ることができます。
ユーザーの利益
- 一旦登録すれば、支払い方法や連絡先を何回も入力する必要がない
- Touch ID を使用して支払うことができる
- マーチャント (アプリ提供者) にクレジットカード番号を知られずに済む
開発者の利益
- 実際のクレジットカード番号を扱わなくて良い
- コンバージョンを向上させることができる
- スピーディーな決済を提供できる
- ユーザーをサービスに適応させたり、新たにアカウントを作成してもらったりする必要がない
「Apple Pay」と「アプリ内課金」
アプリ内での決済方法として「Apple Pay」と「アプリ内課金」があります。ここで両者を比較してみます。
Apple Pay | アプリ内課金 | |
---|---|---|
使用するフレームワーク | PassKit | StoreKit |
販売可能なもの | 実物の商品やサービス | デジタルコンテンツ、アプリの機能、デジタルのサービスの購読 |
決済処理 | 開発者側が行う | Apple が提供する |
レビューガイドライン | 3.1.6 | 3.1.1 |
販売可能なものがデジタルコンテンツ等である「アプリ内課金」に対し、「Apple Pay」で販売可能なものは実物の商品やサービスです。
また、アプリ内課金の決済処理は Apple が提供しますが、「Apple Pay」の場合は決済処理を開発者側が行う必要があります。自社にクレジットカード決済のインフラが無い限り、決済処理を代わりに行なってくれるペイメントソリューションプロバイダに処理を依頼することになります。Apple Pay をサポートしているペイメントソリューションプロバイダは以下のページに載っています。
決済フロー
決済処理をペイメントソリューションプロバイダに処理を依頼する場合の大まかな決済フローを整理してみます。開発者が実装する必要があるのは、手順 [1],[2],[5] だけです。
[1] ペイメントリクエストを作成
購入額などの情報を元にペイメントリクエストを作成します。
[2] ペイメントシートを表示
PKPaymentAuthorizationViewController
(または PKPaymentAuthorizationController
) を使用してペイメントシートを表示します。ペイメントシートには購入額などが表示されます。ユーザーは必要に応じて送付先や請求先住所などの情報を入力します。
[3] 支払情報を暗号化
ユーザーが支払いを承認すると、支払い情報がデバイス上の専用チップ Secure Element に送信され、暗号化済みのペイメントトークンが作成されます。
[4] Appleのサーバ上で再暗号化
手順 [3] で作成されたペイメントトークンは Apple のサーバに送信され、マーチャント ID の証明書を使用して再暗号化されます。マーチャント ID は Apple Pay に対して身元を証明するものです。
[5] ペイメントトークンを取得
Apple のサーバで暗号化されたペイメントトークンがアプリに返されます。
ペイメントソリューションプロバイダが提供する方法を使用してトークンを送信します。
[6] 決済処理を実行
ペイメントソリューションプロバイダ側で、支払い情報の復号化が行われ、決済処理が実行されます。
さいごに
本記事では Apple Pay の開発者向けの概要をご紹介しました。
次の記事では Apple Pay を使用するための環境構築について解説する予定です!
参考資料
- Apple Payプログラミングガイド:Apple Payについて
- In-App Purchaseプログラミングガイド (TP40008267 0.0.0)
- Apple Pay - Apple Developer
- What's New with Wallet and Apple Pay - WWDC 2016 - Videos - Apple Developer
- Apple Pay Within Apps - WWDC 2015 - Videos - Apple Developer
- iOS Security Guide
- USのiOSアプリでApple Payに対応した話 - Mercari Engineering Blog