チャージは 3 つの異なる環境で行えます。
- 決済インテグレータの Android アプリ
- 決済代行業者のモバイルサイト
- 決済代行業者のパソコン用ウェブサイト
フローに関係なく、Google はユーザー操作を決済インテグレータのソフトウェアに渡します。決済インテグレータは、ユーザーになじみのある UI を実装していますが、フローはユーザーの残高のチャージ専用にする必要があります。つまり、ユーザーは、チャージ フローへの追加操作が想定される汎用 UI にドロップするのではなく、チャージ プロセスを行う必要があります。
すべてのフローにおいて、インテグレータは TopUpRedirectResponse を生成します。このレスポンスは署名され、Google に返されます。
モバイルサイトとパソコン用ウェブサイトは Web Top Up API 仕様に準拠する必要があり、Android アプリのフローは Android Top Up API 仕様に準拠している必要があります。
インテグレータは、ユーザーを認証するための Android APK ソリューションを実装し、残高をチャージできるフローに誘導する必要があります。このチャージは別のモダリティですが、ウェブ チャージで提供されるチャージと同じ目的です。
ユーザーが Android アクティビティから決済インテグレータ アプリのフローに入ります。チャージ インテントは、ユーザーが購入しようとしている Play アプリから直接呼び出すことができます。チャージ中にバックグラウンドで Android が再生を終了しないようにするには、インテグレータがアクティビティ テーマに以下を含める必要があります。
<item name="android:windowIsTranslucent">true</item>
メソッド定義
インテントには次のプロパティが必要です。
メソッドのプロパティ | |
---|---|
行動 |
com.google.android.payments.standard.TOPUP_V1 |
カテゴリ | android.intent.category.DEFAULT |
リクエスト
フィールド | |
---|---|
gspTopUpRequest
|
TopUpRedirectRequest
チャージ リクエスト。 |
gspAssociationId
|
string
ユーザーがチャージするアカウントの認証情報を検索するためにインテグレータが使用する ID が含まれています。これは、AssociateAccountRequest におけるアカウントのリンク中に送信される関連付け ID です。 |
レスポンス
ユーザーがチャージ フローを完了した後、アプリは、結果インテントを Google に返す必要があります。チャージが成功したら、インテントを作成し、暗号化されたエンコードされた gspTopUpResponse と redirectRequestId をエクストラとして追加します。次に、アクティビティの結果を適切な結果コードに設定します。
...
result.setExtra("gspTopUpResponse", gspTopUpResponse);
result.setExtra("redirectRequestId", redirectRequestId);
setResult(Activity.RESULT_OK, result);
...
finish();
結果
フィールド | |||||||
---|---|---|---|---|---|---|---|
結果 |
int
|
その他
フィールド | |
---|---|
gspTopUpResponse |
TopUpRedirectResponse
必須: チャージ レスポンス。このエンコードされた値は 1 KB を超えないようにしてください。 |
redirectRequestId |
string 必須: 元の/リダイレクト支払いリクエストの開始時に送信された requestId 。Google はこれが送信された requestId と一致することを確認し、一致しない場合は完全なリダイレクト フローは失敗します。 |
その他のアクティビティ要件
また、上記の TOPUP_V1
アクションをサポートするアクティビティは、API の呼び出し元が Google によって署名されたアプリのみからのものかどうかを確認する必要もあります。これにより、他のアプリがアクティビティを呼び出してユーザーデータを取得することを防止できます。これは、Activity の実装内の super.onCreate
の直後に、提供された StandardPaymentUtils.verifyCallingActivityIsGoogleSigned
を使用することで実現できます。
サンプル:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);
....
}
チャージ フロー内で呼び出されるすべてのアクティビティは、windowIsTranslucent=true
を持つアクティビティ テーマを提供する必要があります。これを行うには、Context.setTheme()
ではなく、AndroidManifest の android:theme 属性を使用する必要があります。プログラム的にテーマを設定しても、ウィンドウの半透明度が正しく機能しません。Google では、最初に起動されるアクティビティがこのパターンに従うよう強制しますが、起動されるサブアクティビティもこのパターンに従う必要があります。対応していない場合、サードパーティのデベロッパーからの購入で動作しない可能性があります。