ตั้งค่าการชำระเงินในสภาพแวดล้อมจำลอง

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

การกำหนดค่า

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

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

การ์ดฟีเจอร์ของบัญชีที่เลือกโหมด Sandbox

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

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

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

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

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

ชุดค่าผสมต่างๆ ของสภาพแวดล้อม โหมดการชำระเงิน และ isInSandbox มีดังนี้

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

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

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

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

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

ต่อไปนี้คือตัวอย่างออบเจ็กต์ JSON PaymentOptions จาก CheckoutResponseMessage สำหรับเกตเวย์การชำระเงินต่างๆ โดยใช้คีย์แซนด์บ็อกซ์

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

แจ้งธุรกรรมในกล่องทดสอบ

เมื่อเปิดใช้โหมดการชำระเงินใน Sandbox ระบบจะรวมช่อง isInSandbox ไว้ในคำขอและตั้งค่าเป็น true สำหรับคำขอขาเข้าไปยังปลายทางของบริการเว็บ (CheckoutRequestMessage และ SubmitOrderRequestMessage) ทําดังนี้เมื่อตั้งค่าช่อง isInSandbox เป็น true

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

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

ประมวลผลการชำระเงิน

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

Payment Gateway
Stripe หรือ Braintree ถอดรหัสสตริงโทเค็นที่เข้ารหัสฐาน 64 และส่งข้อมูลที่ถูกต้องซึ่งมีอยู่ในเพย์โหลดโทเค็นที่ถอดรหัสแล้วไปยังเกตเวย์การชำระเงินเพื่อประมวลผลการชำระเงิน
เกตเวย์การชำระเงินอื่นๆ ทั้งหมด (รวมถึง stripev2) ส่งสตริงโทเค็นที่เข้ารหัส Base64 ที่สมบูรณ์ไปยัง API ของเกตเวย์การชำระเงินเพื่อประมวลผลการชำระเงิน โครงสร้างโทเค็นวิธีการชำระเงินของ Google Pay มีช่องที่เข้ารหัสซึ่งเกตเวย์การชำระเงินสามารถถอดรหัสเพื่อประมวลผลการชำระเงิน

ตัวอย่างเพย์โหลดที่ถอดรหัสแล้ว

ตัวอย่างต่อไปนี้แสดงเพย์โหลดที่ถอดรหัสแล้วซึ่งแสดงผลในช่อง instrumentToken สำหรับเกตเวย์การชำระเงินต่างๆ

JSONJSONJSONJSON

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

หากต้องการประมวลผลการชำระเงินโดยใช้โทเค็น ให้ส่งสตริงโทเค็นที่เข้ารหัสฐาน 64 พร้อมคำขอไปยัง payment 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 ที่ถอดรหัสข้อมูลการเข้ารหัสฐาน 64 instrumentToken จาก Braintree

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