Nach dem Bezahlvorgang Anruf, die Nutzenden den aktualisierten Warenkorb mit Steuern, Versandkosten, Rabatten andere Belastungen, die Sie zurücksenden. Der Nutzer bestätigt und sendet die Bestellung und Google sendet an Ihren Auftragsausführungsendpunkt eine JSON-Anfrage, die den Informationen zur Bestellung. Ihr Webdienst muss diese Bestellung erhalten, verarbeiten, und Google mit dem Status der Bestellung antworten.
In diesem Abschnitt wird das von Google gesendete Nachrichtenformat für Bestellanfragen beschrieben.
mit dem Namen SubmitOrderRequestMessage
und das Format der Antwortnachricht
die Sie angeben müssen,
SubmitOrderResponseMessage
Weitere Informationen zum Lebenszyklus der Auftragsabwicklung findest du in der
Übersicht zur Auftragsausführung:
Auftragsabwicklung implementieren
Der End-to-End-Webdienst für Bestellungen, den Sie für die Funktion „Ordering End-to-End“ erstellen, muss
einen URL-Endpunkt für den Empfang von Bestellnachrichten von Google enthalten. Für Bestellung
verarbeitet, erhält Ihr Webdienst eine SubmitOrderRequestMessage
im JSON-Format
als POST-Anfrage von Google formatieren. Diese Anfrage enthält eine Kundenbestellung,
einschließlich Steuern, Gebühren und Zahlungsinformationen. Bei Erhalt einer Bestellung
muss Ihr Webdienst folgende Voraussetzungen erfüllen:
- Prüfe die Voraussetzungen für Transaktionen, z. B. Kartenbestätigung oder Betrugserkennung.
- Erstellen Sie einen Auftrag in Ihrem System.
- Autorisieren Sie die Zahlungsmethode und rufen Sie gegebenenfalls die Charge API Ihres Zahlungsabwicklers auf.
- Antworten Sie mit dem entsprechenden Status der Bestellung:
CREATED
,CONFIRMED
oderREJECTED
.
Nach der Bearbeitung der Bestellung muss der Auftragsausführungscode eine Antwort enthalten
in Form einer SubmitOrderResponseMessage
-JSON-Nachricht an Google zurück.
Weitere Informationen zum Webdienst für die End-to-End-Auftragsausführung für Bestellungen Implementierungsanforderungen finden Sie in der Übersicht zur Auftragsausführung.
Nachricht zur Bestellanfrage
Wenn ein Kunde während des End-to-End-Bestellvorgangs eine Bestellung aufgibt,
Google sendet eine Anfrage mit einer JSON-Nachricht an Ihren Webdienst,
SubmitOrderRequestMessage
mit den folgenden Daten:
- Intent: Das Feld
inputs[0].intent
im Text jeder Bestellanfrage enthält den Stringwertactions.intent.TRANSACTION_DECISION
. - Reihenfolge:Das Feld
inputs[0].arguments[0].transactionDecisionValue
einer Anfrage zum Senden einer Bestellung enthält einOrder
-Objekt, das den auf die Bestellung des Kunden und die Zahlungsdetails. - Sandbox-Flag: Im Feld
isInSandbox
einer Anfrage zur Übermittlung einer Bestellung wird angegeben, Gibt an, ob für die Transaktion Sandbox-Zahlungen verwendet werden.
Beispiel für eine Bestellanfrage
Folgendes ist ein SubmitOrderRequestMessage
-Beispiel.
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 }
Bestellantwortnachricht
Nach Erhalt einer Anfrage verarbeitet Ihr End-to-End-Webdienst für Bestellungen die
und sendet eine SubmitOrderResponseMessage
zurück, die den Parameter
folgende Daten:
OrderUpdate
: Ein Objekt, das den Status der Bestellung und alle Aktionen nach der Bestellung, die dem Nutzer zur Verfügung stehen, wie etwa die Kontaktaufnahme mit dem Support und Bestelldetails anzeigen, die Sie in den FeldfinalResponse.richResponse.items[0].structuredResponse.orderUpdate
von auf die Antwort.
Feld zur Aktualisierung der Bestellung
Wenn Ihr Webdienst ein SubmitOrderResponseMessage
sendet, enthält es ein
OrderUpdate
mit den folgenden Feldern:
actionOrderId
: Die eindeutige ID der Bestellung, die für die Bestellung in Ihrem System identifizieren und darauf verweisen, wenn Sie zu aktualisieren.orderState
: EinOrderState
-Objekt, das den Status der Bestellung darstellt.orderManagementActions
: Aktionen für die Nachbestellung, die dem Nutzer zur Verfügung stehen, z. B. z. B. den Kundensupport kontaktieren und die Bestelldetails einsehen.totalPrice
: Der Gesamtpreis der Bestellung. Dies ist optional. Nur senden wenn sich der Gesamtpreis der Bestellung nach dem Absenden der Bestellung geändert hat.
Eine Bestellung kann einen der folgenden Status haben:
CREATED
: Die Bestellung wurde von Ihrem Endpunkt für die Auftragsausführung verarbeitet, aber der Dienstleister hat die Bestellung noch nicht bestätigt.CONFIRMED
: Die Bestellung wurde von Ihrem Endpunkt für die Auftragsausführung verarbeitet, und der Dienstleister die Bestellung bestätigt hat.REJECTED
: Ein Problem ist aufgetreten und der Endpunkt für die Auftragsausführung konnte nicht Auftrag erstellen oder bestätigen, was Zahlungsprobleme umfassen kann.
Wenn Sie eine Bestellung auf den Status REJECTED
setzen, geben Sie den Grund in der
Feld rejectionInfo
von OrderUpdate
. Verwenden Sie
FoodOrderUpdateExtension.FoodOrderErrors
-Werte in Verbindung mit
rejectionInfo
vom Typ UNKNOWN
und geben Sie eine Beschreibung an.
Beispiel für eine Bestellantwort
Folgendes ist ein SubmitOrderResponseMessage
-Beispiel.
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" } } } } ] } } }
Anfrage fehlgeschlagen
Wenn eine Anfrage nicht erfolgreich ist, muss SubmitOrderResponseMessage
Folgendes festlegen:
OrderState.state
zu REJECTED
. Die Antwort muss auch
Fügen Sie die RejectionInfo hinzu, die ein RejectionType
-Objekt enthalten.
zur Beschreibung des Fehlertyps.
Beispiel für eine fehlgeschlagene Antwort
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" } } } ] } } } ] } } }
Auftragsimplementierung einreichen
Gehen Sie bei der Implementierung der API zum Senden von Bestellungen so vor:
Validierung
- Führen Sie die Service-, Warenkorb- und Angebotsprüfung wie unter Einrichtung Kasse.
- Geben Sie RejectionInfo mit einem der folgenden Typen zurück, wenn erforderlich:
RejectionInfoType | Anwendungsfall |
---|---|
UNAVAILABLE_SLOT |
Die Auftragsausführungszeit ist nicht mehr gültig. |
PROMO_USER_INELIGIBLE |
Verwenden Sie die E-Mail-Adresse im Objekt Contact in der Anfrage, um zu prüfen, ob der Nutzer das Angebot nutzen darf. Ein Beispiel finden Sie unter „Bestellung mit Angeboten senden“ implementieren. |
INELIGIBLE |
|
PAYMENT_DECLINED |
Die Zahlung kann nicht verarbeitet werden. Das könnte beispielsweise an unzureichenden Mitteln liegen. |
UNKNOWN |
Bei allen anderen Validierungsfehlern. |
Setze OrderState.state
auf REJECTED
, wenn eine Validierung vorhanden ist.
Fehler aufgetreten. Optional können Sie einen spezifischen Grund für die Ablehnung angeben.
FoodOrderUpdateExtension.foodOrderErrors
. Beispiele finden Sie unter
Bestellbestätigung senden
Zahlung bearbeiten
- Berechnen Sie den
totalPrice
, indem Sie den Warenkorbpreis, Gebühren, Rabatt, Steuern und Trinkgeld.totalPrice
sollte mit der zurückgegebenentotalPrice
übereinstimmen. in der CheckoutResponseMessage sowie die Änderung der den Trinkgeldbetrag, wenn dieser vom Nutzer geändert werden kann. Siehe Preis sich während des Bestellvorgangs ändert. - Verarbeitung der Bestellung und Zahlung, wenn du eine Antwort mit einem Bestellstatus zurückgibst
von
CREATED
oderCONFIRMED
. - Achten Sie darauf, dass ein gültiges Antwortformat zurückgegeben wird, indem Sie generierte Typen verwenden aus dem Schema erstellt, wie in Clientbibliotheken generieren.
- Verwenden Sie die Methode
GoogleProvidedPaymentInstrument.
instrumentToken
um die Zahlung zu verarbeiten. RejectionInfo mit Typ zurückgebenPAYMENT_DECLINED
, wenn die Zahlung nicht verarbeitet werden kann. Siehe Prozess Zahlungen. - Benachrichtigen Sie den Nutzer sofort nach der Verarbeitung der Bestellung per E-Mail und oder SMS.
Antwort zurückgeben
- Setze OrderState.
state
aufCREATED
oderCONFIRMED
, wenn dass es keine Fehler gibt. - Setze OrderState.
state
aufREJECTED
, wenn Fehler vorhanden sind. und fügen Sie das RejectionInfo-Objekt mit der entsprechenden RejectionInfoType. - Legen Sie OrderUpdate.
orderManagementActions
fest.