หลังจากชำระเงิน การโทร ผู้ใช้รีวิวรถเข็นที่อัปเดตพร้อมภาษี ค่าจัดส่ง ส่วนลด และ ค่าใช้จ่ายอื่นๆ ที่คุณส่งคืน ผู้ใช้ยืนยันและส่งคำสั่งซื้อ และ Google จะส่งคำขอ JSON สำหรับปลายทางการดำเนินการตามคำสั่งซื้อที่มี ข้อมูลสำหรับคำสั่งซื้อ บริการบนเว็บของคุณต้องได้รับคำสั่งซื้อนี้ ประมวลผล และตอบกลับ Google พร้อมสถานะของคำสั่ง
ส่วนนี้จะอธิบายรูปแบบข้อความคำขอคำสั่งซื้อที่ Google ส่ง
ที่เรียกว่า SubmitOrderRequestMessage
และรูปแบบของข้อความตอบกลับ
ที่คุณจะต้องระบุ ซึ่งเรียกว่า
SubmitOrderResponseMessage
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับวงจรการดำเนินการตามคำสั่งซื้อ
ภาพรวมการดำเนินการตามคำสั่งซื้อ
การดำเนินการตามคำสั่งซื้อ
บริการเว็บการสั่งซื้อจากต้นทางถึงปลายทางที่คุณสร้างให้สามารถใช้งานร่วมกับการสั่งซื้อจากต้นทางถึงปลายทางได้นั้น
ระบุปลายทาง URL สําหรับรับข้อความคำสั่งซื้อจาก Google สำหรับคำสั่งซื้อ
การประมวลผล บริการบนเว็บจะได้รับ SubmitOrderRequestMessage
ใน JSON
เป็นรูปแบบคำขอ POST จาก Google คำขอนี้มีคำสั่งซื้อของลูกค้า
เช่น ภาษี ค่าธรรมเนียม และข้อมูลการชำระเงิน เมื่อได้รับคำสั่งให้ส่ง
บริการทางเว็บของคุณจะต้องทำดังนี้
- ตรวจสอบสิทธิ์การทำธุรกรรม เช่น การยืนยันบัตรหรือการตรวจจับการฉ้อโกง
- สร้างคำสั่งซื้อในระบบของคุณ
- ให้สิทธิ์วิธีการชำระเงินและเรียกใช้ Charge API ของผู้ประมวลผลการชำระเงิน (หากมี)
- ตอบกลับด้วยสถานะคำสั่งซื้อที่เหมาะสม:
CREATED
,CONFIRMED
หรือREJECTED
หลังจากประมวลผลคำสั่งซื้อแล้ว รหัสการดำเนินการตามคำสั่งซื้อจะต้องให้การตอบกลับ
ในรูปแบบข้อความ JSON SubmitOrderResponseMessage
กลับไปยัง Google
ดูข้อมูลเพิ่มเติมเกี่ยวกับบริการบนเว็บสำหรับการสั่งซื้อแบบครบวงจร ในภาพรวมการดำเนินการตามคำสั่งซื้อ
ข้อความคำขอสั่งซื้อ
เมื่อลูกค้าเลือกสั่งซื้อในระหว่างขั้นตอนการสั่งซื้อแบบครบวงจร
Google ส่งคำขอไปยังบริการบนเว็บของคุณโดยมีข้อความ JSON ที่เรียกว่า
SubmitOrderRequestMessage
ที่มีข้อมูลต่อไปนี้
- ความตั้งใจ: ช่อง
inputs[0].intent
ของเนื้อหาคำขอส่งทุกรายการ มีค่าสตริงactions.intent.TRANSACTION_DECISION
- ลำดับ: ช่อง
inputs[0].arguments[0].transactionDecisionValue
ของ ส่งคำขอสั่งซื้อมีออบเจ็กต์Order
ที่แสดง ของคำสั่งซื้อของลูกค้า พร้อมด้วยรายละเอียดการชำระเงิน - แซนด์บ็อกซ์แฟล็ก: ช่อง
isInSandbox
ของคำขอส่งคำสั่งระบุว่า ธุรกรรมนั้นใช้การชำระเงินแซนด์บ็อกซ์หรือไม่
ตัวอย่างคำขอคำสั่งซื้อ
ต่อไปนี้เป็นตัวอย่าง SubmitOrderRequestMessage
:
JSON
{ "user": {}, "conversation": { "conversationId": "CTKbKfUlHCyDEdcz_5PBJTtf" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "merchant": { "id": "restaurant/Restaurant/QWERTY", "name": "Tep Tep Chicken Club" }, "lineItems": [ { "name": "Spicy Fried Chicken", "type": "REGULAR", "id": "299977679", "quantity": 2, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } }, "offerId": "MenuItemOffer/QWERTY/scheduleId/496/itemId/143", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": -33.8376441, "longitude": 151.0868736 }, "formattedAddress": "Killoola St, 1, Concord West NSW 2138", "zipCode": "2138", "city": "Concord West", "postalAddress": { "regionCode": "AU", "postalCode": "2138", "administrativeArea": "NSW", "locality": "Concord West", "addressLines": [ "Killoola St", "1" ] } }, "contact": { "displayName": "Hab Sy", "email": "hab9878.sy@gmail.com", "phoneNumber": "+61000000000", "firstName": "Hab", "lastName": "Sy" } } }, "otherItems": [ { "name": "Delivery fee", "type": "DELIVERY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "3", "nanos": 500000000 } } }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "43", "nanos": 100000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "01412971004192156198", "orderDate": "2020-10-22T09:02:06.173Z", "paymentInfo": { "displayName": "Pay when you get your food", "paymentType": "ON_FULFILLMENT" } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
ข้อความตอบกลับคำสั่งซื้อ
หลังจากได้รับคำขอ บริการสั่งซื้อบนเว็บแบบครบวงจรจะประมวลผล
และส่งกลับ SubmitOrderResponseMessage
ที่มี
ข้อมูลต่อไปนี้
OrderUpdate
: ออบเจ็กต์ที่มีสถานะของคำสั่งซื้อ และ การดำเนินการหลังการสั่งซื้อที่ผู้ใช้สามารถทำได้ เช่น การติดต่อฝ่ายสนับสนุนและ ดูรายละเอียดคำสั่งซื้อซึ่งคุณได้กำหนดในfinalResponse.richResponse.items[0].structuredResponse.orderUpdate
ฟิลด์ของ คำตอบ
ช่องอัปเดตคำสั่งซื้อ
เมื่อบริการบนเว็บส่ง SubmitOrderResponseMessage
บริการดังกล่าวจะมี
ช่อง OrderUpdate
ที่มีช่องต่อไปนี้
actionOrderId
: รหัสที่ไม่ซ้ำกันของคำสั่งซื้อ ซึ่งใช้เพื่อไม่ซ้ำกัน ระบุคำสั่งซื้อในระบบของคุณและอ้างอิงถึงเมื่อส่ง อัปเดตคำสั่งซื้อorderState
: ออบเจ็กต์OrderState
ที่แสดงสถานะของคำสั่งซื้อorderManagementActions
: การดำเนินการหลังการสั่งซื้อที่ผู้ใช้สามารถใช้ได้ เช่น ในการติดต่อฝ่ายสนับสนุนลูกค้าและดูรายละเอียดคำสั่งซื้อtotalPrice
: ราคารวมของคำสั่งซื้อ ขั้นตอนนี้ไม่บังคับ ส่งเท่านั้น หากราคารวมของคำสั่งซื้อมีการเปลี่ยนแปลงหลังจากที่ส่งคำสั่งซื้อ
คำสั่งซื้ออาจมีสถานะอย่างใดอย่างหนึ่งต่อไปนี้
CREATED
: ปลายทางของการดำเนินการตามคำสั่งซื้อประมวลผลคำสั่งซื้อเรียบร้อยแล้ว แต่ผู้ให้บริการยังไม่ได้ยืนยันคำสั่งซื้อCONFIRMED
: ปลายทางของการดำเนินการตามคำสั่งซื้อประมวลผลคำสั่งซื้อเรียบร้อยแล้ว และผู้ให้บริการได้ยืนยันคำสั่งซื้อแล้วREJECTED
: มีปัญหาทำให้ปลายทางของการดำเนินการตามคำสั่งซื้อไม่ได้ สร้างหรือยืนยันคำสั่งซื้อ ซึ่งอาจรวมถึงปัญหาการชำระเงิน
หากคุณตั้งค่าคำสั่งซื้อเป็นสถานะ REJECTED
ให้ระบุเหตุผลใน
ช่อง rejectionInfo
จาก OrderUpdate
ใช้
ค่า FoodOrderUpdateExtension.FoodOrderErrors
ที่ใช้ร่วมกับ
rejectionInfo
ประเภท UNKNOWN
และระบุคำอธิบาย
ตัวอย่างการตอบกลับคำสั่งซื้อ
ต่อไปนี้เป็นตัวอย่าง SubmitOrderResponseMessage
:
JSON
{ "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "1603357328160", "orderState": { "state": "CONFIRMED", "label": "Pending" }, "updateTime": "2020-10-22T02:02:08-07:00", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+61234561000" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order details", "openUrlAction": { "url": "https://partner.com/view/orderstatus" } } } ], "receipt": { "userVisibleOrderId": "BXZ-1603357328" } } } } ] } } }
ส่งคำขอไม่สำเร็จ
หากส่งคำขอไม่สำเร็จ คุณต้องตั้งค่า SubmitOrderResponseMessage
OrderState.state
เป็น REJECTED
และคำตอบต้อง
มี RejectionInfo ซึ่งมี RejectionType
เพื่ออธิบายประเภทข้อผิดพลาด
ตัวอย่างการตอบกลับที่ไม่สำเร็จ
JSON
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PAYMENT_DECLINED", "reason": "Insufficient funds" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order", "openUrlAction": { "url": "https://orderview.partner.com?orderid=sample_action_order_id" } } } ] } } } ] } } }
ส่งการใช้งานตามคำสั่งซื้อ
ควรทําตามขั้นตอนต่อไปนี้เมื่อใช้ API คำสั่งซื้อในการส่ง
การตรวจสอบความถูกต้อง
- ดำเนินการตรวจสอบบริการ รถเข็น และโปรโมชันตามที่ทำในตั้งค่า ชำระเงิน
- แสดงผล RejectionInfo ด้วย 1 ในประเภทต่อไปนี้ หาก ต้องการ:
RejectionInfoType | กรณีการใช้งาน |
---|---|
UNAVAILABLE_SLOT |
เวลาดำเนินการตามคำสั่งซื้อใช้ไม่ได้อีกต่อไป |
PROMO_USER_INELIGIBLE |
ใช้อีเมลในออบเจ็กต์ข้อมูลติดต่อในคำขอเพื่อตรวจสอบการมีสิทธิ์ของโปรโมชันสำหรับผู้ใช้ ดูตัวอย่างในส่วนใช้คําสั่ง "ส่ง" กับโปรโมชัน |
INELIGIBLE |
|
PAYMENT_DECLINED |
ประมวลผลการชำระเงินไม่ได้ ตัวอย่างเช่น อาจเป็นเพราะคุณมีเงินไม่เพียงพอ |
UNKNOWN |
สำหรับข้อผิดพลาดในการตรวจสอบความถูกต้องอื่นๆ |
ตั้งค่า OrderState.state
เป็น REJECTED
หากมีการตรวจสอบ
พบข้อผิดพลาด หรือจะระบุเหตุผลการปฏิเสธที่เฉพาะเจาะจงก็ได้
โดยใช้ FoodOrderUpdateExtensionfoodOrderErrors
ดูตัวอย่างใน
ส่งการตรวจสอบคำสั่งซื้อ
ประมวลผลการชำระเงิน
- คำนวณ
totalPrice
ด้วยการเพิ่มราคาในรถเข็น ค่าธรรมเนียม ส่วนลด ภาษี และ โดยไม่มีค่าตอบแทนtotalPrice
ควรเหมือนกับtotalPrice
ที่แสดง ใน CheckoutResponseMessage รวมกับการเปลี่ยนแปลงใน จำนวนเงินค่าตอบแทนที่ผู้ใช้แก้ไขให้ ดูราคา การเปลี่ยนแปลงระหว่างการส่งคำสั่งซื้อเพื่อดูรายละเอียดเพิ่มเติม - ประมวลผลคำสั่งซื้อและการชำระเงินหากคุณส่งคืนการตอบกลับพร้อมสถานะคำสั่งซื้อ
ของ
CREATED
หรือCONFIRMED
- ตรวจสอบว่าได้แสดงผลรูปแบบการตอบกลับที่ถูกต้องโดยใช้ประเภทที่สร้างขึ้น สร้างขึ้นจากสคีมาตามที่อธิบายไว้ใน สร้างไลบรารีของไคลเอ็นต์
- ใช้เมนู
GoogleProvidedPaymentInstrument
instrumentToken
เพื่อประมวลผลการชำระเงิน แสดง RejectionInfo พร้อมประเภทPAYMENT_DECLINED
หากประมวลผลการชำระเงินไม่ได้ ดูกระบวนการ การชำระเงินของคุณ - แจ้งผู้ใช้ทันทีหลังจากที่มีการประมวลผลคำสั่งซื้อทางอีเมล และ หรือ SMS
ส่งคืนคำตอบ
- ตั้งค่า OrderState.
state
เป็นCREATED
หรือCONFIRMED
หาก ก็ไม่มีข้อผิดพลาด - ตั้งค่า OrderState.
state
เป็นREJECTED
หากมีข้อผิดพลาด พบและมีออบเจ็กต์ RejectionInfo ที่มีแอตทริบิวต์ RejectionInfoType ที่เกี่ยวข้อง - ตั้งค่า OrderUpdate
orderManagementActions