Google Checkout'u Kurun

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.

CheckoutResponseMessage, müşterinin değiştirilmemiş alışveriş sepetini veya bir hatayı döndürür.

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 bir Cart nesnesi bulunur.
  • Teslimat veya paket servisi: Cart nesnesinin uzantı alanı, yayınlama veya paket servisi özelliklerini belirten bir FoodCartExtension 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.
  • 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 gerekiyorsa CheckoutResponseMessage öğesi, düzeltilmiş ProposedOrder içeren bir FoodErrorExtension 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ımlayan FoodOrderExtension.
  • 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çin PaymentOptions örneğine ait bir örnek ödeme ağ geçidi kullanan aşağıdaki örneğe bakın.

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."
                }
              ]
            }
          }
        }
      ]
    }
  }
}