پس از تماس تسویهحساب ، کاربر سبد خرید بهروزرسانیشده را با مالیات، هزینههای تحویل، تخفیفها و سایر هزینههایی که برمیگردانید بررسی میکند. کاربر سفارش را تأیید و ارسال میکند و Google یک درخواست JSON که حاوی اطلاعات سفارش است، نقطه پایانی برای شما ارسال میکند. سرویس وب شما باید این سفارش را دریافت کند، آن را پردازش کند و با وضعیت سفارش به Google پاسخ دهد.
در این بخش، قالب پیام درخواست سفارش ارسال شده توسط Google، به نام SubmitOrderRequestMessage
، و قالب پیام پاسخی که باید ارائه دهید، به نام SubmitOrderResponseMessage
ارسال شده است. برای اطلاعات بیشتر در مورد چرخه عمر انجام سفارش، به نمای کلی Fulfillment مراجعه کنید.
اجرای سفارش
سرویس وب سفارش از پایان به انتها که برای کار با Ordering End-to-End میسازید باید دارای یک نشانی وب برای دریافت پیامهای سفارش از Google باشد. برای پردازش سفارش، سرویس وب شما یک SubmitOrderRequestMessage
در قالب JSON به عنوان یک درخواست POST از Google دریافت می کند. این درخواست حاوی سفارش مشتری، از جمله مالیات، هزینهها و اطلاعات پرداخت است. پس از دریافت درخواست ارسال سفارش، وب سرویس شما باید موارد زیر را انجام دهد:
- واجد شرایط بودن تراکنش، مانند تأیید کارت یا کشف تقلب را بررسی کنید.
- یک سفارش در سیستم خود ایجاد کنید.
- روش پرداخت را مجاز کنید و در صورت لزوم با API شارژ پردازنده پرداخت خود تماس بگیرید.
- با وضعیت مناسب سفارش پاسخ دهید:
CREATED
،CONFIRMED
، یاREJECTED
.
پس از پردازش سفارش، کد تکمیل شما باید پاسخی را در قالب یک پیام SubmitOrderResponseMessage
JSON به Google ارائه دهد.
برای اطلاعات بیشتر در مورد الزامات اجرای سرویس وب انجام سفارش از پایان به پایان، به نمای کلی Fulfillment مراجعه کنید.
پیام درخواست سفارش
هنگامی که مشتری تصمیم میگیرد در طول جریان سفارش از پایان به پایان سفارش دهد، Google درخواستی را با یک پیام JSON به نام SubmitOrderRequestMessage
به سرویس وب شما ارسال میکند که حاوی دادههای زیر است:
- Intent: فیلد
inputs[0].intent
هر بدنه درخواست سفارش ارسال حاوی مقدار رشتهactions.intent.TRANSACTION_DECISION
است. - Order: فیلد
inputs[0].arguments[0].transactionDecisionValue
یک درخواست سفارش ارسال حاوی یک شیOrder
است که نشان دهنده سفارش مشتری برای ارسال به همراه جزئیات پرداخت است. - پرچم Sandbox: قسمت
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 }
پیام پاسخ سفارش
پس از دریافت درخواست، سرویس وب سفارشی End-to-End شما درخواست را پردازش می کند و یک 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 را با یکی از انواع زیر برگردانید:
RejectionInfoType | مورد استفاده |
---|---|
UNAVAILABLE_SLOT | زمان تکمیل دیگر معتبر نیست. |
PROMO_USER_INELIGIBLE | از ایمیل موجود در شیء تماس در درخواست برای تأیید صلاحیت تبلیغ برای کاربر استفاده کنید. مثال را در پیاده سازی سفارش ارسال با تبلیغات ببینید. |
INELIGIBLE |
|
PAYMENT_DECLINED | پرداخت قابل پردازش نیست. به عنوان مثال، این می تواند به دلیل کمبود بودجه باشد. |
UNKNOWN | برای هرگونه خطای اعتبارسنجی دیگر. |
OrderState را تنظیم کنید. در صورت وجود خطاهای اعتبار سنجی، state
را REJECTED
. به صورت اختیاری، میتوانید با استفاده از FoodOrderUpdateExtension دلیل رد خاصی را ارائه کنید. foodOrderErrors
نمونه هایی را در ارسال اعتبار سفارش مشاهده کنید.
پرداخت را پردازش کنید
- با اضافه کردن قیمت سبد خرید، کارمزد، تخفیف، مالیات و انعام،
totalPrice
محاسبه کنید. در صورتی که کاربر بتواند انعام را تغییر دهد،totalPrice
باید همانtotalPrice
باشد که در CheckoutResponseMessage به اضافه تغییر در مبلغ انعام است. برای جزئیات بیشتر به تغییرات قیمت در حین ارسال سفارش مراجعه کنید. - اگر پاسخی را با وضعیت سفارش
CREATED
یاCONFIRMED
برگردانید، سفارش و پرداخت را پردازش کنید. - اطمینان حاصل کنید که یک قالب پاسخ معتبر با استفاده از انواع تولید شده ایجاد شده از طرحواره همانطور که در کتابخانه های تولید مشتری توضیح داده شده است، بازگردانده شده است.
- از GoogleProvidedPaymentInstrument استفاده کنید.
instrumentToken
برای پردازش پرداخت. اگر پرداخت قابل پردازش نیست، RejectionInfo را با نوعPAYMENT_DECLINED
بازگردانید. برای جزئیات بیشتر به فرآیند پرداخت ها مراجعه کنید. - بلافاصله پس از پردازش سفارش از طریق ایمیل و یا پیامک به کاربر اطلاع دهید.
پاسخ را برگردانید
- OrderState را تنظیم کنید. اگر خطایی وجود نداشته باشد،
state
بهCREATED
یاCONFIRMED
کنید. - OrderState را تنظیم کنید. در صورت وجود خطا،
state
راREJECTED
و شی RejectionInfo را با RejectionInfoType مربوطه اضافه کنید. - OrderUpdate را تنظیم کنید.
orderManagementActions
.