Ödeme işlemi, kullanıcı bir alışveriş sepeti oluşturduğunda çağrılır. Bu kullanıcının alışveriş sepeti ve siparişle ilgili ayrıntılar Sipariş Uçtan Uca web sayfanıza gönderilir geliştirmenizi sağlar. Bu bilgiler web hizmetiniz tarafından doğrulanır ve sonrasında, alışveriş sepetinde gerekli düzenlemeleri yapabilirler.
Web hizmetinizin ödeme işleyicisi POST isteklerine yanıt vermelidir. Bir
ödeme yapmayı seçtiğinde, Google Sipariş Verme için Uçtan Uca web hizmetine
CheckoutRequestMessage
biçiminde olan JSON istek gövdesi,
bir müşterinin Cart
ayrıntıları için geçerlidir. Daha sonra web hizmetiniz
CheckoutResponseMessage
Bu işlem aşağıdaki şemada gösterilmektedir.
Ödeme isteği alındığında, Sipariş Veren Uçtan Uca web hizmetiniz şu:
- Alışveriş sepetinin geçerliliğini, mevcut öğe fiyatlarına, stok durumuna, ve sağlayıcı hizmet.
- Toplam fiyatı hesaplama (indirimler, vergiler ve teslimat dahil) ücretler).
- İşlem başarılı olursa değiştirilmemiş bir alışveriş sepetiyle yanıt verin.
- Başarısız olmanız durumunda, hata mesajı ve önerilen yeni siparişle yanıt verin.
Ödeme özelliğini uygulamaya başlamadan önce Sipariş Karşılama genel bakış belgelerinden faydalanabilirsiniz.
Ödeme İsteği Mesajı
Müşterinin alışveriş sepetini doğrulamak için,
müşteri ödeme yapmayı seçtiğinde
Google, web hizmetinize
CheckoutRequestMessage
Müşteri siparişi, teslim tarihinin
Uçtan uca akışı sıralama.
Bir
CheckoutRequestMessage
şunları içerir:
- Amaç:
inputs[0].intent
Her ödeme isteği gövdesinin alanındaactions.foodordering.intent.CHECKOUT
dize değeri. - Alışveriş sepeti: Ödeme isteğinin
inputs[0].arguments[0].extension
alanı Müşterinin alışveriş sepetini temsil eden birCart
nesnesi içerir. - Teslim veya alma:
Cart
nesnesinin uzantı alanında bir Yayın için özellikleri belirtenFoodCartExtension
nesnesi veya alma:- Teslimat siparişleri için
FoodCartExtension
nesnesi şunları içerir: teslimat adresi. - Teslim alma veya paket servisi siparişlerinde
FoodCartExtension
nesnesi Konum bilgisi içermeyecek.
- Teslimat siparişleri için
- Korumalı alan: Ödeme isteğinin
isInSandbox
alanı bir boole değeri içeriyor İşlemin korumalı alan ödemelerini kullanıp kullanmadığını gösteren değer.
Ödeme isteği örneği
Aşağıda bir CheckoutRequestMessage
örneği verilmiştir:
{
"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
}
Ödeme İşlemine İlişkin Yanıt Mesajı
Uçtan Uca Sipariş hizmetinden bir istek aldıktan sonra, ödeme web siteniz
hizmeti tarafından işlenip CheckoutResponseMessage
ile yanıt vermesi gerekir. İlgili içeriği oluşturmak için kullanılan
CheckoutResponseMessage
, başarılı veya başarısız bir sorunu ele almalıdır.
isteğinde bulunabilirsiniz.
Başarılı istek
Ödeme isteği başarılı olursa CheckoutResponseMessage
öğesine
ProposedOrder
ve
PaymentOptions
:
ProposedOrder
cart
:cart
CheckoutRequestMessage
. Alışveriş sepetinin içeriğinden herhangi birinin değiştirildiğinde,CheckoutResponseMessage
bunun yerine bir DüzeltilmişProposedOrder
ileFoodErrorExtension
.otherItems
: Sağlayıcı tarafından eklenen öğeler (ör. teslimat ücretleri), vergileri ve diğer ücretleri kapsar. Kullanıcı tarafından eklenen ikramı da içerebilir.totalPrice
: Siparişin toplam fiyatı.extension
: Sipariş karşılama bilgilerini tanımlayan birFoodOrderExtension
siparişle ilgili verileri (ör. teslimat süresi) gösterir.
PaymentOptions
- Ödeme işlemenin ayarlanması, Google'ı kurma adımlarının sonraki bölümlerinde ele alınmıştır.
Ödeyin.
Tamamlayana kadar
CheckoutResponseMessage
içindeki yer tutucu JSON'u kullanabilirsiniz ödeme işlemini uygulamaya hazır hale getirebilirsiniz. CheckoutResponseMessage
ödeme yönteminize yer tutucu ödeme seçenekleri eklemek için Aşağıdaki örneğe bakın. Bu örnektePaymentOptions
için örnek ödeme ağ geçidi.
- Ödeme işlemenin ayarlanması, Google'ı kurma adımlarının sonraki bölümlerinde ele alınmıştır.
Ödeyin.
Tamamlayana kadar
Başarılı yanıt örneği
{
"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": []
}
}
}
]
}
}
}
]
}
}
}
Başarısız istek
Ödeme isteği başarısız olursa CheckoutResponseMessage
şu işlemleri yapmalıdır:
şunları içeren FoodErrorExtension
:
FoodOrderError
öğeleri içerir. Varsa
siparişle ilgili hatalar (sepetteki bir öğenin fiyatının değişmesi,
FoodErrorExtension
, correctedProposedOrder
öğesini içermelidir.
Başarısız yanıt örneği
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"error": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
"foodOrderErrors": [
{
"error": "CLOSED",
"description": "The restaurant is closed."
}
]
}
}
}
]
}
}
}
Ödeme uygulaması
Ödeme işlemi uygulanırken aşağıdaki adımlar uygulanmalıdır.
Hizmeti doğrulama
İlk hizmet hatası koşulu için FoodOrderError döndürme bulundu. Bu hatalar kurtarılamaz. Bu nedenle, karşılaşılan ilk hata geri döndü. İlgili açıklama için Hataları işleme emin olun.
- FulfillmentOptionInfo özelliğini şurada okuyun:
istek karşılama türünün
delivery
veyapickup
olduğunu belirlemek için isteği gönderin. Gerekirse aşağıdaki hata türlerini döndürün:
Hata türü Kullanım alanı GEÇERSİZ Sipariş karşılama türü geçersiz. NOT_FOUND Sipariş karşılama türü bulunamadı. KAPALI - Sipariş için OperationHours penceresi yok.
- En kısa zamanda verilen bir sipariştir ve şu an için ServiceHours kullanılamaz.
- Acil durum kapatma işlemi var veya
isDisabled
hizmeti doğru.
UNAVAILABLE_SLOT Önceden sipariş yerine getirilemiyor. NO_CAPACITY Restoran meşgul ve şu anda sipariş almıyor. OUT_OF_SERVICE_AREA Sipariş, kullanıcının adresine teslim edilemiyor. Örnek için Teslimat adresi doğrulaması bölümüne bakın. NO_COURIER_AVAILABLE Teslimat personelinin sınırlı olması nedeniyle sipariş teslim edilemiyor.
Alışveriş sepetini doğrulama ve fiyatlandırma
Her Alışveriş sepetini
lineItems
arayın ve mevcut verilerle doğrulayın. kendi sistemi ayarlayabilirsiniz. İlgili içeriği oluşturmak için kullanılan MenuItemOffer.Feed varlığındansku
değeri dahil edildi LineItem olarak değiştirin.offerId
. Bir metin oluştur: Gerekirse her satır öğesi için FoodOrderError. Bir metin oluştur: en fazla bir hata. Aşağıdaki hata türlerini döndürürse gerekli:Hata türü Kullanım alanı Kurtarılabilir GEÇERSİZ Öğe verileri veya seçenek verilerinden herhangi biri geçersiz. Hayır NOT_FOUND Öğe veya seçeneklerden herhangi biri bulunamadı. Hayır PRICE_CHANGED Bir öğenin veya eklenti kombinasyonunun fiyatı değişti. Bu hata, kurtarılabilir olarak değerlendirilebilir. Evet AVAILABILITY_CHANGED Satır öğeleri veya seçeneklerden herhangi biri için istenen tutar kullanılamıyor. Evet REQUIREMENTS_NOT_MET Minimum sipariş veya maksimum sipariş tutarı karşılanmadı. Bu durum, alışveriş sepeti fiyatının Ücret'in eligibleTransactionVolumeMin
altında mı yoksa Ücret'in üzerinde mi olduğunu kontrol ederek belirlenebilir.eligibleTransactionVolumeMax
. Minimum sipariş değeri doğrulaması bölümündeki örneğe bakın.Hayır LineItemType ile doğrulanmış satır öğeleri listesini döndürün
REGULAR
. Tüm alışveriş sepeti satır öğesi fiyatlarının toplamı, alışveriş sepeti fiyatı veyaSUBTOTAL
Alışveriş sepeti öğelerini doğrulama örneklerine bakın.
Hizmet ücretlerini hesaplamak
- Şuna göre hizmet için doğru Ücret varlığını bulun:
eligibleRegion
,validFrom
,validThrough
vepriority
. - Ücret tutarını, varlığın
price
ile tanımlanmış olup olmadığına bağlı olarak hesaplayın.percentageOfCart
veyapricePerMeter
mülkü. - Teslimat veya paket servisi ücretini, şu özelliklere sahip bir LineItem olarak iade edin:
LineItemType sırasıyla
DELIVERY
veyaFEE
. Ücreti ekle Alışveriş sepeti.otherItems
listesine.
Promosyonları uygula
- Eşleşmeye göre Anlaşma öğesini bulun.
Promosyon.Fırsat ile
coupon
değeri.dealCode
. Anlaşmayı doğrulayın ve gerekirse FoodOrderError döndürür. Bu hatalar kurtarılabilir olarak değerlendirilebilir. Aşağıdaki hata türlerini döndürme gerekirse:
Hata türü Kullanım alanı PROMO_NOT_RECOGNIZED Kupon kodu tanınmadı. PROMO_EXPIRED Anlaşmanın geçerliliği sona erdi. PROMO_ORDER_INELIGIBLE Sipariş kupon için uygun değil. PROMO_NOT_APPLICABLE Başka bir neden. Anlaşma fiyat tutarını Anlaşma'ya göre hesaplayın.
discount
veya AnlaşmadiscountPercentage
.Şuna göre alışveriş sepeti toplamını veya ücret toplamını kullanarak anlaşma fiyat tutarını uygulayın: Anlaşma.
dealType
.Uygulanan promosyonla birlikte Alışveriş sepetini iade edin.
promotions
.Promosyonu şu başlığa sahip LineItem olarak iade edin: LineItemType
DISCOUNT
. İndirimi Alışveriş sepeti.Negatif fiyata sahipotherItems
listesi.
Yanıtı geri ver
- ProposedOrder.
cart
dosyasını oluşturun. Yanıt alışveriş sepeti istek sepetiyle aynıdır. - ProposedOrder.
otherItems
listesini döndürün ve vergi, ücret, bahşiş ve indirim uygulanır. Şunun için Gratuity'e bakın: bahşiş öğesinin nasıl yapılandırılacağına dair daha fazla bilgi. - Alışveriş sepetini ekleyerek ProposedOrder.
totalPrice
öğesini dahil edin fiyat, ücretler, indirim, vergiler ve bahşiş. -
FoodOrderExtension.
availableFulfillmentOptions
ilgili FulfillmentOption. Tahmini tutarı güncelle teslim alma veya teslimat süresini beklenen süreye göre ayarlayın. - Önceki doğrulama kontrollerinde oluşturulan Food OrderErrors varsa:
- StructuredResponse.
error
ve FoodErrorExtension'daki hatalar.foodOrderErrors
- ProposedOrder'ı
correctedProposedOrder
alanını kullanın. paymentOptions
içindeki PaymentOptions'ı iade edin girin.- İsteğe bağlı olarak, başka değer varsa
additionalPaymentOptions
ödeme seçenekleri mevcuttur ve tüm hatalar giderilebilir.
- StructuredResponse.
- Doğrulama hatası yoksa
proposedOrder
öğesini döndürün, CheckoutResponse nesnesindepaymentOptions
. İsteğe bağlı olarak, başka değer varsaadditionalPaymentOptions
kullanabileceğiniz en iyi ödeme yöntemidir.