Menyiapkan pembayaran sandbox

Pemesanan project End-to-End memungkinkan konfigurasi Mode Pembayaran Sandbox saat menggunakan lingkungan Pengujian Cepat atau Sandbox. Saat Anda menguji data Anda dapat beralih antara Mode Pembayaran Sandbox dan Produksi. Untuk menguji pembayaran untuk proyek Pemesanan Menyeluruh 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 langkah:

  1. Di Actions Center, buka Configuration > Features.
  2. Di kartu Fitur akun, cari tombol pilihan Mode Pembayaran.
  3. Pilih opsi Sandbox dan klik Save changes.

Kartu fitur akun dengan mode Sandbox dipilih

Untuk mengaktifkan Mode Pembayaran Sandbox di lingkungan Pengujian Cepat, ikuti langkah-langkah berikut langkah:

  1. Di Actions Center, buka Feed > Uji Cepat.
  2. Pilih tombol pilihan Gunakan sandbox untuk GPay.

Uji Cepat dengan mode Sandbox dipilih

Jika Mode Pembayaran Sandbox dipilih:

  • Pemesanan Menyeluruh mengonfigurasi Google Pay untuk mengembalikan token instrumen yang berisi data kartu pengujian, bukan detail kartu yang sebenarnya.
  • Kolom isInSandbox disetel ke true 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 salah
Kotak Pasir Kotak Pasir true
Kotak Pasir Produksi salah
Produksi Produksi salah

Pesan Respons Checkout

CheckoutResponseMessage yang dikirim oleh layanan web Pemesanan Makanan Anda berisi PaymentOptions. Jika Anda menyiapkan checkout Anda, Anda memberikan opsi pembayaran placeholder menggunakan contoh gateway pembayaran.

  • Pastikan untuk memperbarui CheckoutResponseMessage yang dikirim oleh web Anda dengan konfigurasi tokenisasi yang sesuai.

Contoh opsi pembayaran

Berikut adalah contoh objek PaymentOptions JSON dari objek CheckoutResponseMessage untuk berbagai gateway pembayaran yang menggunakan kunci sandbox:

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\"}} "
    }
}

Tandai transaksi sandbox

Jika Mode Pembayaran Sandbox diaktifkan, kolom isInSandbox akan disertakan dalam permintaan dan ditetapkan ke true untuk permintaan masuk ke web Anda endpoint layanan (CheckoutRequestMessage dan SubmitOrderRequestMessage). Lakukan hal berikut saat kolom isInSandbox ditetapkan ke true:

  • Gunakan kunci sandbox, bukan kunci produksi dalam tokenisasi untuk gateway pembayaran Anda. Sebagian besar pemroses pembayaran menyediakan API kunci untuk sandbox dan produksi.
  • Jangan picu komunikasi apa pun dengan penyedia layanan web, biasanya restoran, karena mereka tidak perlu diberitahu tentang transaksi {i>sandbox <i}apa pun.

Kartu kredit pengujian tidak didukung, meskipun sandbox transaksi mengaktifkan pembuatan versi. Anda harus menggunakan kartu kredit sungguhan saat melakukan transaksi. Namun, token instrumen sandbox berisi detail kartu pengujian yang tidak dapat dikenakan biaya.

Memproses pembayaran

Saat pelanggan mengirimkan pesanannya, Pemesanan Menyeluruh akan mengirimkan SubmitOrderRequestMessage ke endpoint layanan web Anda. Google Pay token disertakan sebagai string berenkode base-64 di SubmitOrderRequestMessage instrumentToken kolom tersebut. Untuk memproses pembayaran pelanggan, lakukan salah satu hal berikut bergantung pada gateway pembayaran Anda:

Gateway pembayaran
Stripe atau Braintree Dekode string token berenkode basis-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 jalurv2) Kirim string token yang dienkode dengan base-64 lengkap ke Payment gateway API 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 hasil dekode yang ditampilkan di instrumentToken untuk berbagai gateway pembayaran:

JSON

Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan Braintree. Ekstrak nilai kolom nonce dan kirim nilainya 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 mendekode ke error berikut:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

JSON

Contoh JSON ini merepresentasikan 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
}

JSON

Contoh JSON ini mewakili token pembayaran yang didekode saat menggunakan stripv2.

  {
  "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

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 beserta permintaan Anda ke Payment API 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 base-64 yang dienkode instrumentToken dari Braintree:

Node.js

function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}