최신 버전으로 업데이트

Google Pay API는 2018년 8월에 새로운 Android 클라이언트 라이브러리를 도입했습니다. 이 새로운 라이브러리는 문자열로 직렬화된 JSON 객체에서 IsReadyToPayRequest 또는 PaymentDataRequest 생성을 지원합니다. 이 가이드에서는 Builder 객체를 사용하는 Android 코드를 IsReadyToPayRequestPaymentDataRequestfromJson() 메서드에 전달된 것과 동일한 JSON 형식의 문자열로 업데이트하는 방법을 설명합니다.

결제 수단

이전 버전의 Google Pay API에서 사용한 Builder 객체는 IsReadyToPayRequest 또는 PaymentDataRequest의 결제 방법으로 카드만 지원했습니다. 최신 버전의 Google Pay API에서 CARD 결제 수단IsReadyToPayRequest 또는 PaymentDataRequest의 여러 가지 가능한 결제 수단 중 하나일 뿐입니다.

상수는 더 이상 사용되지 않습니다. 이전 버전에서 사용된 Builder 객체는 정수 상수를 참조했습니다. 새로운 JSON 형식 문자열은 CardParametersallowedAuthMethods 속성 배열에 해당 문자열 값을 설정합니다. 코드를 업데이트하려면 아래에서 자신의 사례에 해당하는 안내를 따르세요.

  1. 앱에서 PAYMENT_METHOD_CARD를 지원한 경우:
    • "PAN_ONLY"allowedAuthMethods 배열에 추가합니다.
  2. 앱에서 PAYMENT_METHOD_TOKENIZED_CARD를 지원한 경우:
    • "CRYPTOGRAM_3DS"allowedAuthMethods 배열에 추가합니다.

이전에는 별도로 지정하지 않을 경우 허용되는 카드 네트워크의 기본 집합이 앱에 할당되었습니다. 이제는 앱이 허용되는 카드 네트워크 목록을 제공해야 합니다.

빌더

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에 정의되어야 합니다.

빌더

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 객체에서 필요한 응답의 구성을 지정해야 합니다.

빌더

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 객체에 지정되어야 합니다.

빌더

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 이름-값 쌍으로 파싱될 수 있습니다.

이전 Getter

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 객체 참조를 확인하세요.

이전 Getter

paymentData
    .getCardInfo()
    .getCardDescription();

현재 JSON

paymentMethodData.get("description");

선택한 결제 수단 및 토큰화에 대한 정보는 paymentMethodData 속성에 배치됩니다.

이전 Getter

paymentData
    .getPaymentMethodToken()
    .getToken();

현재 JSON

paymentMethodData
    .get("tokenizationData")
    .get("token");

암호화된 메시지 응답

DIRECT 결제 수단 토큰화 유형을 지정하고 Android 기기 토큰(이전 명칭 WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)을 수락하는 앱은 서버에서 복호화된 encryptedMessage 속성을 처리하는 방식을 업데이트해야 합니다. 인증된 카드의 PAN_ONLYCRYPTOGRAM_3DS 유형은 모두 paymentMethodDetails에 제공된 인증 수단 및 인증 수단 관련 필드에 대한 추가 정보가 있는 CARDpaymentMethod로 표시됩니다.

따라서 서버가 업데이트되지 않으면 Android 기기 토큰을 게이트웨이나 대행업체에 전달할 수 없습니다. 이는 서버가 응답에서 여러 유형의 카드 인증을 구분할 수 없기 때문입니다. 카드는 paymentMethodDetails.authMethod에서 선택한 카드의 인증 방법에 대한 추가 정보가 있는 CARDpaymentMethod입니다. 토큰은 3D Secure 암호 및 선택적 전자 상거래 표시기(ECI)로 인증됩니다.

ECI

{
  "paymentMethod": "TOKENIZED_CARD",
  "paymentMethodDetails": {
    "authMethod": "3DS",
    "dpan": "1111222233334444",
    "expirationMonth": 10,
    "expirationYear": 2020,
    "3dsCryptogram": "AAAAAA...",
    "3dsEciIndicator": "eci indicator"
  }
}

3D Secure 암호

{
  "paymentMethod": "CARD",
  "paymentMethodDetails": {
    "authMethod": "CRYPTOGRAM_3DS",
    "pan": "1111222233334444",
    "expirationMonth": 10,
    "expirationYear": 2020,
    "cryptogram": "AAAAAA...",
    "eciIndicator": "eci indicator"
  }
}