चेकआउट की प्रोसेस तब शुरू की जाती है, जब कोई उपयोगकर्ता कार्ट बनाता है. उपयोगकर्ता के कार्ट का कॉन्टेंट और ऑर्डर से जुड़ी जानकारी, Google की वेब सेवा के साथ आपके ऑर्डर पर भेजी जाती है. इस जानकारी की पुष्टि आपकी वेब सेवा से की जाती है. इसके बाद, अपनी ज़रूरत के हिसाब से, कार्ट में जाकर आगे बढ़ाया जा सकता है या उसमें बदलाव किया जा सकता है.
आपकी वेब सेवा के लिए चेकआउट हैंडलर को POST अनुरोधों का जवाब देना होगा. जब कोई ग्राहक
चेक आउट करने का विकल्प चुनता है, तो Google, 'Google वेब सर्विस' को 'Google के अनुरोध' को CheckoutRequestMessage
के फ़ॉर्मैट में भेजता है. इसमें ग्राहक के Cart
की जानकारी होती है. इसके बाद, आपकी वेब सेवा CheckoutResponseMessage
जवाब देगी. नीचे दिया गया डायग्राम, प्रोसेस को दिखाता है.
चेकआउट का अनुरोध मिलने पर, 'Google की मदद से की जाने वाली ऑर्डर' की वेब सेवा पर ये काम किए जा सकते हैं:
- सामान की मौजूदा कीमतों, उपलब्धता, और सेवा देने वाली कंपनी के हिसाब से, कार्ट की वैधता की जांच करें.
- कुल कीमत का पता लगाएं (इसमें छूट, टैक्स, और डिलीवरी शुल्क शामिल हैं).
- अगर हो सके, तो बिना बदलाव किए ही कार्ट का जवाब दें.
- पूरे न होने पर, गड़बड़ी के मैसेज और नए सुझाए गए ऑर्डर के साथ जवाब दें.
चेकआउट की प्रोसेस शुरू करने से पहले, हमारा सुझाव है कि आप ग्राहक को आइटम भेजने की खास जानकारी वाले दस्तावेज़ पढ़ें.
चेकआउट का अनुरोध मैसेज
ग्राहक के कार्ट की पुष्टि करने के लिए, जब कोई ग्राहक पैसे चुकाने का विकल्प चुनता है, तो Google आपकी वेब सेवा को CheckoutRequestMessage
के रूप में JSON बॉडी के साथ एक अनुरोध भेजता है. ग्राहक के ऑर्डर को ऑर्डर करने के लिए, Google की मदद से
बाद में सबमिट नहीं किया जाता.
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
}
चेकआउट का जवाब देने का मैसेज
ऑर्डर करने के लिए Google की सेवा इस्तेमाल करने का अनुरोध मिलने के बाद, आपकी चेकआउट वेब सेवा को इसे प्रोसेस करने और CheckoutResponseMessage
के साथ जवाब देने की ज़रूरत होती है. CheckoutResponseMessage
के लिए अनुरोध या तो पूरा हो चुका है या नहीं.
अनुरोध भेजा गया
अगर चेक आउट का अनुरोध पूरा हो जाता है, तो CheckoutResponseMessage
में
ProposedOrder
और
PaymentOptions
शामिल होना चाहिए:
ProposedOrder
cart
:CheckoutRequestMessage
से मिले कार्ट में मौजूदcart
ऑब्जेक्ट. अगर कार्ट के किसी भी कॉन्टेंट को बदलने की ज़रूरत है, तोCheckoutResponseMessage
में सहीProposedOrder
के साथFoodErrorExtension
शामिल होना चाहिए.otherItems
: सेवा देने वाली कंपनी की ओर से जोड़े गए आइटम, जैसे कि डिलीवरी शुल्क, टैक्स, और दूसरे शुल्क. इसमें उपयोगकर्ता की ओर से जोड़ी गई ग्रेच्युटी भी हो सकती है.totalPrice
: ऑर्डर की कुल कीमत.extension
: एकFoodOrderExtension
, जो ऑर्डर के लिए ऑर्डर भेजने के तरीके से जुड़ी जानकारी बताता है, जैसे कि डिलीवरी में लगने वाला समय.
PaymentOptions
- Google Pay सेट अप करें में, बाद में पेमेंट प्रोसेस को सेट अप करने के बारे में जानकारी दी जाएगी.
जब तक आप पैसे चुकाने की प्रक्रिया लागू करने के लिए तैयार नहीं होते, तब तक आप
CheckoutResponseMessage
अपने प्लेसहोल्डर JSON का इस्तेमाल नहीं कर सकते. CheckoutResponseMessage
में प्लेसहोल्डर पेमेंट के विकल्प जोड़ने के लिए, नीचे दिए गए उदाहरण का इस्तेमाल करें. इसमेंPaymentOptions
के लिए उदाहरण पेमेंट गेटवे का इस्तेमाल किया गया है.
- Google Pay सेट अप करें में, बाद में पेमेंट प्रोसेस को सेट अप करने के बारे में जानकारी दी जाएगी.
जब तक आप पैसे चुकाने की प्रक्रिया लागू करने के लिए तैयार नहीं होते, तब तक आप
सफल जवाब का उदाहरण
{
"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."
}
]
}
}
}
]
}
}
}