最新バージョンへの更新

Google Pay API は、2018 年 8 月に新しい Android クライアント ライブラリが導入されました。これらの新しいライブラリでは、文字列としてシリアル化された JSON オブジェクトから IsReadyToPayRequest または PaymentDataRequest を作成する機能がサポートされています。このガイドでは、Builder オブジェクトを使用している Android コードを、IsReadyToPayRequest および PaymentDataRequestfromJson() メソッドに渡される同等の JSON 文字列に更新する方法について説明します。

お支払い方法

以前のバージョンの Google Pay API で使用されていた Builder オブジェクトは、IsReadyToPayRequest または PaymentDataRequest の支払い形式としてカードだけをサポートしていました。最新バージョンの Google Pay API では、CARDお支払い方法は、IsReadyToPayRequest または PaymentDataRequest で使用可能な複数のお支払い方法の 1 つにすぎません。

定数は使用されなくなりました。以前のバージョンで使用されていた Builder オブジェクトは、整数定数を参照していました。新しい JSON 形式の文字列では、CardParametersallowedAuthMethods プロパティ配列で同等の文字列値を設定します。コードを更新するには、現在のコードがどのケースに該当するかに応じて次の手順を行います。

  1. アプリが PAYMENT_METHOD_CARD をサポートしていた場合:
    • allowedAuthMethods 配列に "PAN_ONLY" を追加します。
  2. アプリが 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 ビルダーに提供していた情報は、お支払い方法が CARDPaymentMethodTokenizationSpecification で定義する必要があります。

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 オブジェクトを作成し、それを PaymentsClientloadPaymentData メソッドに渡します。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 タイプの認証カードはどちらも paymentMethodCARD になり、認証方法に関する追加情報と認証方法に固有のフィールドが paymentMethodDetails で提供されます。

その結果、サーバーは更新されなければ、Android 搭載デバイスのトークンをゲートウェイやデータ処理者に転送できません。これは、サーバーがレスポンスで複数の種類のカード認証を区別できないためです。カードは CARDpaymentMethod であり、選択されたカードの認証方法に関する追加情報が 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"
  }
}