Mengurutkan project menyeluruh memungkinkan konfigurasi Mode Pembayaran Sandbox saat menggunakan lingkungan Pengujian Cepat atau Sandbox. Saat menguji feed data, Anda dapat beralih antara Mode Pembayaran Sandbox dan Produksi. Untuk menguji pembayaran untuk project Pemesanan Lengkap tanpa menagih kartu, gunakan Sandbox sebagai Mode Pembayaran Anda. Lingkungan produksi tidak mendukung Mode Pembayaran Sandbox.
Konfigurasi
Untuk mengaktifkan Mode Pembayaran Sandbox di lingkungan Sandbox, ikuti langkah-langkah berikut:
- Di Pusat Tindakan, buka Konfigurasi > Fitur.
- Pada kartu Fitur akun, temukan tombol pilihan Mode Pembayaran.
- Pilih opsi Sandbox, lalu klik Simpan perubahan.
Untuk mengaktifkan Mode Pembayaran Sandbox di lingkungan Pengujian Cepat, ikuti langkah-langkah berikut:
- Di Actions Center, buka Feed > Pengujian Cepat.
- Pilih tombol pilihan Gunakan sandbox untuk GPay.
Jika Mode Pembayaran Sandbox dipilih:
- Pemesanan End-to-End mengonfigurasi Google Pay untuk menampilkan token instrumen yang berisi data kartu pengujian, bukan detail kartu yang sebenarnya.
- Kolom
isInSandbox
ditetapkan ketrue
di CheckoutRequestMessage dan SubmitOrderRequestMessage.
Berbagai kombinasi Lingkungan, Mode Pembayaran, dan isInSandbox adalah sebagai berikut:
Lingkungan | Mode Pembayaran | isInSandbox |
---|---|---|
Pengujian Cepat | Kotak Pasir | true |
Pengujian Cepat | Produksi | false |
Kotak Pasir | Kotak Pasir | true |
Kotak Pasir | Produksi | false |
Produksi | Produksi | false |
Pesan Respons Checkout
CheckoutResponseMessage
yang dikirim oleh layanan web Pemesanan Makanan Anda berisi
PaymentOptions
. Saat
menyiapkan checkout,
Anda memberikan opsi pembayaran placeholder menggunakan contoh gateway pembayaran.
- Pastikan untuk memperbarui
CheckoutResponseMessage
yang dikirim oleh layanan web Anda dengan konfigurasi tokenisasi yang sesuai.
Contoh opsi pembayaran
Berikut adalah contoh objek PaymentOptions
JSON dari CheckoutResponseMessage
untuk berbagai gateway pembayaran yang menggunakan kunci sandbox:
"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\"}} " } }
"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\"}} " } }
"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\"}} " } }
"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\"}} " } }
Melaporkan transaksi sandbox
Jika Mode Pembayaran Sandbox diaktifkan, kolom isInSandbox
akan disertakan dalam permintaan dan ditetapkan ke true
untuk permintaan masuk ke endpoint
layanan web Anda (CheckoutRequestMessage
dan SubmitOrderRequestMessage
).
Lakukan hal berikut jika kolom isInSandbox
ditetapkan ke true
:
- Gunakan kunci sandbox, bukan kunci produksi, dalam konfigurasi tokenisasi untuk gateway pembayaran Anda. Sebagian besar pemroses pembayaran menyediakan kunci API untuk sandbox dan produksi.
- Jangan memicu komunikasi apa pun dengan penyedia layanan web, biasanya restoran, karena mereka tidak perlu diberi tahu tentang transaksi sandbox apa pun.
Kartu kredit pengujian tidak didukung, meskipun sandbox transaksi diaktifkan. Anda harus menggunakan kartu kredit sungguhan saat melakukan transaksi. Namun, token instrumen sandbox berisi detail kartu pengujian yang tidak dapat ditagih.
Memproses pembayaran
Saat pelanggan mengirimkan pesanan, Pemesanan Lengkap akan mengirimkan
SubmitOrderRequestMessage
ke endpoint layanan web Anda. Token
Google Pay
disertakan sebagai string yang dienkode base-64 di kolom
instrumentToken
SubmitOrderRequestMessage
. Untuk memproses pembayaran pelanggan, lakukan salah satu hal berikut, bergantung pada gateway pembayaran Anda:
Payment gateway | |
---|---|
Stripe atau Braintree | Dekode string token yang dienkode base-64 dan kirim data yang sesuai yang terdapat dalam payload token yang didekode ke gateway pembayaran Anda untuk memproses pembayaran. |
Semua gateway pembayaran lainnya (termasuk stripev2) | Kirim string token lengkap yang dienkode base-64 ke API gateway pembayaran Anda untuk memproses pembayaran. Struktur token metode pembayaran Google Pay berisi kolom terenkripsi yang dapat didekripsi oleh gateway pembayaran Anda untuk memproses pembayaran. |
Contoh payload yang didekode
Contoh berikut menunjukkan payload yang didekode yang ditampilkan di kolom instrumentToken
untuk berbagai gateway pembayaran:
Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan
Braintree. Ekstrak nilai kolom nonce
dan kirim nilai ke Braintree untuk memproses pembayaran.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Jika Google Pay tidak diaktifkan di panel kontrol Braintree, kolom
instrumentToken
akan didekode menjadi error berikut:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan Stripe.
Ekstrak nilai kolom id
dan kirimkan ke Stripe untuk memproses pembayaran.
{ "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 }
Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan stripev2.
{ "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\"}" }
Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan 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\"}" }
Untuk memproses pembayaran menggunakan token, tampilkan string token yang dienkode base-64 dengan permintaan Anda ke API pembayaran Square di kolom source_id
yang diawali dengan 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" } }
Berikut adalah contoh Node.js yang mendekode instrumentToken
berenkode base-64
dari Braintree:
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }