การสั่งซื้อโปรเจ็กต์แบบปลายทางถึงปลายทางทำให้สามารถกำหนดค่าโหมดการชำระเงินของแซนด์บ็อกซ์ได้เมื่อ โดยใช้การทดสอบด่วนหรือสภาพแวดล้อมแซนด์บ็อกซ์ ขณะที่คุณทดสอบข้อมูล คุณสามารถสลับระหว่างโหมดแซนด์บ็อกซ์และโหมดการชำระเงินของเวอร์ชันที่ใช้งานจริงได้ หากต้องการ ทดสอบการชำระเงินสำหรับโครงการสั่งซื้อแบบครบวงจรโดยไม่ต้องเรียกเก็บเงินจากบัตร แซนด์บ็อกซ์เป็นวิธีการชำระเงินของคุณ สภาพแวดล้อมการใช้งานจริงไม่ รองรับโหมดการชำระเงินของแซนด์บ็อกซ์
การกำหนดค่า
หากต้องการเปิดใช้โหมดการชำระเงินของแซนด์บ็อกซ์ในสภาพแวดล้อมแซนด์บ็อกซ์ ให้ทำดังนี้ ขั้นตอน:
- ในศูนย์การดำเนินการ ให้ไปที่การกำหนดค่า > ฟีเจอร์
- ในการ์ดฟีเจอร์บัญชี ให้หาปุ่มตัวเลือกวิธีการชำระเงิน
- เลือกตัวเลือกแซนด์บ็อกซ์ และคลิกบันทึกการเปลี่ยนแปลง
หากต้องการเปิดใช้โหมดการชำระเงินของแซนด์บ็อกซ์ในสภาพแวดล้อมการทดสอบด่วน ให้ทำดังนี้ ขั้นตอน:
- ใน Actions Center ให้ไปที่ฟีด > การทดสอบด่วน
- เลือกปุ่มตัวเลือกใช้แซนด์บ็อกซ์สำหรับ GPay
เมื่อเลือกวิธีการชำระเงินแซนด์บ็อกซ์ไว้ จะเป็นดังนี้
- การสั่งซื้อแบบต้นทางถึงปลายทางจะกำหนดค่า Google Pay ให้แสดงโทเค็นของเครื่องมือที่ มีข้อมูลการ์ดทดสอบแทนรายละเอียดจริงของการ์ด
- ฟิลด์
isInSandbox
ได้รับการตั้งค่าเป็นtrue
ในฟิลด์ CheckoutRequestMessage และ SubmitOrderRequestMessage.
การผสมผสานต่างๆ ของสภาพแวดล้อม โหมดการชำระเงิน และ isInSandbox ดังนี้
สภาพแวดล้อม | วิธีการชำระเงิน | isInSandbox |
---|---|---|
การทดสอบด่วน | แซนด์บ็อกซ์ | จริง |
การทดสอบด่วน | การผลิต | เท็จ |
แซนด์บ็อกซ์ | แซนด์บ็อกซ์ | จริง |
แซนด์บ็อกซ์ | การผลิต | เท็จ |
การผลิต | การผลิต | เท็จ |
ข้อความตอบกลับการชำระเงิน
CheckoutResponseMessage
ที่ส่งมาจากบริการบนเว็บสำหรับการสั่งอาหารมี
PaymentOptions
เมื่อคุณ
ตั้งค่าการชำระเงิน
คุณจะระบุตัวเลือกการชำระเงินตัวยึดตำแหน่งโดยใช้ตัวอย่างเกตเวย์การชำระเงิน
- อย่าลืมอัปเดต
CheckoutResponseMessage
ที่ส่งมาจากเว็บของคุณ พร้อมการกำหนดค่าการแปลงข้อมูลเป็นโทเค็นที่เหมาะสม
ตัวอย่างตัวเลือกการชำระเงิน
ต่อไปนี้คือตัวอย่างออบเจ็กต์ PaymentOptions
ของ JSON จาก
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
โทเค็น
รวมอยู่ด้วยเป็นสตริงที่เข้ารหัส base-64 ใน SubmitOrderRequestMessage
instrumentToken
ด้วย ในการประมวลผลการชำระเงินของลูกค้า ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
เกตเวย์การชำระเงินของคุณ:
เกตเวย์การชำระเงิน | |
---|---|
Stripe หรือ Braintree | ถอดรหัสสตริงโทเค็นที่เข้ารหัสแบบ Base64 และส่งข้อมูลที่เหมาะสมซึ่งมีอยู่ในเพย์โหลดโทเค็นที่ถอดรหัสแล้วไปยังเกตเวย์การชำระเงินเพื่อประมวลผลการชำระเงิน |
เกตเวย์การชำระเงินอื่นๆ ทั้งหมด (รวมถึง Stripev2) | ส่งสตริงโทเค็นที่เข้ารหัสฐาน 64 ที่สมบูรณ์ไปยัง 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\"}" }
หากต้องการประมวลผลการชำระเงินโดยใช้โทเค็น ให้แสดงผลสตริงโทเค็นที่เข้ารหัสฐาน 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; } }