Đặt hàng các dự án đầu cuối cho phép định cấu hình Phương thức thanh toán Hộp cát khi bằng cách sử dụng môi trường Kiểm tra nhanh hoặc Hộp cát. Trong khi bạn kiểm tra dữ liệu của mình nguồn cấp dữ liệu, bạn có thể chuyển đổi giữa Hộp cát và Phương thức thanh toán chính thức. Để thử nghiệm thanh toán cho dự án Đặt hàng đầu cuối của bạn mà không tính phí vào thẻ, sử dụng Hộp cát làm Phương thức thanh toán của bạn. Môi trường phát hành công khai không hỗ trợ Chế độ thanh toán Sandbox.
Cấu hình
Để bật Chế độ thanh toán hộp cát trong môi trường Hộp cát, hãy làm theo các bước sau các bước:
- Trong Trung tâm hành động, hãy chuyển đến phần Cấu hình > Tính năng.
- Trên thẻ Tính năng tài khoản, hãy tìm nút radio Phương thức thanh toán.
- Chọn lựa chọn Hộp cát rồi nhấp vào Lưu thay đổi.
Để bật Chế độ thanh toán trong Hộp cát trong môi trường Thử nghiệm nhanh, hãy làm theo các bước sau các bước:
- Trong Trung tâm hành động, hãy chuyển đến phần Nguồn cấp dữ liệu > Kiểm tra nhanh.
- Chọn nút chọn Use Sandbox for GPay (Sử dụng hộp cát cho GPay).
Khi Phương thức thanh toán Hộp cát được chọn:
- Dịch vụ Đặt hàng hai đầu sẽ định cấu hình Google Pay để trả về mã thông báo của phương thức thanh toán chứa dữ liệu thẻ thử nghiệm thay vì thông tin chi tiết thực tế của thẻ.
- Trường
isInSandbox
được đặt thànhtrue
trong CheckoutRequestMessage và SubmitOrderRequestMessage.
Các cách kết hợp khác nhau của Môi trường, Phương thức thanh toán và isInSandbox như sau:
Môi trường | Phương thức thanh toán | isInSandbox |
---|---|---|
Thử nghiệm nhanh | Hộp cát | đúng |
Thử nghiệm nhanh | Sản xuất | false |
Hộp cát | Hộp cát | đúng |
Hộp cát | Sản xuất | false |
Sản xuất | Sản xuất | false |
Thông báo phản hồi về quy trình thanh toán
CheckoutResponseMessage
do dịch vụ web Đặt món ăn của bạn gửi chứa
PaymentOptions
Khi
thiết lập quy trình thanh toán,
bạn cung cấp tuỳ chọn thanh toán giữ chỗ bằng cách sử dụng cổng thanh toán mẫu.
- Hãy nhớ cập nhật
CheckoutResponseMessage
mà web của bạn gửi có cấu hình mã hoá thích hợp.
Ví dụ về cách thanh toán
Sau đây là ví dụ về các đối tượng PaymentOptions
JSON qua một
CheckoutResponseMessage
cho nhiều cổng thanh toán sử dụng khoá hộp cát:
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\"}} " } }
Gắn cờ giao dịch trong hộp cát
Khi Chế độ thanh toán hộp cát được bật, trường isInSandbox
sẽ
được bao gồm trong yêu cầu và đặt thành true
cho các yêu cầu gửi đến trang web của bạn
điểm cuối dịch vụ (CheckoutRequestMessage
và SubmitOrderRequestMessage
).
Hãy làm như sau khi trường isInSandbox
được đặt thành true
:
- Sử dụng khoá hộp cát thay vì khoá sản xuất trong quá trình mã hoá cho cổng thanh toán của bạn. Hầu hết các công ty xử lý thanh toán đều cung cấp API cho cả hộp cát và phiên bản chính thức.
- Không kích hoạt bất kỳ liên lạc nào với nhà cung cấp dịch vụ web, thường là nhà hàng của bạn, vì họ không cần phải nhận thông báo về bất kỳ giao dịch trong hộp cát nào.
Thẻ tín dụng thử nghiệm không được hỗ trợ, ngay cả khi hộp cát giao dịch được bật. Bạn phải sử dụng thẻ tín dụng thực khi thực hiện giao dịch. Tuy nhiên, mã thông báo công cụ hộp cát chứa chi tiết thẻ thử nghiệm không thể tính phí.
Xử lý khoản thanh toán
Khi khách hàng gửi đơn đặt hàng, hệ thống Đặt hàng hai đầu sẽ gửi
SubmitOrderRequestMessage
đến điểm cuối dịch vụ web của bạn. Google Pay
mã thông báo
được đưa vào dưới dạng chuỗi mã hoá base-64 trong SubmitOrderRequestMessage
instrumentToken
. Để xử lý thanh toán của khách hàng, hãy thực hiện một trong các cách sau tuỳ thuộc vào
cổng thanh toán của bạn:
Cổng thanh toán | |
---|---|
Kẻ sọc hoặc cây não | Giải mã chuỗi mã thông báo được mã hoá base-64 rồi gửi dữ liệu thích hợp có trong tải trọng mã thông báo đã giải mã tới cổng thanh toán của bạn để xử lý khoản thanh toán. |
Tất cả các cổng thanh toán khác (bao gồm cả stringev2) | Gửi chuỗi mã thông báo được mã hoá base-64 hoàn chỉnh tới API cổng thanh toán của bạn để xử lý khoản thanh toán. Cấu trúc mã thông báo phương thức thanh toán của Google Pay chứa các trường đã mã hoá mà cổng thanh toán của bạn có thể giải mã để xử lý khoản thanh toán. |
Ví dụ về tải trọng đã giải mã
Các ví dụ sau đây minh hoạ các tải trọng đã giải mã được trả về trong instrumentToken
cho các cổng thanh toán khác nhau:
JSON
Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng
Braintree. Trích xuất giá trị của trường nonce
và gửi giá trị này đến Braintree để xử lý khoản thanh toán.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Nếu bạn không bật Google Pay trong bảng điều khiển Braintree, thì
Trường instrumentToken
giải mã thành lỗi sau:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng Stripe.
Trích xuất giá trị của trường id
rồi gửi giá trị đó cho Stripe để
xử lý khoản thanh toán.
{ "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
Ví dụ JSON này đại diện cho mã thông báo thanh toán đã giải mã khi sử dụng stringev2.
{ "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
Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng 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\"}" }
Để xử lý khoản thanh toán bằng mã thông báo, hãy trả về chuỗi mã thông báo được mã hoá base-64 kèm theo yêu cầu của bạn đến API thanh toán của Square trong trường source_id
với tiền tố là gpay:
{ "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" } }
Sau đây là ví dụ về Node.js giúp giải mã mã hoá base-64
instrumentToken
từ Braintree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }