Issuing でデジタルウォレットを使用する
Issuing を使用してデジタルウォレットにカードを追加する方法をご紹介します。
Issuing を使用すると、ユーザーは Apple Pay や Google Pay などのデジタルウォレットにカードを追加できます。Stripe は、以下の 2 つの方法でカードの追加をサポートしています。
- 手動のプロビジョニング: カード保有者は、スマホのウォレットアプリケーションにカード情報を入力して、デジタルウォレットに追加します。
- プッシュプロビジョニング: モバイルアプリケーションでは、ユーザーがアプリから直接、デジタルウォレットにカードを追加できます。
カードがデジタルウォレットに追加されると、そのカードのトークン化された表記が作成されます。ネットワークトークンは、カードとは別に管理されます。ネットワークトークンとその仕組みについて、詳細はトークン管理をご覧ください。
手動のプロビジョニング
カード保有者は、手動のプロビジョニングを使用して、Stripe Issuing のバーチャルカードと物理カードを Apple Pay、Google Pay、Samsung Pay のウォレットに追加できます。
これを行うには、カード保有者はスマートフォンでウォレットアプリを開いてカード詳細を入力します。Stripe は、カードに関連付けられたカード保有者の phone_
または email
に 6 桁の確認コードを送信します。
カードのプロビジョニング時にカード保有者にいずれのフィールドも設定されていない場合は、「card not supported (カードがサポートされていません)」というエラーが表示されます。
手動のプロビジョニングの実装にコードは必要ありませんが、設定のプロセスは、デジタルウォレットのプロバイダーと本拠を置く国によって異なることがあります。
アメリカ
Apple Pay ウォレットには、Apple からの承認が必要です。アカウントの Apple Pay のステータスを確認するには、デジタルウォレット設定を確認します。Apple Pay のご利用前に、お申し込みの提出が必要になる場合があります。
Google Pay と Samsung Pay では、これ以外のステップは必要ありません。
ヨーロッパ/イギリス
デジタルウォレットを導入するには、Stripe パートナーシップチームからの追加承認が必要です。詳細については、アカウント代表者に連絡するか、Stripe にお問い合わせください。
Apple Pay ウォレットには、追加の承認が必要です。アカウントの Apple Pay のステータスを確認するには、デジタルウォレット設定を確認します。Apple Pay のご利用前に、申請書の提出が必要になる場合があります。
プッシュプロビジョニング
プッシュプロビジョニングでは、カード保有者が下記のように「ウォレットに追加する」ボタンを押すことにより、アプリを使用して Stripe Issuing カードをデジタルウォレットに追加できます。
アメリカでプッシュプロビジョニングを有効にするには、ユーザーは最初に手動のプロビジョニング手順を完了する必要があります。プッシュプロビジョニングでは、手動でのプロビジョニングの承認に加え、Stripe SDK を導入しなければなりません。
そのためには、プッシュプロビジョニングのサポートを希望するプラットフォームごとに、Stripe の承認プロセスと、Stripe SDK によるコード実装の両方が必要になります。プラットフォームでの承認は、その連結アカウントのすべてに段階的に適用されます。
Samsung Pay のプッシュプロビジョニングは、Stripe の SDK ではサポートされていません。

アクセスをリクエスト
Stripe はプッシュプロビジョニング用にプライベート Google ライブラリで SDK ラッパーを提供しています。プッシュプロビジョニングを使用して Google Pay Store でアプリを配信するには、以下を行う必要があります。
- Google Pay へのアクセスをリクエストします。フォームに入力した後、数時間~ 1 日以内に承認されます。
- 承認を受けた後、Google の TapAndPay プライベート SDK をダウンロードします。TapAndPay SDK のテスト済みの最新バージョンはバージョン 18 です。
- アプリのPush Provisioning API Access Request (Push Provisioning API へのアクセスをリクエスト) を行います。Google の許可リストに追加するアプリケーション ID を指定する必要があります。このプロセスの詳細については、Google のドキュメントをご覧ください。このプロセスが完了すると、Google から Push Provisioning の資格が付与されます。
- Google がプッシュプロビジョニングの資格を付与したら、アプリケーション名、アプリケーション ID、カード ネットワーク、カード名を Stripe に連絡して、このステップを完了してください。
アプリを更新するクライアント側
- Google のプライベート SDK をインポートします。
- Stripe の SDK をインポートします。
dependencies { [... your dependencies] implementation 'com.stripe:stripe-android-issuing-push-provisioning:1.2.2' }
詳細については、サンプルアプリの各ステップのコードスニペットとリファレンスをご覧ください。このステップについては、サンプルアプリでこれらの SDK をインポートする方法をご覧ください。
- カード用の一時キーを作成するため、バックエンドを準備します。以下のセクションを参照してください。
PushProvisioningEphemeralKeyProvider
を拡張するEphemeralKeyProvider
を作成します。一時キープロバイダーは別のアクティビティに渡されるため、Parcelable
も実装する必要があります (Parcelable を参照)。詳細については、サンプルアプリを使用してEphemeralKeyProvider
を定義する方法をご覧ください。- Google の仕様に合わせて Google Pay に追加ボタンを実装します。サンプルアプリでは、ブランディングガイドラインに従うボタンの例が提供されています。
注意
Google で推奨されているように、ユーザーに Google Pay アプリのインストールを要求したり、またはアプリがあるかどうかをプログラムで確認しないでください。このアプリはフロントエンドにすぎず、これがなくても Google Pay は機能します。ユーザーは、「設定」アプリの Google 設定内でカードを管理できます。
注意
Google では、カードがまだユーザーのデバイスに登録されていない場合にのみ Google Pay に追加ボタンが表示され、カードが検証されていないユーザーは、ガイドに従って最終的な有効化プロセスを完了させる必要があります。Google のチェックポイントのリストを使用して、実装が正しいことを確認してください。
ユーザーのカードのステータスを確認するには、listTokens() を使用して、デバイスにすでに表示されているすべてのカードのリストを取得します。返された各オブジェクトの getFpanLastFour()
の値を、追加するカードの発行済みの Card オブジェクトにある Stripe の last4 プロパティと比較します。一致しないオブジェクトはすべてレスポンスリストから破棄します。
- 結果のリストが空の場合は、追加しようとしているカードがまだデバイスで提示されていないことを意味します。後述のように、ボタンを表示するための処理を行うことができます。
- 結果リストに
TokenInfo
オブジェクトが含まれている場合は、getTokenState()
を呼び出して、TokenState を確認してください。- ステータスが
TOKEN_
である場合、ユーザーはすでに特定のカードを手動でデバイスへ追加しようと試みています。Google Pay に追加ボタンは表示しますが、Google のドキュメントに概要が示されているように、STATE_ NEEDS_ IDENTITY_ VERIFICATION onActivityResult
リスナーをtokenize()
メソッドにワイヤリングすることにより、ユーザーがこの状況から回復できるようにします。 - その他のステータスの場合は、カードはすでにデバイスに登録されています。「Google Pay」ボタンを表示しないでください。
- ステータスが
内部テストを開始する前に、必ず、アプリケーション ID を Stripe に提供してください。設定には 1 週間以上かかり、設定が不完全である場合には、これらの 2 つのメソッドに対して矛盾したレスポンスを受信するといった結果が生じます。listTokens()
の結果には、Stripe で設定が完了した後に追加されたカードのみが含まれます。
- ユーザがボタンをタップしたときに、
PushProvisioningActivityStarter
を使用して Stripe のPushProvisioningActivity
を起動します。
new PushProvisioningActivityStarter( this, // The Activity or Fragment you are initiating the push provisioning from new PushProvisioningActivityStarter.Args( "Stripe Card", // The name that will appear on the push provisioning UI ephemeralKeyProvider, // Your instance of EphemeralKeyProvider false // If you want to enable logs or not )).startForResult();
詳細については、サンプルアプリを使用して PushProvisioningActivity
を開始する方法をご覧ください。
これによってプッシュプロビジョニングが準備され、カードをウォレットに追加する UI が起動されます。onActivityResult
にコールバックを実装してください。
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == PushProvisioningActivityStarter.REQUEST_CODE) { if (resultCode == PushProvisioningActivity.RESULT_OK) { PushProvisioningActivityStarter.Result success = PushProvisioningActivityStarter.Result.fromIntent(data); } else if (resultCode == PushProvisioningActivity.RESULT_ERROR) { PushProvisioningActivityStarter.Error error = PushProvisioningActivityStarter.Error.fromIntent(data); } } }
詳細については、サンプルアプリを使用して onActivityResult
を実装する方法をご覧ください。
プロビジョニングが成功すると、PushProvisioningActivityStarter.
が受信されます。ここには、アクティブなウォレットのカードの Google ID である、cardTokenId
が含まれます。この ID を使用してウォレットのその他の機能を使用できます。
プロビジョニングでエラーが発生すると、code
と message
とともに PushProvisioningActivityStarter.
が返されます。message
は開発者にとって分かりやすく書かれた、エラーを説明するテキストです。 code
の値は以下のいずれかです。
列挙値 | 意味 |
---|---|
USER_CANCELED | ユーザはプロビジョニングをキャンセルしました。 |
CARD_CANCELED | そのカードはキャンセルされたか、紛失または盗難が報告されており、プロビジョニングできません。 |
EPHEMERAL_KEY_ERROR | 一時キーの取得中にエラーが発生しました。 |
TAP_AND_PAY_UNAVAILABLE | TapAndPay ライブラリを使用できません。理由はおそらく、アプリが許可リストに追加されていないためです。 |
NO_STABLE_HARDWARE_ID | これは開発エミュレータで発生することがあります。アプリが安定したハードウェア ID を取得できません。 |
NO_ACTIVE_WALLET_FOUND | アクティブなウォレットがありません。一般にエミュレータには Google Pay がありません。 |
PUSH_PROVISIONING_ENCRYPTED_PAYLOAD_ERROR | プッシュプロビジョニング用の暗号化されたペイロードを取得するために Stripe のサーバに接続する際に、エラーが発生しました。 |
UNKNOWN_ERROR | 予期しないエラーが発生しました。message に追加情報が示されています。 |
バックエンドを更新するサーバ側
プッシュプロビジョニングの実装によって公開されるメソッドでは、お客様が自身のバックエンドとやり取りをし、Stripe の一時キーを作成してその JSON をアプリに返すことが求められます。このキーは有効期間の短い API 認証情報で、暗号化されたカード詳細の取得に使用でき、それがカードオブジェクトの単一インスタンスに使用されます。
Stripe API によって返されるオブジェクトがお使いの iOS または Android の SDK と互換性があることを確認するために、Stripe SDK では、優先される API バージョンを確認できます。キーを作成する際は、Stripe API に対してこの API バージョンを明示的に渡す必要があります。
{ "id": "ephkey_1G4V6eEEs6YsaMZ2P1diLWdj", "object": "ephemeral_key", "associated_objects": [ { "id": "ic_1GWQp6EESaYspYZ9uSEZOcq9", "type": "issuing.card" } ], "created": 1586556828, "expires": 1586560428, "livemode": false, "secret": "ek_test_YWNjdF8xRmdlTjZFRHelWWxwWVo5LEtLWFk0amJ2N0JOa0htU1JzEZkd2RpYkpJdnM_00z2ftxCGG" }
詳細については、サンプルバックエンドで Stripe の一時キーを作成する方法をご覧ください。
テスト
テストはすべて、本番環境で本番の Issuing カードを実際のデバイスで使用して行ってください。
サンプルアプリを作成するには、readme の手順に従います。上記の手順に従うために、アプリを作成する必要はありません。