चेकआउट सेट अप करें

जब कोई उपयोगकर्ता कार्ट बनाता है, तब चेकआउट प्रोसेस शुरू हो जाती है. इसका कॉन्टेंट उपयोगकर्ता का कार्ट और ऑर्डर का ब्यौरा आपके ऑर्डर के एंड-टू-एंड वेब पर भेजा जाता है सेवा. आपकी वेब सेवा इस जानकारी की पुष्टि करती है. इसके बाद, आपके पास ये काम करने का विकल्प होता है आगे बढ़ सकते हैं या ज़रूरत के हिसाब से उनके कार्ट में बदलाव कर सकते हैं.

आपकी वेब सेवा के लिए चेकआउट हैंडलर को पोस्ट अनुरोधों का जवाब देना चाहिए. जब ग्राहक चेक आउट करना चुनता है, तो Google ऑर्डरिंग एंड-टू-एंड वेब सेवा JSON के अनुरोध का मुख्य हिस्सा, CheckoutRequestMessage के तौर पर होता है. इसमें यह शामिल होता है ग्राहक की Cart की जानकारी. इसके बाद, आपकी वेब सेवा जवाब देने के लिए CheckoutResponseMessage. नीचे दिया गया डायग्राम, प्रोसेस को दिखाता है.

CheckoutResponseMessage ग्राहक का असंशोधित कार्ट या
गड़बड़ी.

चेकआउट का अनुरोध मिलने पर, ऑर्डर करने वाली पूरी वेब सेवा को निम्न:

  • आइटम की मौजूदा कीमतों, खरीदारी के लिए उपलब्धता, और सेवा देने वाली कंपनी.
  • कुल कीमत का हिसाब लगाएं (इसमें सभी छूट, टैक्स, और डिलीवरी शामिल हैं) शुल्क).
  • अगर यह विकल्प सफल होता है, तो कार्ट में बदलाव करके जवाब दें.
  • अगर विफल हो, तो एक त्रुटि संदेश और एक नए प्रस्तावित आदेश के साथ जवाब दें.

चेकआउट की प्रोसेस शुरू करने से पहले, हमारा सुझाव है कि आप ग्राहक को आइटम भेजने की प्रक्रिया, खास जानकारी दस्तावेज़.

चेकआउट के अनुरोध का मैसेज

खरीदार के कार्ट की पुष्टि करने के लिए, जब कोई खरीदार चेक आउट करने का विकल्प चुनता है, तो Google, आपकी वेब सेवा को JSON बॉडी के साथ अनुरोध इस तरह भेजता है: CheckoutRequestMessage. ग्राहक का ऑर्डर इस अवधि के बाद तक सबमिट नहीं किया जाता: सीधे खाना ऑर्डर करने की सुविधा.

इसमें शामिल डेटा: CheckoutRequestMessage इसमें ये शामिल हैं:

  • इंटेंट: inputs[0].intent हर चेकआउट अनुरोध के मुख्य हिस्से के फ़ील्ड में actions.foodordering.intent.CHECKOUT स्ट्रिंग की वैल्यू.
  • कार्ट: चेकआउट के अनुरोध का inputs[0].arguments[0].extension फ़ील्ड ग्राहक के कार्ट को दिखाने वाला एक Cart ऑब्जेक्ट मौजूद है.
  • डिलीवरी या टेकआउट: Cart ऑब्जेक्ट के एक्सटेंशन फ़ील्ड में FoodCartExtension ऑब्जेक्ट जो डिलीवरी के लिए प्रॉपर्टी के बारे में बताता है या उपयोगकर्ता का डेटा एक्सपोर्ट करने की सुविधा:
    • डिलीवरी ऑर्डर के लिए, FoodCartExtension ऑब्जेक्ट में यह शामिल होता है डिलीवरी का पता.
    • पिकअप या टेकआउट के ऑर्डर के लिए, FoodCartExtension ऑब्जेक्ट ये काम नहीं करता उसमें जगह की कोई जानकारी शामिल न हो.
  • सैंडबॉक्स: चेकआउट के अनुरोध के isInSandbox फ़ील्ड में एक बूलियन है वह वैल्यू जिससे पता चलता है कि लेन-देन में सैंडबॉक्स पेमेंट का इस्तेमाल किया गया है या नहीं.

चेकआउट के अनुरोध का उदाहरण

यहां CheckoutRequestMessage का एक उदाहरण दिया गया है:

{
    "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
}

चेकआउट का जवाब देने के लिए मैसेज

सीधे खाना ऑर्डर करने की सेवा से अनुरोध मिलने के बाद, आपके चेकआउट वेब पर सेवा को इसे प्रोसेस करना होगा और CheckoutResponseMessage की मदद से जवाब देना होगा. कॉन्टेंट बनाने CheckoutResponseMessage में, सफल या असफल, दोनों में से किसी एक को शामिल किया जाना चाहिए अनुरोध.

अनुरोध सफल रहा

अगर चेक आउट करने का अनुरोध पूरा होता है, तो CheckoutResponseMessage में यह ज़रूरी है ProposedOrder और PaymentOptions:

  • ProposedOrder

    • cart: इसमें दिए गए कार्ट से मिलता-जुलता cart ऑब्जेक्ट CheckoutRequestMessage. अगर कार्ट की किसी भी सामग्री को बदला गया है, तो CheckoutResponseMessage में इसके बजाय एक FoodErrorExtension और ProposedOrder को सही किया गया.
    • otherItems: सेवा देने वाली कंपनी की ओर से जोड़े गए आइटम, जैसे कि डिलीवरी के शुल्क, टैक्स, और अन्य शुल्क. इसमें उपयोगकर्ता की जोड़ी गई ग्रेच्यूटी भी शामिल हो सकती है.
    • totalPrice: ऑर्डर की कुल कीमत.
    • extension: FoodOrderExtension, जो ग्राहक को आइटम भेजने की जानकारी देता है ऑर्डर के लिए, जैसे कि डिलीवरी में लगने वाला समय.
  • PaymentOptions

    • पेमेंट प्रोसेस करने की सुविधा सेट अप करने की सुविधा, बाद में 'Google सेट अप करें' सेक्शन में दी गई है पैसे चुकाएं. CheckoutResponseMessage में प्लेसहोल्डर JSON का इस्तेमाल तब तक किया जा सकता है, जब तक: जो पैसे चुकाने की प्रोसेस लागू करने के लिए तैयार है.
    • अपने CheckoutResponseMessage में प्लेसहोल्डर से पेमेंट पाने के विकल्प जोड़ने के लिए, नीचे दिया गया उदाहरण देखें, जिसमें PaymentOptions के लिए पेमेंट गेटवे का उदाहरण.

सही जवाब का उदाहरण

{
    "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": []
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }
}

अनुरोध पूरा नहीं किया जा सका

अगर चेकआउट का अनुरोध पूरा नहीं होता है, तो CheckoutResponseMessage को यह करना होगा FoodErrorExtension को शामिल करें, जिसमें FoodOrderError आइटम जो किसी भी तरह की गड़बड़ी के बारे में बताते हैं. अगर कोई ऐसी समस्या है जिसे ठीक किया जा सकता है ऑर्डर में कोई गड़बड़ी हो सकती है, जैसे कि कार्ट में मौजूद किसी आइटम की कीमत में बदलाव होना, FoodErrorExtension में correctedProposedOrder शामिल होना चाहिए.

पूरे न हो पाने वाले जवाब का उदाहरण

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

चेकआउट की प्रोसेस लागू करना

चेकआउट करते समय, यह तरीका अपनाएं.

सेवा की पुष्टि करें

सेवा की पहली गड़बड़ी की स्थिति के लिए, FoodOrderError दिखाना मिल गया. इन गड़बड़ियों को ठीक नहीं किया जा सकता, इसलिए पहली गड़बड़ी को यह होना चाहिए वापस किया गया. इसके बारे में जानकारी पाने के लिए, गड़बड़ियां ठीक करना देखें ठीक की जा सकने वाली गड़बड़ियां.

  1. इसमें FulfillmentOptionInfo प्रॉपर्टी पढ़ें यह तय करने का अनुरोध करें कि ग्राहक को आइटम भेजने का तरीका delivery है या pickup.
  2. ज़रूरत पड़ने पर, इस तरह की गड़बड़ी दिखाएं:

    गड़बड़ी का टाइप इस्तेमाल का उदाहरण
    अमान्य ग्राहक को आइटम भेजने का टाइप अमान्य है.
    NOT_FOUND ग्राहक को आइटम भेजने का टाइप नहीं मिला.
    बंद है
    • ऑर्डर के लिए कोई OperationHours विंडो नहीं है.
    • यह ऑर्डर जल्द से जल्द दिया जा रहा है. साथ ही, इस समय के लिए, जल्द से जल्द ServiceHours उपलब्ध नहीं हैं.
    • आपातकाल में बंद है या सेवा isDisabled सही है.
    ध्यान दें कि सामान्य विंडो के मुकाबले खास विंडो को प्राथमिकता दी जाती है. विंडो की पुष्टि करने के क्रम में उदाहरण देखें और सेवा इकाइयों को कुछ समय के लिए हटाएं.
    UNAVAILABLE_SLOT पहले से किया गया ऑर्डर पूरा नहीं किया जा सकता.
    NO_CAPACITY रेस्टोरेंट व्यस्त है और फ़िलहाल ऑर्डर नहीं ले रहा है.
    OUT_OF_SERVICE_AREA ऑर्डर, उपयोगकर्ता के पते पर डिलीवर नहीं किया जा सकता. उदाहरण के लिए डिलीवरी के पते की पुष्टि करना देखें.
    NO_COURIER_AVAILABLE डिलीवरी कर्मचारी की संख्या सीमित होने की वजह से, ऑर्डर डिलीवर नहीं किया जा सका.

पुष्टि करें और कार्ट की कीमत डालें

  1. हर कार्ट को खोजें.lineItems और व्यापारी/कंपनी/कारोबारी के सिस्टम में मौजूद है या नहीं. कॉन्टेंट बनाने MenuItemOffer.फ़ीड इकाई से sku वैल्यू शामिल की गई है जैसे कि LineItem.offerId. किसी प्रॉडक्ट की पिच के लिए अगर ज़रूरी हो, तो हर लाइन आइटम के लिए FoodOrderError. किसी प्रॉडक्ट की पिच के लिए हर आइटम के लिए ज़्यादा से ज़्यादा एक गड़बड़ी होनी चाहिए. गड़बड़ी के ये टाइप तब दिखाएं, जब ज़रूरी है:

    गड़बड़ी का टाइप इस्तेमाल का उदाहरण रिकवर किया जा सकता है
    अमान्य आइटम डेटा या कोई भी विकल्प डेटा अमान्य है. नहीं
    NOT_FOUND आइटम या कोई विकल्प नहीं मिला. नहीं
    PRICE_CHANGED किसी आइटम या ऐड-ऑन के कॉम्बिनेशन की कीमत बदल गई है. इस गड़बड़ी को ठीक किया जा सकता है. हां
    AVAILABILITY_CHANGED लाइन आइटम या किसी भी विकल्प के लिए अनुरोध की गई रकम उपलब्ध नहीं है. हां
    REQUIREMENTS_NOT_MET ऑर्डर की कम से कम या ज़्यादा से ज़्यादा सीमा पूरी नहीं हुई. इसका पता लगाने के लिए, यह देखें कि कार्ट की कीमत शुल्क.eligibleTransactionVolumeMin से कम है या शुल्क से ज़्यादा है.eligibleTransactionVolumeMax. ऑर्डर की कम से कम वैल्यू की पुष्टि में इसका उदाहरण देखें. नहीं
  2. LineItemType के साथ LineItem की पुष्टि की गई सूची दिखाएं REGULAR. कार्ट के सभी लाइन आइटम की कीमतों का योग, कार्ट की कीमत या SUBTOTAL.

कार्ट आइटम की पुष्टि करने वाले लेख में उदाहरण देखें.

सेवा शुल्क का हिसाब लगाएं

  1. आपको जिस सेवा के लिए शुल्क देना है उसकी सही इकाई चुनें. eligibleRegion, validFrom, validThrough, और priority.
  2. इकाई की पहचान price से की गई है या नहीं, इसके आधार पर शुल्क की रकम कैलकुलेट करें percentageOfCart या pricePerMeter प्रॉपर्टी.
  3. डिलीवरी या टेकआउट सेवा शुल्क को LineItem के तौर पर लौटाएं LineItemType DELIVERY या FEE. शुल्क जोड़ें कार्ट.otherItems सूची में.

प्रमोशन लागू करें

  1. वैल्यू के हिसाब से डील वाली इकाई ढूंढें ऑफ़र के साथ प्रमोशन.coupon वैल्यू.dealCode.
  2. डील की पुष्टि करें और ज़रूरत पड़ने पर, FoodOrderError वापस करें. इन गड़बड़ियों को ठीक किया जा सकता है. इस तरह की गड़बड़ी दिखाएं अगर ज़रूरत हो:

    गड़बड़ी का टाइप इस्तेमाल का उदाहरण
    PROMO_NOT_RECOGNIZED कूपन कोड की पहचान नहीं हो पाई.
    PROMO_EXPIRED डील की समयसीमा खत्म हो गई है.
    PROMO_ORDER_INELIGIBLE आदेश कूपन के लिए योग्य नहीं है.
    PROMO_NOT_APPLICABLE कोई अन्य वजह.
  3. डील के हिसाब से डील की कीमत का हिसाब लगाएं.discount या ऑफ़र.discountPercentage.

  4. इस आधार पर कार्ट की कुल कीमत या कुल शुल्क का इस्तेमाल करके, डील की कीमत की रकम लागू करें ऑफ़र.dealType.

  5. लागू प्रमोशन के साथ कार्ट.promotions लौटाएं.

  6. प्रमोशन को LineItem के तौर पर दिखाएं LineItemType DISCOUNT. छूट को कार्ट.otherItems की सूची में प्रॉडक्ट की कीमत नेगेटिव होनी चाहिए.

जवाब दें

  1. ProposedOrder बनाएं.cart, जवाब देने वाला कार्ट इसे अनुरोध कार्ट में डालें. ऐसा तब करें, जब पुष्टि के दौरान कोई गड़बड़ी न हो.
  2. ProposedOrder.otherItems सूची दें. इसमें ये चीज़ें भी शामिल हैं अगर लागू हो, तो टैक्स, शुल्क, ग्रेच्यूटी, और छूट. Gratuity के बारे में यहां देखें ग्रेच्यूटी आइटम को कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानकारी देखें.
  3. कार्ट जोड़कर ProposedOrder.totalPrice शामिल करें कीमत, शुल्क, छूट, टैक्स, और ग्रेच्यूटी.
  4. वापस जाएँ FoodOrderExtension.availableFulfillmentOptions के साथ संबंधित FulfillmentOption को अपनाएं. अनुमानित कीमत अपडेट करें पिक अप या डिलीवरी में लगने वाला समय, अनुमानित समय तक.
  5. अगर पुष्टि की पिछली जांचों से, FoodOrderErrors जनरेट होती हैं:
    • StructuredResponse.error और सूची FoodErrorExtension में गड़बड़ियां.foodOrderErrors.
    • इस आइटम में ProposedOrder वापस करें अगर सभी गड़बड़ियों को ठीक किया जा सकता है, तो correctedProposedOrder फ़ील्ड.
    • paymentOptions में PaymentOptions वापस करें फ़ील्ड को खाली छोड़ दें.
    • विकल्प के तौर पर, अगर additionalPaymentOptions शामिल है, तो उसे भी शामिल करें पेमेंट के विकल्प उपलब्ध हैं और सभी गड़बड़ियों को ठीक किया जा सकता है.
  6. अगर पुष्टि करने से जुड़ी कोई गड़बड़ी नहीं दिखती है, तो proposedOrder, CheckoutResponse ऑब्जेक्ट में paymentOptions. विकल्प के तौर पर, अगर additionalPaymentOptions शामिल है, तो उसे भी शामिल करें भुगतान विकल्प उपलब्ध हैं.