Ödemeden sonra arayın, Kullanıcı güncellenmiş alışveriş sepetini vergiler, teslimat ücretleri, indirimler ve başka ücretler de alabilirsiniz. Kullanıcı siparişi onaylayıp gönderir ve Google, sipariş karşılama uç noktanıza şunu içeren bir JSON isteği gönderir: sipariş bilgileri. Web hizmetiniz bu siparişi almalı, işlemelidir, ve Google'a siparişin durumunu bildirir.
Bu bölümde, Google tarafından gönderilen sipariş isteği mesajı biçimi açıklanmaktadır.
yanıt iletisinin biçimini ve SubmitOrderRequestMessage
adı verilen
SubmitOrderResponseMessage
Sipariş karşılama yaşam döngüsü hakkında daha fazla bilgi için
Sipariş karşılamaya genel bakış.
Sipariş karşılama uygulaması
Uçtan Uca Sipariş ile çalışmak için oluşturduğunuz Siparişin Uçtan Uca web hizmeti,
Google'dan sipariş mesajları almak için bir URL uç noktası ekleyin. Sipariş için
işleme alındığında web hizmetiniz JSON biçiminde bir SubmitOrderRequestMessage
alır
biçimini Google'dan POST isteği olarak gönderebilirsiniz. Bu istek bir müşteri siparişi içeriyor
(vergiler, ücretler ve ödeme bilgileri dahil) Bir sipariş gönderildiğinde
isteğinde bulunmak için web hizmetinizin aşağıdakileri yapması gerekir:
- Kart doğrulama veya sahtekarlık tespiti gibi işlemlerin uygunluğunu kontrol edin.
- Sisteminizde bir sipariş oluşturun.
- Ödeme yöntemini yetkilendirin ve geçerli olduğunda ödeme işleyicinizin ödeme API'sini çağırın.
- Siparişin uygun durumuyla yanıt verin:
CREATED
,CONFIRMED
veyaREJECTED
.
Sipariş işlendikten sonra, sipariş karşılama kodunuzun yanıt vermesi gerekir
SubmitOrderResponseMessage
JSON mesajı biçimindedir.
Uçtan uca sipariş karşılama web hizmeti hakkında daha fazla bilgi uygulama şartları için Sipariş karşılamaya genel bakış bölümüne bakın.
Sipariş isteği mesajı
Bir müşteri Uçtan Uca Sipariş akışı sırasında sipariş vermeyi seçtiğinde
Google, web hizmetinize
Aşağıdaki verileri içeren SubmitOrderRequestMessage
:
- Amaç: Her sipariş gönderme isteğinin gövdesinin
inputs[0].intent
alanıactions.intent.TRANSACTION_DECISION
dize değerini içerir. - Sipariş: Bir verinin
inputs[0].arguments[0].transactionDecisionValue
alanı sipariş isteği, şunu temsil eden birOrder
nesnesi içeriyor: siparişinin verilebilmesini sağlar ve ödeme ayrıntılarıyla birlikte. - Korumalı alan işareti: Sipariş gönderme isteğinin
isInSandbox
alanında, İşlemin korumalı alan ödemelerini kullanıp kullanmadığı.
Sipariş isteği örneği
Aşağıda örnek bir SubmitOrderRequestMessage
verilmiştir:
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 }
Sipariş yanıtı mesajı
Bir istek aldıktan sonra, Sipariş Uçtan Uca web hizmetiniz
isteği gönderir ve aşağıdakileri içeren bir SubmitOrderResponseMessage
geri gönderir:
aşağıdaki veriler:
OrderUpdate
: Siparişin durumunu içeren bir nesne ve herhangi bir kullanıcının kullanabildiği sipariş sonrası işlemler (ör. destek ekibiyle iletişime geçme sipariş ayrıntılarını görüntülemenizi sağlar.finalResponse.richResponse.items[0].structuredResponse.orderUpdate
alanı yanıt verelim.
Sipariş güncelleme alanı
Web hizmetiniz bir SubmitOrderResponseMessage
gönderdiğinde,
Aşağıdaki alanları içeren OrderUpdate
alanı:
actionOrderId
: Siparişin benzersiz bir şekilde kullanılması için kullanılan benzersiz kimliği siparişi sisteminizde tanımlamalı ve daha sonraki gönderimlerde sipariş güncellemeleri.orderState
: Siparişin durumunu temsil eden birOrderState
nesnesi.orderManagementActions
: Kullanıcının kullanabileceği sipariş sonrası işlemleri. Örneğin, müşteri desteğiyle iletişim kurmak ve sipariş ayrıntılarını görüntülemek gibi.totalPrice
: Siparişin toplam fiyatı. Bu işlem isteğe bağlıdır. Yalnızca gönder Sipariş gönderildikten sonra siparişin toplam fiyatı değişirse.
Sipariş, aşağıdaki durumlardan birinde olabilir:
CREATED
: Sipariş karşılama uç noktanız siparişi başarıyla işledi. ancak sağlayıcı siparişi henüz onaylamadı.CONFIRMED
: Sipariş karşılama uç noktanız siparişi başarıyla işledi. ve sağlayıcı siparişi onayladı.REJECTED
: Bir sorun oluştu ve sipariş karşılama uç noktanız tamamlanamadı Ödemeyle ilgili sorunlar içerebilecek olan siparişi oluşturma veya onaylama.
Bir siparişi REJECTED
durumuna ayarlarsanız bunun nedenini
OrderUpdate
öğesinin rejectionInfo
alanı. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Şununla birlikte FoodOrderUpdateExtension.FoodOrderErrors
değerleri:
UNKNOWN
türünde rejectionInfo
ve bir açıklama girin.
Sipariş yanıtı örneği
Aşağıda örnek bir SubmitOrderResponseMessage
verilmiştir:
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" } } } } ] } } }
Başarısız istek
Gönderme isteği başarısız olursa SubmitOrderResponseMessage
şunları ayarlamalıdır:
OrderState.state
değerini REJECTED
olarak değiştirin. Yanıtta ayrıca
bir RejectionType
içeren RejectionInfo değerini de içermelidir.
nesnesini tanımlayın.
Başarısız yanıt örneği
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" } } } ] } } } ] } } }
Sipariş uygulamasını gönderme
Sipariş gönderme API'si uygulanırken aşağıdaki adımlar uygulanmalıdır.
Doğrulama
- Kurulumda yaptığınız gibi hizmet, alışveriş sepeti ve promosyon doğrulamalarını yapın. Ödeme.
- Aşağıdaki durumlardan biriyle birlikte RejectionInfo değerini döndürün gerekli:
RejectionInfoType | Kullanım alanı |
---|---|
UNAVAILABLE_SLOT |
Sipariş karşılama zamanı artık geçerli değil. |
PROMO_USER_INELIGIBLE |
Kullanıcı için promosyon uygunluğunu doğrulamak üzere istekteki Contact nesnesindeki E-posta adresini kullanın. Promosyonlarla sipariş gönderme özelliğini uygulama bölümündeki örneğe bakın. |
INELIGIBLE |
|
PAYMENT_DECLINED |
Ödeme işlenemiyor. Örneğin, bu durum yetersiz bakiyeden kaynaklanıyor olabilir. |
UNKNOWN |
Diğer doğrulama hataları için. |
Doğrulama varsa OrderState.state
değerini REJECTED
olarak ayarlayın.
hata ile karşılaşıldı. İsteğe bağlı olarak, özel bir ret nedeni belirtebilirsiniz.
FoodOrderUpdateExtension öğesini kullanın.foodOrderErrors
. Örnekleri şurada inceleyin:
Sipariş doğrulamasını gönderin.
Ödemeyi işleme koyun
- Alışveriş sepeti fiyatını, ücretleri, indirimi, vergileri ve
totalPrice
bahşiş.totalPrice
, döndürülentotalPrice
ile aynı olmalıdır CheckoutResponseMessage'daki değişikliklerin yanı sıra bahşiş, kullanıcı tarafından değiştirilebilirse bahşiş tutarı. Fiyata Bakın değişiklikleri hakkında daha fazla bilgi edinin. - Sipariş durumu içeren bir yanıt döndürürseniz siparişi ve ödemeyi işleme alabilirsiniz.
CREATED
veyaCONFIRMED
. - Oluşturulan türleri kullanarak geçerli bir yanıt biçimi döndürüldüğünden emin olma aşağıda açıklandığı gibi şemadan oluşturulan istemci kitaplıkları oluşturabilirsiniz.
- Şunu kullanın:
GoogleProvidedPaymentInstrument.
instrumentToken
kabul edersiniz. Türle birlikte RejectionInfo değerini döndürün Ödeme yapılamıyorsaPAYMENT_DECLINED
. Bkz. İşlem ödeme başlıklı makaleye göz atın. - Sipariş E-posta ile işlendikten hemen sonra kullanıcıyı bilgilendirebilir veya SMS'e dokunun.
Yanıtı geri ver
- OrderState.
state
değeriniCREATED
veyaCONFIRMED
olarak ayarlayın. hata yok. - Hata varsa OrderState.
state
değeriniREJECTED
olarak ayarlayın. ile karşılaştığımız andan itibaren şununla birlikte RejectionInfo nesnesini karşılık gelen RejectionInfoType ile ilişkilidir. - OrderUpdate'i (Sipariş Güncelleme) ayarlayın.
orderManagementActions