ตั้งค่าการชำระเงินแซนด์บ็อกซ์

การสั่งซื้อโปรเจ็กต์แบบต้นทางถึงปลายทางช่วยให้กำหนดค่าโหมดการชำระเงินแซนด์บ็อกซ์ได้เมื่อใช้การทดสอบด่วนหรือสภาพแวดล้อมแซนด์บ็อกซ์ ขณะทดสอบฟีดข้อมูล คุณจะสลับระหว่างโหมดการชำระเงินแบบแซนด์บ็อกซ์กับเวอร์ชันที่ใช้งานจริงได้ หากต้องการทดสอบการชำระเงินสำหรับโปรเจ็กต์สั่งซื้อแบบต้นทางถึงปลายทางโดยไม่ต้องเรียกเก็บเงินจากบัตร ให้ใช้แซนด์บ็อกซ์เป็นวิธีการชำระเงิน สภาพแวดล้อมที่ใช้งานไม่สนับสนุน โหมดการชำระเงินแซนด์บ็อกซ์

การกำหนดค่า

หากต้องการเปิดใช้โหมดการชำระเงินแซนด์บ็อกซ์ในสภาพแวดล้อม Sandbox ให้ทำตามขั้นตอนต่อไปนี้

  1. ในศูนย์การดําเนินการ ให้ไปที่ฟีเจอร์การกําหนดค่า >
  2. หาปุ่มตัวเลือกวิธีการชำระเงินในการ์ดฟีเจอร์บัญชี
  3. เลือกตัวเลือกแซนด์บ็อกซ์ และคลิกบันทึกการเปลี่ยนแปลง

การ์ดฟีเจอร์บัญชีที่เลือกโหมดแซนด์บ็อกซ์

หากต้องการเปิดใช้โหมดการชำระเงินแซนด์บ็อกซ์ในสภาพแวดล้อมการทดสอบด่วน ให้ทำตามขั้นตอนต่อไปนี้

  1. ในศูนย์การดำเนินการ ให้ไปที่ฟีด > การทดสอบด่วน
  2. เลือกปุ่มตัวเลือกใช้แซนด์บ็อกซ์สำหรับ GPay

การทดสอบด่วนที่เลือกโหมดแซนด์บ็อกซ์

เมื่อเลือกวิธีการชำระเงินของแซนด์บ็อกซ์ จะมีผลดังนี้

  • การสั่งซื้อจากต้นทางถึงปลายทางจะกำหนดค่า Google Pay ให้แสดงผลโทเค็นเครื่องมือที่มีข้อมูลบัตรทดสอบแทนรายละเอียดบัตรจริง
  • ช่อง isInSandbox ได้รับการตั้งค่าเป็น true ใน CheckoutRequestMessage และ SubmitOrderRequestMessage

การใช้ Environment, Payment Mode และ isInSandbox รวมกันเป็นรูปแบบต่างๆ ดังนี้

สภาพแวดล้อม วิธีการชำระเงิน isInSandbox
การทดสอบด่วน แซนด์บ็อกซ์ จริง
การทดสอบด่วน Production false
แซนด์บ็อกซ์ แซนด์บ็อกซ์ จริง
แซนด์บ็อกซ์ Production false
Production Production false

ข้อความตอบกลับการชำระเงิน

CheckoutResponseMessage ที่ส่งมาจากบริการเว็บการสั่งอาหารของคุณมี PaymentOptions เมื่อตั้งค่าการชำระเงิน คุณจะต้องระบุตัวเลือกการชำระเงินตัวยึดตำแหน่งโดยใช้ตัวอย่างเกตเวย์การชำระเงิน

  • อย่าลืมอัปเดต CheckoutResponseMessage ที่ส่งมาจากบริการเว็บของคุณด้วยการกำหนดค่าการแปลงข้อมูลเป็นโทเค็นที่เหมาะสม

ตัวอย่างตัวเลือกการชำระเงิน

ต่อไปนี้คือตัวอย่างออบเจ็กต์ JSON 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 สำหรับทั้งแซนด์บ็อกซ์และเวอร์ชันที่ใช้งานจริง
  • อย่าเริ่มสื่อสารกับผู้ให้บริการเว็บ ซึ่งโดยปกติจะเป็นร้านอาหาร เนื่องจากผู้ให้บริการไม่จำเป็นต้องรับรู้ธุรกรรมใดๆ ของแซนด์บ็อกซ์

ระบบไม่รองรับบัตรเครดิตทดสอบ แม้ว่าจะเปิดใช้แซนด์บ็อกซ์ธุรกรรมก็ตาม คุณต้องใช้บัตรเครดิตจริงเมื่อทำธุรกรรม อย่างไรก็ตาม โทเค็นเครื่องมือแซนด์บ็อกซ์มีรายละเอียดการ์ดทดสอบที่ไม่สามารถเรียกเก็บเงินได้

ดำเนินการชำระเงิน

เมื่อลูกค้าส่งคำสั่งซื้อ การสั่งอาหารแบบจุดต่อจุดจะส่ง SubmitOrderRequestMessage ไปยังปลายทางบริการบนเว็บ โทเค็นของ Google Pay จะรวมเป็นสตริงที่เข้ารหัสแบบ Base64 ในช่อง SubmitOrderRequestMessage instrumentToken ในการประมวลผลการชำระเงินของลูกค้า ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้ตามเกตเวย์การชำระเงินของคุณ

เกตเวย์การชำระเงิน
ลายทางหรือ Braintree ถอดรหัสสตริงโทเค็นที่เข้ารหัส base-64 แล้วส่งข้อมูลที่เหมาะสมในเพย์โหลดโทเค็นที่ถอดรหัสแล้วไปยังเกตเวย์การชำระเงินเพื่อประมวลผลการชำระเงิน
เกตเวย์การชำระเงินอื่นๆ ทั้งหมด (รวมถึง 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"
    }
  }]
}

หากไม่ได้เปิดใช้ Google Pay ในแผงควบคุม Braintree ช่อง 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 นี้แสดงโทเค็นการชำระเงินที่ถอดรหัสแล้วเมื่อใช้ 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\"}"
}
  

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

หากต้องการประมวลผลการชำระเงินโดยใช้โทเค็น ให้แสดงผลสตริงโทเค็นที่เข้ารหัส base-64 พร้อมคำขอของคุณไปยัง API การชำระเงินของ Square ในช่อง source_id ที่นำหน้าด้วย 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"
    }
  }

ต่อไปนี้คือตัวอย่าง Node.js ที่ถอดรหัส base-64 ที่เข้ารหัส instrumentToken จาก Braintree

Node.js

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