Kullanıcı bir alışveriş sepeti oluşturduğunda ödeme işlemi başlatılır. Kullanıcının alışveriş sepetinin içeriği ve siparişle ilgili bilgiler Order with Google web hizmetinize gönderilir. Bu bilgiler web hizmetiniz tarafından doğrulanır. Sonrasında da devam edebilir veya alışveriş sepetlerinde gereken ayarlamaları yapabilirsiniz.
Web hizmetinizin ödeme işleyicisi, POST isteklerine yanıt vermelidir. Google, bir müşteri ödeme yapmayı seçtiğinde Order with Google web hizmetine, Cart
özelliğinin ayrıntılarını içeren CheckoutRequestMessage
biçiminde bir JSON istek gövdesi gönderir. Ardından web hizmetiniz CheckoutResponseMessage
ile yanıt verir. Aşağıdaki şema, süreci göstermektedir.
Bir ödeme isteği aldıktan sonra Order with Google web hizmetinizin aşağıdakileri yapması gerekir:
- Geçerli öğe fiyatlarına, stok durumuna ve sağlayıcı hizmetine göre alışveriş sepetinin geçerliliğini kontrol edin.
- Toplam fiyatı hesaplayın (indirimler, vergiler ve teslimat ücretleri dahil).
- İşlem başarılı olursa değiştirilmemiş bir alışveriş sepetiyle yanıt verin.
- Başarısız olursanız bir hata mesajı ve yeni önerilen bir siparişle yanıt verin.
Ödeme işlemini uygulamaya başlamadan önce İstek karşılamaya genel bakış belgelerini incelemenizi öneririz.
Ödeme İsteği Mesajı
Bir müşteri ödeme işlemini seçtiğinde alışveriş sepetini doğrulamak için Google, web hizmetinize JSON biçiminde CheckoutRequestMessage
biçiminde bir istek gönderir. Müşteri siparişi, Order with Google akışında daha sonraya kadar gönderilmez.
CheckoutRequestMessage
kapsamındaki veriler aşağıdakileri içerir:
- Amaç: Her ödeme isteği gövdesinin
inputs[0].intent
alanı,actions.foodordering.intent.CHECKOUT
dize değerini içerir. - Alışveriş sepeti: Ödeme isteğinin
inputs[0].arguments[0].extension
alanında, müşterinin alışveriş sepetini temsil eden birCart
nesnesi bulunur. - Teslimat veya paket servisi:
Cart
nesnesinin uzantı alanı, yayınlama veya paket servisi özelliklerini belirten birFoodCartExtension
nesnesi içerir:- Teslimat siparişleri için
FoodCartExtension
nesnesi teslimat adresini içerir. - Teslim alma veya paket servisi siparişleri için
FoodCartExtension
nesnesi herhangi bir konum bilgisi içermez.
- Teslimat siparişleri için
- Korumalı alan: Ödeme isteğinin
isInSandbox
alanı, işlemin korumalı alan ödemelerini kullanıp kullanmadığını belirten bir boole değeri içerir.
Ö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 Yanıt Mesajı
Order with Google hizmetinden bir istek aldıktan sonra, ödeme web hizmetinizin bu isteği işleme alması ve bir CheckoutResponseMessage
ile yanıt vermesi gerekir. CheckoutResponseMessage
öğesinin başarılı veya başarısız bir isteği kapsaması gerekir.
Başarılı istek
Ödeme isteği başarılı olursa CheckoutResponseMessage
özelliğinin ProposedOrder
ve PaymentOptions
özelliklerini içermesi gerekir:
ProposedOrder
cart
:CheckoutRequestMessage
içinde sağlanan alışveriş sepetiyle aynıcart
nesnesi. Alışveriş sepetinin içeriklerinden herhangi birinin değiştirilmesi gerekiyorsaCheckoutResponseMessage
öğesi, düzeltilmişProposedOrder
içeren birFoodErrorExtension
içermelidir.otherItems
: Teslimat ücretleri, vergiler ve diğer ücretler gibi sağlayıcı tarafından eklenen öğeler. Kullanıcı tarafından eklenen bahşişleri de içerebilir.totalPrice
: Siparişin toplam fiyatı.extension
: Teslimat süresi gibi siparişle ilgili sipariş karşılama bilgilerini tanımlayanFoodOrderExtension
.
PaymentOptions
- Ödeme işlemi ayarlama, daha sonra Google Pay'i ayarlama bölümünde ele alınmıştır.
Ödeme işlemeyi uygulamaya hazır olana kadar
CheckoutResponseMessage
sitenizde yer tutucu JSON kullanabilirsiniz. CheckoutResponseMessage
hesabınıza yer tutucu ödeme seçenekleri eklemek içinPaymentOptions
örneğine ait bir örnek ödeme ağ geçidi kullanan aşağıdaki örneğe bakın.
- Ödeme işlemi ayarlama, daha sonra Google Pay'i ayarlama bölümünde ele alınmıştır.
Ödeme işlemeyi uygulamaya hazır olana 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
özelliğinin, oluşan hataları açıklayan FoodOrderError
öğelerinin listesini içeren FoodErrorExtension
öğesini içermesi gerekir. Siparişte, alışveriş sepetindeki bir ürünün fiyat değişikliği gibi kurtarılabilir hatalar varsa FoodErrorExtension
öğesi correctedProposedOrder
özelliğini 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."
}
]
}
}
}
]
}
}
}