엔드 투 엔드 프로젝트를 주문하면 다음과 같은 경우에 샌드박스 결제 모드를 구성할 수 있습니다. 빠른 테스트 또는 샌드박스 환경을 이용해야 합니다. 데이터를 테스트하는 동안 샌드박스와 프로덕션 결제 모드 간에 전환할 수 있습니다. 목표: 카드 청구 없이 주문 엔드 투 엔드 프로젝트에 대한 결제를 테스트하려면, 샌드박스를 결제 모드로 선택합니다. 프로덕션 환경에서는 샌드박스 결제 모드를 지원합니다.
구성
샌드박스 환경에서 샌드박스 결제 모드를 사용 설정하려면 다음 단계를 따르세요. 단계:
- 작업 센터에서 구성 > 기능으로 이동합니다.
- 계정 기능 카드에서 결제 모드 라디오 버튼을 찾습니다.
- 샌드박스 옵션을 선택하고 변경사항 저장을 클릭합니다.
빠른 테스트 환경에서 샌드박스 결제 모드를 사용 설정하려면 다음 단계를 따르세요. 단계:
- 작업 센터에서 피드로 이동합니다. > 빠른 테스트를 탭합니다.
- GPay에 샌드박스 사용 라디오 버튼을 선택합니다.
샌드박스 결제 모드가 선택된 경우:
- 엔드 투 엔드 주문은 실제 카드 세부정보 대신 테스트 카드 데이터가 포함됩니다.
isInSandbox
필드는 다음에서true
로 설정됩니다. CheckoutRequestMessage 및 SubmitOrderRequestMessage.
환경, 결제 모드, isInSandbox의 다양한 조합 다음과 같습니다.
환경 | 결제 모드 | isInSandbox |
---|---|---|
빠른 테스트 | 샌드박스 | true |
빠른 테스트 | 프로덕션 | 거짓 |
샌드박스 | 샌드박스 | true |
샌드박스 | 프로덕션 | 거짓 |
프로덕션 | 프로덕션 | 거짓 |
결제 응답 메시지
음식 주문 웹 서비스에서 보낸 CheckoutResponseMessage
에는 다음이 포함됩니다.
PaymentOptions
입니다.
결제 설정
예시 결제 게이트웨이를 사용하여 자리표시자 결제 옵션을 제공합니다.
- 웹에서 전송한
CheckoutResponseMessage
를 업데이트해야 합니다. 적절한 토큰화 구성으로 구성할 수 있습니다
결제 옵션의 예
다음은PaymentOptions
샌드박스 키를 사용하는 다양한 결제 게이트웨이에 CheckoutResponseMessage
적용:
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
샌드박스 트랜잭션 플래그 지정
샌드박스 결제 모드가 사용 설정되면 isInSandbox
필드가 사용 설정됩니다.
요청에 포함되며 웹으로 수신되는 요청의 경우 true
로 설정합니다.
서비스 엔드포인트 (CheckoutRequestMessage
및 SubmitOrderRequestMessage
)
isInSandbox
필드가 true
로 설정된 경우 다음을 실행합니다.
- 토큰화에 프로덕션 키 대신 샌드박스 키 사용 결제 게이트웨이 구성입니다 대부분의 결제 대행업체는 API를 제공합니다. 샌드박스와 프로덕션 모두에 사용할 수 있습니다.
- 일반적으로 웹 서비스 제공업체와의 통신을 트리거하지 않습니다. 샌드박스 트랜잭션에 대해 알릴 필요가 없기 때문입니다.
거래 샌드박스가 사용 중지된 경우에도 테스트 신용카드는 지원되지 않습니다. 사용 설정되어 있습니다. 거래할 때는 실제 신용카드를 사용해야 합니다. 하지만 샌드박스 도구 토큰에는 청구할 수 없는 테스트 카드 세부정보가 포함되어 있습니다.
<ph type="x-smartling-placeholder">결제 처리
고객이 주문을 제출하면 엔드 투 엔드 주문에서
SubmitOrderRequestMessage
웹 서비스 엔드포인트에 연결할 수 있습니다 Google Pay
토큰
base-64 인코딩 문자열로 포함된 SubmitOrderRequestMessage
instrumentToken
필드를 확인합니다. 고객의 결제를 처리하려면 다음에 따라 다음 중 하나를 수행합니다.
결제 게이트웨이:
결제 게이트웨이 | |
---|---|
스트라이프 또는 브레인트리 | base64로 인코딩된 토큰 문자열을 디코딩하고 디코딩된 토큰 페이로드에 포함된 적절한 데이터를 결제 게이트웨이로 전송하여 결제를 처리합니다. |
다른 모든 결제 게이트웨이 (Stripev2 포함) | base64로 인코딩된 전체 토큰 문자열을 결제 게이트웨이 API에 전송하여 결제를 처리합니다. Google Pay 결제 수단 토큰 구조에는 결제 게이트웨이가 결제를 처리하기 위해 복호화할 수 있는 암호화된 필드가 포함되어 있습니다. |
디코딩된 페이로드 예
다음 예는 instrumentToken
에 반환된 디코딩된 페이로드를 보여줍니다.
필드를 입력합니다.
JSON
이 JSON 예시는 다음을 사용할 때 디코딩된 결제 토큰을 나타냅니다.
Braintree. nonce
필드의 값 추출
결제를 처리하기 위해 해당 값을 Braintree로 보냅니다.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Braintree 제어판에서 Google Pay가 사용 설정되어 있지 않으면
instrumentToken
필드는 다음 오류로 디코딩됩니다.
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
이 JSON 예시는 Stripe를 사용할 때의 디코딩된 결제 토큰을 나타냅니다.
id
필드의 값을 추출하여 Stripe로 전송합니다.
결제를 처리합니다.
{ "id": "tok_abcdefg1234...", "object": "token", "card": { "id": "card_abcde...", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": null, "dynamic_last4": "1234", "exp_month": 1, "exp_year": 2019, "funding": "credit", "last4": "1234", "metadata": {}, "name": null, "tokenization_method": "android_pay" }, "client_ip": "74.125.177.36", "created": 1500483670, "livemode": false, "type": "card", "used": false }
JSON
이 JSON 예시는tripev2를 사용할 때의 디코딩된 결제 토큰을 나타냅니다.
{ "protocolVersion":"ECv2", "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d", "intermediateSigningKey":{ "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}", "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"] }, "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}" }
JSON
이 JSON 예시는 Square를 사용할 때의 디코딩된 결제 토큰을 나타냅니다.
{ "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla", "protocolVersion": "ECv1", "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}" }
토큰을 사용하여 결제를 처리하려면 gpay: 접두사가 붙은 source_id
필드에서 Square의 결제 API에 대한 요청과 함께 base-64로 인코딩된 토큰 문자열을 반환합니다.
{ "idempotency_key": "ID", "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN", "amount_money": { "amount": 50, "currency": "USD" }, "location_id": "LOCATION_ID", "billing_address": { "postal_code": "11111" } }
다음은 base-64로 인코딩된 base-64 인코딩 코드를 디코딩하는
Braintree의 instrumentToken
:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }