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
의 여러 가지 가능한 결제 수단 중 하나일 뿐입니다.
상수는 더 이상 사용되지 않습니다. 이전 버전에서 사용된 Builder
객체는 정수 상수를 참조했습니다. 새로운 JSON 형식 문자열은 CardParameters
의 allowedAuthMethods
속성 배열에 해당 문자열 값을 설정합니다. 코드를 업데이트하려면 아래에서 자신의 사례에 해당하는 안내를 따르세요.
- 앱에서
PAYMENT_METHOD_CARD
를 지원한 경우:"PAN_ONLY"
를allowedAuthMethods
배열에 추가합니다.
- 앱에서
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
객체를 만들고 이를 PaymentsClient
의 loadPaymentData
메서드에 전달합니다. 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_ONLY
및 CRYPTOGRAM_3DS
유형은 모두 paymentMethodDetails
에 제공된 인증 수단 및 인증 수단 관련 필드에 대한 추가 정보가 있는 CARD
의 paymentMethod
로 표시됩니다.
따라서 서버가 업데이트되지 않으면 Android 기기 토큰을 게이트웨이나 대행업체에 전달할 수 없습니다. 이는 서버가 응답에서 여러 유형의 카드 인증을 구분할 수 없기 때문입니다. 카드는 paymentMethodDetails.authMethod
에서 선택한 카드의 인증 방법에 대한 추가 정보가 있는 CARD
의 paymentMethod
입니다. 토큰은 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" } }