Google Pay API は、2018 年 8 月に新しい Android クライアント ライブラリが導入されました。これらの新しいライブラリでは、文字列としてシリアル化された JSON オブジェクトから IsReadyToPayRequest
または
PaymentDataRequest
を作成する機能がサポートされています。このガイドでは、Builder
オブジェクトを使用している Android コードを、IsReadyToPayRequest
および PaymentDataRequest
の fromJson()
メソッドに渡される同等の JSON 文字列に更新する方法について説明します。
お支払い方法
以前のバージョンの Google Pay API で使用されていた Builder
オブジェクトは、IsReadyToPayRequest
または PaymentDataRequest
の支払い形式としてカードだけをサポートしていました。最新バージョンの Google Pay API では、CARD
のお支払い方法は、IsReadyToPayRequest
または PaymentDataRequest
で使用可能な複数のお支払い方法の 1 つにすぎません。
定数は使用されなくなりました。以前のバージョンで使用されていた Builder
オブジェクトは、整数定数を参照していました。新しい JSON 形式の文字列では、CardParameters
の allowedAuthMethods
プロパティ配列で同等の文字列値を設定します。コードを更新するには、現在のコードがどのケースに該当するかに応じて次の手順を行います。
- アプリが
PAYMENT_METHOD_CARD
をサポートしていた場合:allowedAuthMethods
配列に"PAN_ONLY"
を追加します。
- アプリが
PAYMENT_METHOD_TOKENIZED_CARD
をサポートしていた場合:allowedAuthMethods
配列に"CRYPTOGRAM_3DS"
を追加します。
以前には、別途指定しない限り、デフォルトで許可されたカード ネットワークがアプリに割り当てられていました。今後は、許可されたカード ネットワークのリストを提供する必要があります。
Builder
IsReadyToPayRequest.newBuilder() .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_CARD) .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD);
PaymentDataRequest.newBuilder() .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_CARD) .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD);
fromJson
{ "apiVersion": 2, "apiVersionMinor": 0, "allowedPaymentMethods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY", "CRYPTOGRAM_3DS" ], "allowedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA" ] } } ] }
カード支払いデータのトークン化
Google Pay API は、指定したゲートウェイによって参照されるか販売者独自のサーバーで復号される、暗号化されたカードデータを返します。これまで PaymentMethodTokenizationParameters
ビルダーに提供していた情報は、お支払い方法が CARD
の PaymentMethodTokenizationSpecification
で定義する必要があります。
Builder
PaymentMethodTokenizationParameters.newBuilder() .setPaymentMethodTokenizationType( WalletConstants.PAYMENT_GATEWAY) .addParameter( "gateway", "example") .addParameter( "gatewayMerchantId", "exampleGatewayMerchantId")
fromJson
{ "allowedPaymentMethods": [{ "type": "CARD", "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "example", "gatewayMerchantId": "exampleGatewayMerchantId" } } }] }
請求先住所
CARD
支払い方法に関連付ける請求先住所または電話番号を必須にするオプションがあります。請求先住所または電話番号が必要な場合は、BillingAddressParameters
JSON オブジェクトで必要なレスポンスの構成を指定する必要があります。
Builder
PaymentDataRequest.newBuilder() .setPhoneNumberRequired(true) .setCardRequirements( CardRequirements.newBuilder() .setBillingAddressRequired(true) .setBillingAddressFormat( WalletConstants.BILLING_ADDRESS_FORMAT_FULL));
fromJson
{ "allowedPaymentMethods": [{ "type": "CARD", "parameters": { "billingAddressRequired": true, "billingAddressParameters": { "format": "FULL", "phoneNumberRequired": true } } }] }
配送先住所
配送先住所の提供を必須にするオプションがあり、ユーザーは保存された配送先住所を使用するか、新しい住所を入力できます。配送先住所は PaymentDataRequest
JSON オブジェクトの最上位プロパティです。配送先として許可する国は、これまでは ShippingAddressRequirements
ビルダーに追加していましたが、今後は ShippingAddressParameters
JSON オブジェクトで指定する必要があります。
Builder
PaymentDataRequest.newBuilder() .setPhoneNumberRequired(true) .setShippingAddressRequired(true) .setShippingAddressRequirements( ShippingAddressRequirements.newBuilder() .addAllowedCountryCode("US") .addAllowedCountryCode("CA"))
fromJson
{ "shippingAddressRequired": true, "shippingAddressParameters": { "allowedCountryCodes": [ "US", "CA" ], "phoneNumberRequired": true } }
PaymentData レスポンス
レスポンスは、toJson()
クラスメソッドで使用可能な JSON 形式のレスポンスを含む PaymentDataRequest
オブジェクトです。このレスポンスを受け取るには、fromJson()
クラスメソッドを使用して PaymentDataRequest
オブジェクトを作成し、それを PaymentsClient
の loadPaymentData
メソッドに渡します。PaymentData
インスタンスは Intent
から抽出されます。JSON 形式の文字列は、JSONObject
またはその他の JSON 対応ライブラリを使用して JSON の名前と値のペアに解析できます。
以前のゲッター
PaymentData paymentData = PaymentData.getFromIntent(data);
現在の JSON
PaymentData paymentData = PaymentData.getFromIntent(data); String json = paymentData.toJson(); if (json != null) { JSONObject paymentDataJson = new JSONObject(json); JSONObject paymentMethodData = paymentDataJson.get("paymentMethodData"); }
選択されたお支払い方法の概要テキストは description
プロパティで提供されます。CARD
タイプが返されたときに使用できるその他のプロパティについては、CardInfo
JSON オブジェク トリファレンスをご覧ください。
以前のゲッター
paymentData .getCardInfo() .getCardDescription();
現在の JSON
paymentMethodData.get("description");
選択されたお支払い方法とそのトークン化に関する情報は、paymentMethodData
プロパティ内に配置されます。
以前のゲッター
paymentData .getPaymentMethodToken() .getToken();
現在の JSON
paymentMethodData .get("tokenizationData") .get("token");
暗号化されたメッセージ レスポンス
お支払い方法のトークン化タイプとして DIRECT
を指定し、Android デバイス トークン(以前は WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD
)を受け入れるアプリでは、サーバーで復号されたencryptedMessage
プロパティを処理する方法を更新する必要があります。PAN_ONLY
タイプと CRYPTOGRAM_3DS
タイプの認証カードはどちらも paymentMethod
が CARD
になり、認証方法に関する追加情報と認証方法に固有のフィールドが paymentMethodDetails
で提供されます。
その結果、サーバーは更新されなければ、Android 搭載デバイスのトークンをゲートウェイやデータ処理者に転送できません。これは、サーバーがレスポンスで複数の種類のカード認証を区別できないためです。カードは CARD
の paymentMethod
であり、選択されたカードの認証方法に関する追加情報が paymentMethodDetails.authMethod
に含まれます。トークンは、3D セキュア クリプトグラムとオプションの電子商取引インジケータ(ECI)で認証されます。
ECI
{ "paymentMethod": "TOKENIZED_CARD", "paymentMethodDetails": { "authMethod": "3DS", "dpan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "3dsCryptogram": "AAAAAA...", "3dsEciIndicator": "eci indicator" } }
3D セキュア クリプトグラム
{ "paymentMethod": "CARD", "paymentMethodDetails": { "authMethod": "CRYPTOGRAM_3DS", "pan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "cryptogram": "AAAAAA...", "eciIndicator": "eci indicator" } }