Google Checkout einrichten

Der Bezahlvorgang wird gestartet, wenn ein Nutzer einen Einkaufswagen erstellt. Der Inhalt der der Warenkorb des Nutzers und Einzelheiten zur Bestellung werden an Ihre End-to-End-Website für Bestellungen gesendet. . Diese Informationen werden von Ihrem Webdienst überprüft. Sie können dann entweder fortfahren oder Anpassungen am Warenkorb nach Bedarf vornehmen.

Der Checkout-Handler für Ihren Webdienst muss auf POST-Anforderungen antworten. Wenn ein Kunde den Kauf abschließt, sendet Google den End-to-End-Webdienst für Bestellungen JSON-Anfragetext im Format CheckoutRequestMessage, der die Details zum Cart eines Kunden Ihr Webdienst antwortet dann mit einem CheckoutResponseMessage Das folgende Diagramm veranschaulicht den Vorgang.

Die CheckoutResponseMessage gibt den unveränderten Warenkorb des Kunden oder eine
Fehler.

Nach Erhalt einer Zahlungsanforderung muss Ihr End-to-End-Webdienst für Bestellungen die folgenden Anforderungen erfüllen: Folgendes:

  • Prüfen Sie die Gültigkeit des Warenkorbs basierend auf den aktuellen Artikelpreisen, der Verfügbarkeit, und Dienstleister.
  • Berechnen des Gesamtpreises (einschließlich aller Rabatte, Steuern und Versandkosten) Gebühren).
  • Wenn der Vorgang erfolgreich war, antworten Sie mit einem unveränderten Einkaufswagen.
  • Wenn der Vorgang nicht erfolgreich ist, geben Sie eine Fehlermeldung und einen neuen Vorschlag für den Auftrag zurück.

Bevor Sie mit der Implementierung des Bezahlvorgangs beginnen, sollten Sie den Abschnitt Auftragsausführung Übersicht Dokumentation.

Nachricht zur Bezahlanfrage

Um den Einkaufswagen des Kunden zu validieren, Google sendet eine Anfrage mit einem JSON-Text in Form eines CheckoutRequestMessage Die Kundenbestellung wird erst später im End-to-End-Ablauf der Bestellung

Daten in einem CheckoutRequestMessage umfasst Folgendes:

  • Intent: Die inputs[0].intent jedes Textes der Checkout-Anfrage das Feld actions.foodordering.intent.CHECKOUT-Stringwert.
  • Einkaufswagen: Das Feld inputs[0].arguments[0].extension einer Zahlungsanfrage enthält ein Cart-Objekt, das den Einkaufswagen des Kunden darstellt.
  • Lieferung oder Essen zum Mitnehmen: Das Erweiterungsfeld des Cart-Objekts enthält ein FoodCartExtension-Objekt, das Eigenschaften für die Übermittlung oder Essen zum Mitnehmen: <ph type="x-smartling-placeholder">
      </ph>
    • Bei Auslieferungsaufträgen enthält das Objekt FoodCartExtension Folgendes: Lieferadresse.
    • Bei Bestellungen zur Abholung oder zum Mitnehmen gilt das FoodCartExtension-Objekt nicht keine Standortinformationen enthalten.
  • Sandbox: Das Feld isInSandbox einer Zahlungsanfrage enthält einen booleschen Wert , der angibt, ob für die Transaktion Sandbox-Zahlungen verwendet werden.

Beispiel für eine Bezahlanfrage

Hier ein Beispiel für ein CheckoutRequestMessage-Objekt:

{
    "user": {},
    "conversation": {
        "conversationId": "CTZbZfUlHCybEdcz_5PB3Ttf"
    },
    "inputs": [
        {
            "intent": "actions.foodordering.intent.CHECKOUT",
            "arguments": [
                {
                    "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.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"
                                    ]
                                }
                            }
                        }
                    }
                }
            ]
        }
    ],
    "directActionOnly": true,
    "isInSandbox": true
}

Checkout-Antwortnachricht

Nachdem Sie eine Anfrage vom End-to-End-Service für Bestellungen erhalten haben, wird Ihre Google Checkout-Website muss der Dienst sie verarbeiten und mit CheckoutResponseMessage antworten. Die CheckoutResponseMessage muss entweder eine erfolgreiche oder fehlgeschlagene

Anfrage erfolgreich

Wenn eine Bezahlanfrage erfolgreich ist, muss CheckoutResponseMessage Folgendes angeben: ProposedOrder und PaymentOptions:

  • ProposedOrder

    • cart: Ein cart-Objekt, das mit dem Einkaufswagen im CheckoutRequestMessage. Wenn Teile des Warenkorbs geändert hat, sollte die CheckoutResponseMessage stattdessen einen FoodErrorExtension mit einem korrigierten ProposedOrder.
    • otherItems: vom Anbieter hinzugefügte Elemente, z. B. Versandkosten Steuern und sonstige Gebühren. Kann auch vom Nutzer hinzugefügte Trinkgelder enthalten.
    • totalPrice: Der Gesamtpreis der Bestellung.
    • extension: Eine FoodOrderExtension, die Informationen zur Auftragsausführung definiert für die Bestellung, wie z. B. die Lieferdauer.
  • PaymentOptions

    • Die Einrichtung der Zahlungsverarbeitung wird später im Abschnitt Google Bezahlen. Sie können Platzhalter-JSON in Ihrem CheckoutResponseMessage verwenden, bis Sie zur Implementierung der Zahlungsabwicklung.
    • So fügen Sie in Ihrem CheckoutResponseMessage Platzhalterzahlungsoptionen hinzu: siehe Beispiel unten, in dem ein Beispiel eines Zahlungs-Gateways für PaymentOptions.

Beispiel für eine erfolgreiche Antwort

{
    "finalResponse": {
        "richResponse": {
            "items": [
                {
                    "structuredResponse": {
                        "checkoutResponse": {
                            "proposedOrder": {
                                "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"
                                                ]
                                            }
                                        }
                                    }
                                },
                                "totalPrice": {
                                    "type": "ESTIMATE",
                                    "amount": {
                                        "currencyCode": "AUD",
                                        "units": "43",
                                        "nanos": 100000000
                                    }
                                },
                                "extension": {
                                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                                    "availableFulfillmentOptions": [
                                        {
                                            "fulfillmentInfo": {
                                                "delivery": {
                                                    "deliveryTimeIso8601": "P0M"
                                                }
                                            }
                                        }
                                    ]
                                },
                                "otherItems": [
                                    {
                                        "name": "Delivery fee",
                                        "price": {
                                            "type": "ESTIMATE",
                                            "amount": {
                                                "currencyCode": "AUD",
                                                "units": "3",
                                                "nanos": 500000000
                                            }
                                        },
                                        "type": "DELIVERY"
                                    }
                                ]
                            },
                            "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\":\"AUD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"43.1\"}} "
                                }
                            },
                            "additionalPaymentOptions": [
                                {
                                    "actionProvidedOptions": {
                                        "paymentType": "ON_FULFILLMENT",
                                        "displayName": "Pay when you get your food.",
                                        "onFulfillmentPaymentData": {
                                            "supportedPaymentOptions": []
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }
}

Anfrage fehlgeschlagen

Wenn eine Zahlungsanforderung fehlschlägt, muss CheckoutResponseMessage Folgendes ausführen: enthalten FoodErrorExtension, das eine Liste mit FoodOrderError Elemente zur Beschreibung der aufgetretenen Fehler. Wenn es eine wiederherstellbare Fehler bei der Bestellung, wie z. B. eine Preisänderung eines Artikels im Warenkorb, FoodErrorExtension muss correctedProposedOrder enthalten.

Beispiel für eine fehlgeschlagene Antwort

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "CLOSED",
                  "description": "The restaurant is closed."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Implementierung des Bezahlvorgangs

Gehen Sie bei der Implementierung des Bezahlvorgangs folgendermaßen vor:

Dienst validieren

Einen FoodOrderError für die erste Dienstfehlerbedingung zurückgeben gefunden. Da diese Fehler nicht behoben werden können, sollte der erste Fehler folgendermaßen aussehen: zurückgegeben. Unter Umgang mit Fehlern finden Sie eine Beschreibung der behebbar sind.

  1. Lesen Sie das Attribut FulfillmentOptionInfo in der Anfrage, um festzustellen, ob der Ausführungstyp für delivery oder pickup ist.
  2. Geben Sie bei Bedarf die folgenden Fehlertypen zurück:

    Fehlertyp Anwendungsfall
    UNGÜLTIG Der Ausführungstyp ist ungültig.
    NOT_FOUND Der Ausführungstyp wurde nicht gefunden.
    GESCHLOSSEN
    • Für den Auftrag gibt es keine OperationHours-Fenster.
    • Bei der Bestellung handelt es sich um eine ASAP-Bestellung und für die aktuelle Zeit sind keine ASAP ServiceHours verfügbar.
    • Ein Notfall wurde geschlossen oder der Dienst isDisabled ist wahr.
    Beachten Sie, dass spezielle Fenster Vorrang vor regulären Fenstern haben. Beispiele finden Sie unter Validierung der Reihenfolge der Fenster und Dienstentitäten vorübergehend entfernen.
    UNAVAILABLE_SLOT Die Bestellung kann nicht im Voraus ausgeführt werden.
    NO_CAPACITY Das Restaurant ist gut besucht und nimmt im Moment keine Bestellungen an.
    OUT_OF_SERVICE_AREA Die Bestellung kann nicht an die Adresse des Nutzers geliefert werden. Ein Beispiel findest du unter Bestätigung der Lieferadresse.
    NO_COURIER_AVAILABLE Die Bestellung kann aufgrund des begrenzten Lieferpersonals nicht geliefert werden.

Warenkorb überprüfen und Preis festlegen

  1. Suche in jedem Warenkorb.lineItems und validiere sie mit den aktuellen Daten in oder im System des Händlers. Die MenuItemOffer.sku-Wert aus der Feedentität ist enthalten. als LineItem.offerId. Erstellen: FoodOrderError für jede Werbebuchung ein, falls erforderlich. Erstellen: maximal einen Fehler pro Artikel. Geben Sie die folgenden Fehlertypen zurück, wenn erforderlich:

    Fehlertyp Anwendungsfall Wiederherstellbar
    UNGÜLTIG Die Artikeldaten oder eine der Optionsdaten sind ungültig. Nein
    NOT_FOUND Das Element oder eine der Optionen wurde nicht gefunden. Nein
    PRICE_CHANGED Der Preis eines Artikels oder einer Add-on-Kombination hat sich geändert. Dieser Fehler wird als behebbar eingestuft. Ja
    AVAILABILITY_CHANGED Der für die Werbebuchungen oder eine der Optionen angeforderte Betrag ist nicht verfügbar. Ja
    REQUIREMENTS_NOT_MET Der Mindest- oder Höchstwert für die Bestellung ist nicht erreicht. Dazu prüfen Sie, ob der Warenkorbpreis unter der Gebühr.eligibleTransactionVolumeMin oder über der GebühreligibleTransactionVolumeMax liegt. Beispiel für die Validierung des Mindestbestellwerts Nein
  2. Geben Sie die validierte Liste der Positionen mit LineItemType zurück. REGULAR Die Summe aller Preise für die Warenkorbposition ist der Warenkorbpreis oder SUBTOTAL

Beispiele finden Sie unter Validierung von Warenkorbelementen.

Servicegebühren berechnen

  1. Suchen Sie die richtige Fee-Entität für den Dienst anhand der eligibleRegion, validFrom, validThrough und priority.
  2. Berechnen Sie den Gebührenbetrag abhängig davon, ob die Entität mit einer price definiert wurde, percentageOfCart- oder pricePerMeter-Property.
  3. Servicegebühr für Lieferung oder Abholung als LineItem mit LineItemType DELIVERY bzw. FEE. Gebühr hinzufügen in den Einkaufswagen.otherItems.

Angebote anwenden

  1. Suchen Sie die Entität Deal anhand der Promotion.coupon mit dem Deal.dealCode.
  2. Validieren Sie den Deal und geben Sie bei Bedarf einen FoodOrderError zurück. Diese Fehler werden als behebbar eingestuft. Folgende Fehlertypen zurückgeben Bei Bedarf:

    Fehlertyp Anwendungsfall
    PROMO_NOT_RECOGNIZED Der Gutscheincode wurde nicht erkannt.
    PROMO_EXPIRED Die Gültigkeit des Angebots ist abgelaufen.
    PROMO_ORDER_INELIGIBLE Für diese Bestellung kann der Gutschein nicht eingelöst werden.
    PROMO_NOT_APPLICABLE Andere Gründe.
  3. Berechnen Sie den Dealpreis basierend auf dem Deal.discount oder DealdiscountPercentage.

  4. Wenden Sie den Dealpreis anhand des Gesamtbetrags des Einkaufswagens oder der Gebühr an, je nachdem, DealdealType.

  5. Gib den Einkaufswagen.promotions mit dem angewendeten Angebot zurück.

  6. Geben Sie das Angebot als LineItem mit LineItemType DISCOUNT Fügen Sie den Rabatt zur Einkaufswagen.otherItems mit einem negativen Preis.

Antwort zurückgeben

  1. Erstellen Sie den ProposedOrder.cart Der Antworteinkaufswagen ist der entsprechen dem Warenkorb für Anfragen, wenn während der Validierung keine Fehler festgestellt werden.
  2. Gibt die Liste ProposedOrder.otherItems mit dem Steuern, Gebühren, Trinkgeld und Ermäßigung. Siehe Gratuity für Weitere Informationen zur Konfiguration des Trinkgeldartikels finden Sie hier.
  3. Fügen Sie den ProposedOrdertotalPrice ein, indem Sie den Einkaufswagen hinzufügen. Preis, Gebühren, Rabatt, Steuern und Trinkgeld.
  4. Geben Sie den FoodOrderExtension.availableFulfillmentOptions mit die entsprechende FulfillmentOption. Geschätzten Wert aktualisieren Abhol- oder Lieferzeit bis zur voraussichtlichen Zeit.
  5. Wenn FoodOrderErrors durch die vorherigen Validierungsprüfungen generiert wurden: <ph type="x-smartling-placeholder">
      </ph>
    • Fügen Sie StructuredResponse.error und die Liste der Fehler in FoodErrorExtension.foodOrderErrors.
    • Geben Sie ProposedOrder im correctedProposedOrder, wenn alle Fehler behoben werden können.
    • Geben Sie die PaymentOptions in der paymentOptions zurück. wenn alle Fehler behoben werden können.
    • Fügen Sie optional additionalPaymentOptions hinzu, falls weitere Zahlungsoptionen und alle Fehler können behoben werden.
  6. Wenn keine Validierungsfehler vorliegen, wird proposedOrder zurückgegeben. paymentOptions im CheckoutResponse-Objekt Fügen Sie optional additionalPaymentOptions hinzu, falls weitere Zahlungsoptionen zur Verfügung.