基本类型
购物车
包含订单的详细信息,以及请求是自提还是送餐。购物车中还包含配送详情、小费和送货地址。Cart
对象在 Checkout AppRequest
中定义。
您可以在 Checkout AppResponse
中添加购物车的副本
下表列出了 Cart
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 |
此对象的类型。如果父级购物车对象是 ProposedOrder 的一部分,则省略此字段。 值: |
|
id |
String |
购物车的可选 ID。 |
|
merchant |
Merchant |
与此购物车关联的商家。 |
|
lineItems |
列表LineItem |
必需。 用户订购的商品或服务的列表。 不得少于 1 项内容。 |
|
promotions |
列表Promotion |
此购物车中应用的促销活动。目前仅支持一项促销活动。 |
|
notes |
String |
有关订单或送货说明的说明。 |
|
extension |
FoodCartExtension |
定义有关用户的详细信息,例如执行方式偏好设置。 |
以下示例展示了 Cart
元素:
示例 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
示例 2
{ "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
联系
指定收到订单的人员的详细信息。它仅在AppResponse
中提供。
下表列出了 Contact
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
displayName |
String |
接收订单的用户的姓名,您希望按订单名称显示。如果未指定 firstName 和 lastName,请使用此字段。 示例: |
|
email |
String |
接收订单的用户的电子邮件地址。 示例: |
|
firstName |
String |
接收订单的用户的名字。 示例: |
|
lastName |
String |
接收订单的人员的姓氏。 示例: |
|
phoneNumber |
String |
接收订单的用户的电话号码(包括国家/地区代码)。 示例: |
|
emailVerified |
Boolean |
说明接收订单的用户是否已使用自己的 Google 帐号登录。 |
以下示例展示了 Contact
元素:
示例
{ "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" }
CustomPushMessage
包含请求的OrderUpdate
。
下表列出了 CustomPushMessage
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
orderUpdate |
OrderUpdate |
必需。 已更新订单信息。 |
以下示例展示了 CustomPushMessage
元素:
示例
{ "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } }
送货信息
下表列出了 DeliveryInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
deliveryTimeIso8601 |
String |
预计送达时间,采用 ISO 8601 时间戳格式:<年}-{月}-{日}T{小时}:{分钟}:{sec}[.{frac_sec}]Z”或时长格式:"P(n)Y(n)M(n)DT(n)H(n)M(n)S”。例如,PT90M 表示时长为 90 分钟。默认值“PT0M”表示尽快送货。参考文档:https://en.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_Presentationations。使用此方法可在结账响应期间更新预计送货时间。 示例: |
以下示例展示了 DeliveryInfo
元素:
示例
{ "deliveryTimeIso8601": "PT90M" }
免责声明
下表列出了 Disclaimer
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
predefinedMessage |
PredefinedMessage |
必需。 在结账期间显示预定义的免责声明消息。 |
|
feeAmount |
Money |
合作伙伴需要向此订单支付 N 金额的商家费用。 |
|
feeAmountRange |
FeeAmountRange |
合作伙伴向每笔订单向餐馆收取金额为 N 到 M 的费用。 |
|
feePercent |
编号 |
合作伙伴需要对此订单收取 N% 的费用。 |
|
feePercentRange |
FeePercentRange |
合作伙伴将向每笔订单向商家收取 N% 到 M% 的费用。 |
以下示例展示了 Disclaimer
元素:
示例 1
{ "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER" }
示例 2
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE" }
示例 3
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feePercent": 25 }
示例 4
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feePercentRange": { "minFeePercent": 20, "maxFeePercent": 30 } }
示例 5
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feeAmount": { "currencyCode": "AUD", "units": 2, "nanos": 500000000 } }
示例 6
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feeAmountRange": { "minFeeAmount": { "currencyCode": "AUD", "units": 2, "nanos": 500000000 }, "maxFeeAmount": { "currencyCode": "AUD", "units": 10, "nanos": 0 } } }
错误
Error
类型具有以下可能值:
CLOSED
:餐厅在订餐时不营业。NO_CAPACITY
:没有可用的服务容量(例如,高峰时段的临时中断情况)。NO_COURIER_AVAILABLE
:由于人手有限,无法处理订单。REQUIREMENTS_NOT_MET
:未达到接受订单的条件(例如,最低购物金额)。UNAVAILABLE_SLOT
:无法按 DeliveryInfo 或 PickupInfo 指定的提前订单履行订单。OUT_OF_SERVICE_AREA
:订单无法配送至用户的地址。PROMO_EXPIRED
:由于促销活动已过期,因此无法应用。PROMO_NOT_APPLICABLE
:通用促销代码,用于在没有其他适用的促销代码错误的情况下,捕获未能应用促销代码的所有情况。PROMO_NOT_RECOGNIZED
:优惠券代码无法识别。PROMO_ORDER_INELIGIBLE
:当前订单无法使用此优惠券。PROMO_USER_INELIGIBLE
:当前用户无法使用此优惠券。AVAILABILITY_CHANGED
:相应商品已下架,或者商品数量不足,无法满足相应请求。INCORRECT_PRICE
:费用或总费用中存在价格错误。INVALID
:某一 LineItem、FulfillmentOption 或 Promotion 包含无效数据。NOT_FOUND
:找不到 LineItem、FulfillmentOption 或 Promotion。PRICE_CHANGED
:商品价格发生了变化。
费用范围
下表列出了 FeeAmountRange
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
minFeeAmount |
Money |
收取的费用金额的下限。 |
|
maxFeeAmount |
Money |
收取的费用金额的上限。 |
费用百分比范围
下表列出了 FeePercentRange
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
minFeePercent |
编号 |
收取的费用百分比下限。 |
|
maxFeePercent |
编号 |
收取的费用百分比上限。 |
FoodCartExtension
包含用户的详细信息,例如执行方式偏好设置。
下表列出了 FoodCartExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 |
此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodCartExtension"。 值: |
|
contact |
Contact |
接收订单的人员的联系信息。详细信息包括此人的姓名、电话号码和电子邮件地址。 |
|
fulfillmentPreference |
FulfillmentOption |
必需。 用户的履单偏好设置。 |
|
location |
Location |
在 CheckoutRequestMessage 中,此字段用于指定送货地址(如果订单需要送货,则必须提供)。对于提供外卖或自取订单的订单,此字段不包含在消息中。 |
以下示例展示了 FoodCartExtension
元素:
示例 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } }
示例 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } }
食品错误扩展程序
识别处理请求时发生的一个或多个错误。 下表介绍了FoodErrorExtension
类型的字段。错误可以在 CheckoutResponse
中发送。
下表列出了 FoodErrorExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 | 必需。 此附加信息的类型。 值: |
|
foodOrderErrors |
列表FoodOrderError |
必需。 一系列 FoodOrderError 对象,用于描述发生的错误。建议为购物车或商品各提交一个错误。 不得少于 1 项内容。 |
|
correctedProposedOrder |
ProposedOrder |
带有更正的新 ProposedOrder。如果原始 ProposedOrder 中存在可恢复的错误,则返回此对象。例如,购物车中一个或多个订单项的价格更改属于可恢复错误。包含有效 ProposedOrder 的可恢复错误会进入确认阶段,而不是要求用户查看购物车。 |
|
paymentOptions |
PaymentOptions |
为用户选择的默认付款方式。 |
|
additionalPaymentOptions |
列表PaymentOptions |
可供用户使用的其他付款方式。 |
以下示例展示了 FoodErrorExtension
元素:
示例
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension", "foodOrderErrors": [ { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_1", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_2", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "8" } } ], "correctedProposedOrder": { "id": "sample_corrected_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true } } }
食品扩展
定义适用于食品的插件。
下表列出了 FoodItemExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 | 必需。 此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"。 值: |
|
options |
列表FoodItemOption |
选项可以是插件项或包含一组插件的插件组。 |
以下示例展示了 FoodItemExtension
元素:
示例
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 } ] } ] }
食品选项
下表列出了 FoodItemOption
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
Google 分配的唯一 ID。在发送 FoodOrderError 或 AsyncOrderUpdateRequest 时,如果购物车中的商品具有相同优惠 ID 且有多个商品,请使用此字段进行区分。 示例: |
|
offerId |
String |
商品的优惠 ID。 示例: |
|
name |
String |
选项名称。 示例: |
|
price |
Money |
||
note |
String |
与选项相关的备注。 |
|
quantity |
编号 |
对于商品选项,则为商品数量。 示例: |
|
subOptions |
列表FoodItemOption |
该选项的子选项(如果有)。 示例: |
以下示例展示了 FoodItemOption
元素:
示例 1
{ "id": "10293231", "offerId": "1918491", "name": "Honey Mustard", "price": { "currencyCode": "USD", "units": "1", "nanos": 250000000 }, "quantity": 5 }
示例 2
{ "id": "123166552", "offerId": "912849184", "name": "Make It A Meal", "price": { "currencyCode": "USD", "units": "3", "nanos": 730000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 }, { "id": "57159183", "offerId": "81837123", "name": "Drink", "price": { "currencyCode": "USD", "units": "3", "nanos": 130000000 }, "quantity": 1 } ] }
食品订单错误
在CheckoutResponse
中包含有关错误的详细信息。
下表列出了 FoodOrderError
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
error |
Error |
必需。 |
|
id |
String |
对于商品级错误,此字段为必填字段。它是 Google 为菜单项分配的 LineItem.id,或用于插件的 FoodItemOption.id。 |
|
description |
String |
错误的说明。此说明用于内部日志记录,不会向用户显示。 |
|
updatedPrice |
Money |
导致错误的商品的新价格。只有在错误为“PRICE_CHANGED”时,才需要填写此字段。 |
|
availableQuantity |
整数 |
导致错误的商品的新可用数量。仅当错误为“INVALID”或“NOT_FOUND”时,才需要填写此字段。“INVALID”和“NOT_FOUND”的值应为零。 |
以下示例展示了 FoodOrderError
元素:
示例 1
{ "error": "CLOSED", "description": "This store is currently reachable. Please try again later." }
示例 2
{ "error": "PRICE_CHANGED", "id": "french_fries", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }
食品订单附加信息
包含订单的履单信息。
下表列出了 FoodOrderExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 |
此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension"。 值: |
|
availableFulfillmentOptions |
列表FulfillmentOption |
表示订单的可用履单选项。 |
|
optinForRemarketing |
Boolean |
用户请求加入您的营销渠道的请求。默认情况下,未经用户同意,您无法发送营销内容。如果“选择接受再营销”为 true,您可以订阅用户。如果“选择接受再营销”为 false 或不存在,您必须按原样保留订阅状态。用户无法通过营销渠道中提供的退订功能,通过 Google 选择退订。此标志仅出现在 SubmitOrderRequestMessage 中。 |
以下示例展示了 FoodOrderExtension
元素:
示例 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] }
示例 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2020-08-20T11:41:00Z" } ], "optinForRemarketing": true }
执行方式
您可以通过以下方式使用FulfillmentOption
对象:
-
在
Checkout AppRequest
和Submit AppRequest
中,Cart.extension.fulfillmentPreference
:存储用户的偏好设置(送货或自提)。发送结账请求时,价格始终为 0。 -
在
Checkout AppResponse
中,ProposedOrder.extension.availableFulfillmentOptions
:定义一个或多个递送选项(目前仅支持一个选项)。您可以在ProposedOrder.otherItems
中将默认选项指定为LineItem
。FulfillmentOption
的offerId
应与ProposedOrder.otherItems
中指定的LineItem
的 ID 一致。
下表列出了 FulfillmentOption
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
offerId |
String |
此履单选项的唯一标识符(如有)。 |
|
fulfillmentInfo |
FulfillmentOptionInfo |
必需。 |
|
expiresAt |
ISO 时间戳 |
此履单选项的到期时间。 |
|
price |
Money |
此选项的费用。 |
以下示例展示了 FulfillmentOption
元素:
示例
{ "offerId": "offer5", "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2019-05-02T00:00:00-07:00", "price": { "currencyCode": "USD", "units": "5", "nanos": 230000000 } }
执行方式选项信息
定义与FulfillmentInfo
相关的信息。
下表列出了 FulfillmentOptionInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
只能提供以下属性组之一。 | |||
delivery |
分组 1 | DeliveryInfo |
如果存在,则表示投放订单。 |
pickup |
分组 2 | PickupInfo |
如果存在,则表示自提订单。 |
映像
下表列出了 Image
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
sourceUrl |
String | 必需。 图片的网址。图片至少应为 72x72 像素。为获得最佳效果,请使用不低于 216x216 像素的图片。图片大小必须小于 6 MB 和 6400 万像素。 |
LineItem
定义购物车的内容 (Cart.lineItems
) 或订单的额外费用 (ProposedOrder.otherItems
)。
下表列出了 LineItem
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
对于购物车中的订单 (ProposedOrder.cart.lineItems[0].id),这是 Google 在创建订单时创建的唯一 ID。对于 ProposedOrder (ProposedOrder.otherItems[0].id) 中的 LineItem,用于添加运费和税费等项,ID 的值由提供商定义。例如,购物车中的两件相同准备说明不同的商品(例如,两份中式披萨配料组不同)。在本例中,这两件商品具有相同的基础优惠 ID。当您发送订单更新请求以指明商品遭拒时,请使用此 ID 作为消除歧义。换言之,如果一个披萨因为没有特定配料而被拒,则 Google 可以帮助该 ID 确定您所提及订单中的菜品。此字段是必填字段,但其他项除外。 |
|
name |
String | 必需。 订单项的名称。这是用户可见的字符串,应尽可能为句首字母大写(如“送货费用”、“服务费”和“税费”)。对于用户,此字段的字符数上限为 100 个。 |
|
type |
LineItemType |
必需。 |
|
quantity |
整数 |
包含的商品数量。不适用于 ProposedOrder.otherItems。 |
|
description |
String |
商品的说明。 |
|
price |
Price |
必需。 商品的价格。此值反映了此订单项所有商品或服务的总价(也就是说,加上所有插件的费用并乘以数量)。例如:如果某个 10 元的商品数量为 3,则价格为 30 元。假如某款披萨的基准价格为 5 美元,附加功能的价格为 1 美元,则该披萨的价格为 6 美元。对于两款披萨的价格为 5 美元,每款披萨的价格为 1 美元,每种披萨的价格为 12 美元。即使价格为“0”,每个 LineItem 也都必须有价格。当类型为 DISCOUNT 时,将该值指定为负数(例如,“-2”); |
|
subLines |
列表SublineNote |
可选,仅在类型为“REGULAR”时有效。在结帐请求和订单提交请求中,可能会发送用户针对特定商品的备注。确保商家在收到备注后会收到备注。它将在请求中以 subLines[0].note 开头,它是请求中提供的唯一值。 不得超过 1 项。 |
|
offerId |
String |
菜品的 MenuItem 的优惠 ID。不适用于 ProposedOrder.otherItems。 |
|
extension |
FoodItemExtension |
定义适用于食品的插件。 |
以下示例展示了 LineItem
元素:
示例 1
{ "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }
示例 2
{ "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }
类型
LineItemType
类型具有以下可能值:
REGULAR
:商品订单项。适用于 Cart.lineItems。TAX
:税费专列项。适用于 ProposedOrder.otherItems。DISCOUNT
:折扣订单项。请注意,价格应为负数。适用于 ProposedOrder.otherItems。GRATUITY
:免费订单项。通常用于用户选择的小费的 SubmitOrderRequestMessage。适用于 ProposedOrder.otherItems。DELIVERY
:投放订单项。适用于 ProposedOrder.otherItems。SUBTOTAL
:小计订单项。适用于 ProposedOrder.otherItems。FEE
:其他类型不涵盖的其他订单项。适用于 ProposedOrder.otherItems。
位置
指定订餐的地址。Location
类型用于 Cart
中,仅用于指示送货订单的目的地。如果用户下单,TransactionDecisionValue
中还会显示最终营业地点。对于指定了自提订单的订单,根本不包含任何位置(甚至包括空位置)。
下表列出了 Location
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
coordinates |
Coordinates |
||
formattedAddress |
String |
营业地点的显示地址。 示例: |
|
postalAddress |
PostalAddress |
||
zipCode |
String |
示例: |
|
city |
String |
城市的名称。 示例: |
|
notes |
String |
有关营业地点的备注,例如关口代码。名称不得超过 500 个字符。 示例: |
以下示例展示了 Location
元素:
示例
{ "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" }
商家
下表列出了 Merchant
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
商家的 ID。如果指定,则与 餐馆 Feed 中的 Restaurant.@id 匹配。 示例: |
|
name |
String | 必需。 用户可见的商家名称。 示例: |
以下示例展示了 Merchant
元素:
示例
{ "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }
金额
下表列出了 Money
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
currencyCode |
String | 必需。 ISO 4217 格式的货币代码(由 3 个字母组成)。 示例: |
|
units |
String |
金额的整数单位。例如,如果 currencyCode 是“USD”,则“1”单位是一美元。 示例: |
|
nanos |
整数 |
金额的纳诺 (10^-9) 单位数。该值必须介于 -999999999(含)和 +999999999(含)之间。请遵循以下规则:如果单位数是正数,纳诺必须是正数或零。如果单位数为零,纳诺可以是正数、零或负数。如果单位数是负数,纳诺必须是负数或零。例如 $-1.75 表示为单位 - 1,纳米 = -750000000。 示例: |
以下示例展示了 Money
元素:
示例 1
{ "currencyCode": "USD", "units": "36", "nanos": 730000000 }
示例 2
{ "currencyCode": "EUR", "units": "10" }
订购
包含最终订单,包括税费、费用、送货费用以及付款信息。您的对象在Submit AppRequest
中收到此对象。
下表列出了 Order
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
finalOrder |
ProposedOrder |
必需。 促成订单的提案订单。 |
|
googleOrderId |
String | 必需。 由 Google 分配的订单 ID。此 ID 应在订单的整个生命周期内保持稳定。此 ID 不会向最终用户显示。 |
|
orderDate |
ISO 时间戳 | 必需。 订单的创建日期和时间。 |
|
paymentInfo |
PaymentInfo |
必需。 与此订单付款相对应的付款信息。 |
以下示例展示了 Order
元素:
示例
{ "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } }
OrderUpdate
下表介绍了AppResponse
中包含的 OrderUpdate 类型的字段。
下表列出了 OrderUpdate
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
actionOrderId |
String | 必需。 集成商系统中订单的唯一 ID,用于标识发送更新的订单。如果为“CREATED”订单在 OrderUpdate 中至少没有提供 order.user_visible_order_id,此 ID 将是 Google 订单卡片中显示的输入的用户可见 ID。 |
|
orderState |
OrderState |
必需。 订单的新状态。 |
|
lineItemUpdates |
映射和字符串,LineItemUpdate > |
||
updateTime |
ISO 时间戳 | 必需。 订单的更新时间。 |
|
orderManagementActions |
列表OrderManagementAction |
下单后的操作,例如与支持团队联系和查看订单详情。 不得少于 1 项且不超过 6 项。 |
|
rejectionInfo |
RejectionInfo |
|
|
cancellationInfo |
CancellationInfo |
|
|
inTransitInfo |
InTransitInfo |
此字段已弃用。 |
|
fulfillmentInfo |
FulfillmentInfo |
此字段已弃用。 |
|
receipt |
Receipt |
在收据中提供用户可见的订单 ID。 |
|
totalPrice |
Price |
订单的总价。 |
|
infoExtension |
FoodOrderUpdateExtension |
定义订单更新的更多详情,例如预计交货或自提的时间间隔。 |
以下示例展示了 OrderUpdate
元素:
示例
{ "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "41", "nanos": 600000000 } }, "lineItemUpdates": { "sample_item_id_1": { "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "reason": "This item has an updated price." } }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } }
自提信息
下表列出了 PickupInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
pickupTimeIso8601 |
String |
预计自提时间,采用 ISO 8601 时间戳格式:<年}-{月}-{日}T{小时}:{分钟}:{sec}[.{frac_sec}]Z”或时长格式:"P(n)Y(n)M(n)DT(n)H(n)M(n)S”。例如,PT90M 表示时长为 90 分钟。默认值为“PT0M”,表示首选自提时间。参考文档:https://en.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_Presentationations。使用此方法可在结账响应期间更新预计自提时间。 示例: |
以下示例展示了 PickupInfo
元素:
示例
{ "pickupTimeIso8601": "PT90M" }
PostalAddress
下表列出了 PostalAddress
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
regionCode |
String | 必需。 由两个字母组成的国家/地区代码。 示例: |
|
postalCode |
String |
邮政编码。 示例: |
|
administrativeArea |
String |
最高行政区划,用于国家或地区的邮政地址。此值可以是州、省、州(俄罗斯)或县。 示例: |
|
locality |
String |
此营业地点所在的城市或城镇。对于没有明确定义市行政区或不符合此结构的地区,请勿指定市行政区,而改用 addressLines 字段。 示例: |
|
addressLines |
列表和字符串 |
一行或多行,可用于指定街道地址。此字段不应修改,因为它可能包含不明确的市行政区。 示例: |
|
recipients |
列表和字符串 |
订单的收件人列表。此字段仅在 billingAddress 中可用。 |
以下示例展示了 PostalAddress
元素:
示例
{ "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }
价格
下表列出了 Price
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
Enum [
"ESTIMATE",
"ACTUAL"
] |
必需。 促销优惠券代码。 |
|
amount |
Money |
必需。 |
促销信息
下表列出了 Promotion
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
coupon |
String | 必需。 促销优惠券代码。 |
建议的订单
下表列出了 ProposedOrder
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
建议订单的可选 ID。 |
|
cart |
Cart |
必需。 用户的商品。 |
|
otherItems |
列表LineItem |
提供商添加的商品(例如运费、其他费用和税费)。otherItems 还可能包含用户添加的小费和/或折扣。 不得超过 10 项。 |
|
image |
Image |
与建议订单关联的图片。 |
|
totalPrice |
Price |
必需。 建议订单的总价。 |
|
extension |
FoodOrderExtension |
必需。 定义食品订单的履单信息。 |
|
disclaimers |
列表Disclaimer |
对应于下单之前将在界面中显示的免责声明消息。 |
以下示例展示了 ProposedOrder
元素:
示例
{ "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }
子备注
下表列出了 SublineNote
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
note |
String | 必需。 |
时间戳
日期和时间,格式如下:
"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
TransactionDecisionValue
包含Order
。
下表列出了 TransactionDecisionValue
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
order |
Order |
必需。 付款时下达订单。 |
以下示例展示了 TransactionDecisionValue
元素:
示例
{ "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } }
履单请求
应用请求
下表列出了 AppRequest
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
isInSandbox |
Boolean |
指示后续事务是否在沙盒环境中完成。 |
|
conversation |
Conversation |
||
inputs |
列表Input |
必需。 包含用于查看购物车的预期参数。 必须正好有 1 项。 |
以下示例展示了 AppRequest
元素:
示例 1
{ "isInSandbox": true, "inputs": [ { "intent": "actions.foodordering.intent.CHECKOUT", "arguments": [ { "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } } } ] } ] }
示例 2
{ "isInSandbox": true, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } } } ] } ] }
CheckoutRequest 消息
CheckoutRequestMessage
是具有 actions.foodordering.intent.CHECKOUT
intent 的 AppRequest
。提交订单请求消息
SubmitOrderRequestMessage
是具有 actions.foodordering.intent.TRANSACTION_DECISION
intent 的 AppRequest
。对话
Conversation
仅在一个会话中具有唯一性。如果需要,您可以使用它将多个 Checkout
和 SubmitOrder
Action 相关联。
下表列出了 Conversation
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
conversationId |
String | 必需。 对话的唯一 ID。 |
以下示例展示了 Conversation
元素:
示例
{ "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ" }
输入
结帐购物车的预期参数。
下表列出了 Input
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
intent |
Enum [
"actions.foodordering.intent.CHECKOUT",
"actions.intent.TRANSACTION_DECISION"
] |
必需。 对于结帐请求消息,设置为“actions.foodordering.intent.CHECKOUT”,对于提交订单请求消息,设置为“actions.intent.TRANSACTION_DECISION”。 |
|
arguments |
列表Argument |
必需。 包含要结账的购物车或要下的订单 必须正好有 1 项。 |
参数
包含用户想要结帐的食品的详细信息。对于结算,只有扩展程序适用。对于提交订单,只可使用 transactionDecisionValue
下表列出了 Argument
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
只能提供以下属性组之一。 | |||
extension |
分组 1 | Cart |
详细说明用户想要结帐的食品。 |
transactionDecisionValue |
分组 2 | TransactionDecisionValue |
包含要下的订单以及付款明细。 |
履单响应
应用响应
下表列出了 AppResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
expectUserResponse |
对比度 |
设置为 false。 值: |
|
finalResponse |
FinalResponse |
必需。 包含您对购物车结账的响应。 |
以下示例展示了 AppResponse
元素:
示例 1
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }, "additionalPaymentOptions": [ { "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Cash on delivery." } } ] } } } ] } } }
示例 2
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+18005554679" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } } ] } } }
示例 3
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "error": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension", "foodOrderErrors": [ { "error": "CLOSED", "description": "The restaurant is closed." } ] } } } ] } } }
示例 4
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "otherItems": [ { "name": "Delivery Fees", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } }, "type": "TAX" }, { "name": "Promotion", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": 0 } }, "id": "OWG_ACTIVE_CODE", "type": "DISCOUNT" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "OWG_ACTIVE_CODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "14", "nanos": 860000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2018-04-10T01:20:08.471Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true, "billingAddressRequired": true } } } } } ] } } }
CheckoutResponseMessage
CheckoutResponseMessage
是 StructuredResponse
中的 checkoutResponse
或 error
的 AppResponse
。提交订单响应消息
SubmitOrderResponseMessage
是包含 StructuredResponse
中的 orderUpdate
的 AppResponse
。最终回复
您对购物车结账或 SubmitOrderRequestMessage 的响应。
下表列出了 FinalResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
richResponse |
RichResponse |
必需。 包含您对 CheckoutRequestMessage 或 SubmitOrderRequestMessage 的响应。 |
结账响应
下表列出了 CheckoutResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
proposedOrder |
ProposedOrder |
必需。 交易使用的建议订单。 |
|
paymentOptions |
PaymentOptions |
必需。 为用户选择的默认付款方式。 |
|
additionalPaymentOptions |
列表PaymentOptions |
可供用户使用的其他付款方式。 |
以下示例展示了 CheckoutResponse
元素:
示例
{ "proposedOrder": { "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }, "additionalPaymentOptions": [ { "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Cash on delivery." } } ] }
项目
包含您对购物车结算或 SubmitOrderRequestMessage 的响应。
下表列出了 Item
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
structuredResponse |
StructuredResponse |
必需。 |
富媒体响应
包含您对购物车结账的响应。
下表列出了 RichResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
items |
列表Item |
必需。 必须正好有 1 项。 |
结构化响应
对于 CheckoutResponseMessage,此字段可以是以下某一个: CheckoutResponse 表示成功结账。或者 FoodErrorExtension:指示结账期间失败。响应可能包含已更正的 ProposedOrder 和 PaymentOptions 或不含 PaymentOptions 的错误消息。对于 SubmitOrderResponseMessage,仅 orderUpdate 适用。
下表列出了 StructuredResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
只能提供以下属性组之一。 | |||
checkoutResponse |
分组 1 | CheckoutResponse |
结帐商品以及税费和折扣。 |
error |
分组 2 | FoodErrorExtension |
购物车商品中观察到的错误。根据错误的性质,此属性可能包含更正后的 ProposedOrder 和 PaymentOptions,也可能仅包含不包含 PaymentOptions 的错误消息。 |
orderUpdate |
分组 3 | OrderUpdate |
异步订单更新
本部分介绍了典型食品订购内置操作互动的请求和响应的高级别类型。AsyncOrderUpdateRequestMessage
在提交订单并确认后,通知用户相关更改。例如,您可以通知用户订单正在运送中或价格发生了变化。 如需了解详情,请参阅下表列出了 AsyncOrderUpdateRequestMessage
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
isInSandbox |
Boolean |
表示发送此更新的订单是沙盒付款。 |
|
customPushMessage |
CustomPushMessage |
必需。 包含请求的 OrderUpdate。 |
以下示例展示了 AsyncOrderUpdateRequestMessage
元素:
示例
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "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_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
AsyncOrderUpdateResponseMessage
成功发送AsyncOrderUpdateRequestMessage
后,Google 会返回 HTTP 200 状态和空正文。如果更新失败,Google 会返回订单更新失败原因的详细信息。
订单更新类型
按钮
定义可用于提供用户互动的界面元素。
下表列出了 Button
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
title |
String | 必需。 显示标签。使用句号不超过 30 个字符以确保正确呈现。 示例: |
|
openUrlAction |
OpenUrlAction |
必需。 |
以下示例展示了 Button
元素:
示例
{ "title": "Send us feedback", "openUrlAction": { "url": "mailto:person@example.com" } }
取消信息
下表列出了 CancellationInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
reason |
String | 必需。 OrderState.state 为“CANCELLED”的遭拒文本显示原因。 示例: |
以下示例展示了 CancellationInfo
元素:
示例
{ "reason": "Insufficient inventory" }
食品订单更新附加信息
此类型可为用户提供预计交货时间或取货时间。每当有信息可用或自上次发送后发生更改,请在 OrderUpdate
中发送此扩展程序。
为保守期提供保守估算值,以便始终如一地满足用户的预期。例如,如果预计订单将于今天 13:00 送达,您应发送由于路况条件(例如今天 12:45 至 13:15)的变化而产生的预计间隔。
ISO 8601 时长或时间戳被解释为表示从 OrderUpdate
的 updateTime
(实质上是“现在”)到 updateTime
和 duration
之间的时间间隔。除非“现在”实际上是一个合理的预期,否则请勿使用此格式。
ISO 8601 间隔可表示从间隔开始到结束之间的间隔。
下表列出了 FoodOrderUpdateExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
对比度 |
此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension"。 值: |
|
estimatedFulfillmentTimeIso8601 |
String |
预计送达时间或取货时间。该字符串必须采用 ISO 8601 格式,并且必须与时间间隔(而非单个固定时间)相对应。可接受的规范包括:间隔时间、持续时间和日期/时间。当信息可用或发生变更(例如提前或延迟到达)时,可以在 SubmitOrderResponseMessage 或 AsyncOrderUpdateRequestMessage 中发送此字段。 示例: |
|
foodOrderErrors |
列表FoodOrderError |
说明预订后发生的错误。建议为购物车或商品各提交一个错误。对于 RejectedionInfo 未涵盖的任何错误,请使用 FoodOrderUpdateExtension.FoodOrderErrors。 不得少于 1 项内容。 |
以下示例展示了 FoodOrderUpdateExtension
元素:
示例 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" }
示例 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] }
FulfillmentInfo
下表列出了 FulfillmentInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
只能提供以下属性组之一。 | |||
deliveryTime |
分组 1 | ISO 时间戳 |
在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601 |
pickupTime |
分组 2 | ISO 时间戳 |
在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601 |
以下示例展示了 FulfillmentInfo
元素:
示例 1
{ "deliveryTime": "2017-05-10T02:36:38.803Z" }
示例 2
{ "pickupTime": "2019-12-26T07:24:27.803Z" }
公交信息
下表列出了 InTransitInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
updatedTime |
ISO 时间戳 |
在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601 |
以下示例展示了 InTransitInfo
元素:
示例
{ "updatedTime": "2017-05-10T02:36:38.803Z" }
更新
下表列出了 LineItemUpdate
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
orderState |
OrderState |
||
price |
Price |
||
reason |
String |
变更原因。价格变动时必填。 |
以下示例展示了 LineItemUpdate
元素:
示例
{ "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "5", "nanos": 500000000 } }, "reason": "Menu updated prices." }
OpenUrlAction
下表列出了 OpenUrlAction
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
url |
String | 必需。 点击或轻触该按钮触发的操作。适用的前缀列表取决于 orderManagementActionType。"EMAIL”:前缀必须为“mailto”。"CALL”:前缀必须为“quot;tel”。"CUSTOMER_SERVICE”:前缀必须为“mailto”、“tel”、“http”或“https”。 示例: |
OrderManagementAction
订单管理使用户可以获得订单后支持,并且应在提交订单 AppResponse
中的每个 OrderUpdate
中发送,并且后续每个特定订单的 AsyncOrderUpdateRequestMessage
订单管理操作可能会因状态而异。
例如,在“CREATED”状态下,CUSTOMER_SERVICE
可能会引用您的客户服务电话。然后,在“已确认”状态下,如果 CUSTOMER_SERVICE
成为客户的最佳联系人,就可以改用餐厅的电话号码。同样,订单处于“FULFILLED”状态时,CUSTOMER_SERVICE
可以引用您的支持电子邮件地址。
下表列出了 OrderManagementAction
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
OrderManagementActionType |
必需。 |
|
button |
Button |
必需。 |
以下示例展示了 OrderManagementAction
元素:
示例 1
{ "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }
示例 2
{ "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }
OrderManagementActionType
定义与OrderManagementAction
相关的类型。
OrderManagementActionType
类型具有以下可能值:
CUSTOMER_SERVICE
:要在订单确认页面上显示的客户服务人员的电子邮件地址和/或联系电话。这是必填字段。openUrlAction.url 前缀必须是“mailto”、“tel”、“http”或“https”。EMAIL
:仅限在订单详情页面上执行的电子邮件操作。openUrlAction.url 前缀必须为“mailto”。CALL_DRIVER
:仅在订单详情页面上调用操作。openUrlAction.url 前缀必须为“tel”。CALL_RESTAURANT
:仅在订单详情页面上调用操作。openUrlAction.url 前缀必须为“tel”。
OrderState
订单的当前状态。OrderState
的每个 state
值也对应于 myaccount.google.com 上的购买状态。
下表列出了 OrderState
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
state |
OrderStateEnum |
必需。 |
|
label |
String | 必需。 用户可见的状态的显示字符串。采用句首字母大写形式。 示例: |
以下示例展示了 OrderState
元素:
示例
{ "state": "CONFIRMED", "label": "Provider confirmed" }
OrderStateEnum
定义与OrderState
相关的类型。
OrderStateEnum
类型具有以下可能值:
CREATED
:由集成商创建,且正在等待提供商确认的订单。对应于“已订购”购买状态。CONFIRMED
:订单已由提供商确认并且处于有效状态。对应于“已接受”的购买状态。REJECTED
:订单被集成商或提供商拒绝。对应于“已拒绝”购买状态。CANCELLED
:用户取消了订单。对应于“已取消”购买状态。IN_PREPARATION
:正在准备食物。对应于购买状态“未知状态”。READY_FOR_PICKUP
:食物可以取餐了。对应于“可供自提”购买状态。IN_TRANSIT
:正在配送订单。对应于“正在进行”的购买状态。FULFILLED
:用户收到了订购的商品。对应于“已自提”购买状态。
收据
在提交订单AppResponse
中发送此类型,其中 OrderState
为“CONFIRMED”、“FULFILLED”或“IN_TRANSIT”。在 userVisibleOrderId
可用时发送回执。您无需在后续更新中继续发送回执。
下表列出了 Receipt
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
userVisibleOrderId |
String | 必需。 如果订单是“确认”、“IN_TRANSIT”或“FULFILLED”,则必须提供。此字段是此订单的唯一面向用户的 ID(通常为餐厅的订单 ID),在集成商的收据和 Google 订单卡片中均会显示。用户必须能够使用此 ID 来向提供商和集成商参考他们订购的客户服务。您只需要在任何给定的 OrderUpdate 中提供此 ID 一次。在提供之前,actionOrderId 是 userVisibleOrderId。例如,在餐厅确认订单之前,您可能没有 userVisibleOrderId。确认后,您必须发送包含 OrderUpdate 和收据的 AsyncOrderUpdateRequestMessage。 |
以下示例展示了 Receipt
元素:
示例
{ "userVisibleOrderId": "userVisibleId1234" }
拒绝信息
下表列出了 RejectionInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
RejectionType |
必需。 |
|
reason |
String |
用于内部日志记录的拒绝原因。此字段对用户不可见。 |
以下示例展示了 RejectionInfo
元素:
示例
{ "type": "PAYMENT_DECLINED", "reason": "There is an issue with payment processing." }
拒绝类型
RejectionType
类型具有以下可能值:
INELIGIBLE
:由于政策或风险方面的原因,用户不符合条件。PAYMENT_DECLINED
:付款处理出现问题。UNAVAILABLE_SLOT
:无法按 DeliveryInfo 或 PickupInfo 指定的提前订单履行订单。PROMO_NOT_APPLICABLE
:促销活动出问题了。UNKNOWN
:任何其他原因。
与付款相关的类型
本部分介绍了与订餐相关的付款相关类型。ActionProvidedPaymentOptions
针对操作提供的付款方式的要求。
下表列出了 ActionProvidedPaymentOptions
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
paymentType |
PaymentType |
必需。 |
|
displayName |
String | 必需。 收据上显示的付款方式的名称。 示例: |
|
onFulfillmentPaymentData |
OnFulfillmentPaymentData |
支付类型“ON_FULFILLMENT”的其他数据。例如,您可以使用此字段指定履单时是否支持现金或银行卡。 |
以下示例展示了 ActionProvidedPaymentOptions
元素:
示例
{ "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } }
允许的身份验证方法
AllowedAuthMethods
类型具有以下可能值:
PAN_ONLY
:与用户的 Google 帐号备案的支付卡关联的身份验证方法。返回的付款数据包括个人帐号 (PAN) 以及付款月份和到期年份。
允许的支付卡网络
AllowedCardNetworks
类型具有以下可能值:
AMEX
DISCOVER
INTERAC
JCB
MASTERCARD
VISA
CardParameters
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 CardParameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
allowedAuthMethods |
列表 | 必需。 支持对卡交易进行身份验证的字段。 不得少于 1 项内容。 |
|
allowedCardNetworks |
列表AllowedCardNetworks |
必需。 您所支持的一个或多个同时受 Google Pay API 支持的支付卡网络。 不得少于 1 项内容。 |
|
billingAddressRequired |
Boolean |
如果您需要帐单邮寄地址,请设为 true。仅在需要处理交易时才请求账单邮寄地址。额外的数据请求可能会增加结账流程的不便,从而导致转化率下降。 |
|
cvcRequired |
Boolean |
如果使用 TimesofMoney,则设置为 true;对于所有其他付款处理方,设置为 false。 |
以下示例展示了 CardParameters
元素:
示例
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": false, "cvcRequired": false }
Google 所提供付款方式
下表列出了 GoogleProvidedPaymentInstrument
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
instrumentToken |
String | 必需。 根据之前指定的 GoogleProvidedPaymentOptions,包含付款令牌的基本 64 编码字符串,用于通过参与 Google Pay 的处理方向用户收取费用。 |
|
billingAddress |
PostalAddress |
付款的账单邮寄地址。 |
以下示例展示了 GoogleProvidedPaymentInstrument
元素:
示例
{ "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] } }
GoogleProvidedPaymentOptions
Google 提供的付款方式的要求。
下表列出了 GoogleProvidedPaymentOptions
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
facilitationSpecification |
String |
PaymentDataRequest JSON 作为字符串。使用此对象可配置您的网站对 Google Pay API 的支持。 |
|
supportedCardNetworks |
列表SupportedCardNetworks |
请改为使用 facilitationSpecification。代理支持的支付卡网络类型。 此字段已弃用。 |
|
prepaidCardDisallowed |
Boolean |
请改为使用 facilitationSpecification。是否允许使用预付卡作为付款方式。 此字段已弃用。 |
|
billingAddressRequired |
Boolean |
请改为使用 facilitationSpecification。是否需要帐单邮寄地址。 此字段已弃用。 |
|
tokenizationParameters |
TokenizationParameters |
此字段已弃用。 |
以下示例展示了 GoogleProvidedPaymentOptions
元素:
示例 1
{ "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" }
示例 2
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "a1b2c3d4e5", "braintree:clientKey": "production_braintree_client_key", "braintree:authorizationFingerprint": "same_as_client_key" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true }
示例 3
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true, "billingAddressRequired": true }
商家信息
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 MerchantInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
merchantId |
String |
Google Pay 发放给您的 Google 商家标识符。 |
|
merchantName |
String | 必需。 商家名称编码为 UTF-8。商家名称会显示在付款表格中。 |
OnFulfillmentPaymentData
使用此对象可为 PaymentType“ON_FULFILLMENT”发送其他数据。
下表列出了 OnFulfillmentPaymentData
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
supportedPaymentOptions |
列表PaymentOptionsEnums |
履行订单时可供用户使用的付款方式列表。 |
以下示例展示了 OnFulfillmentPaymentData
元素:
示例
{ "supportedPaymentOptions": [ "Cash", "Card" ] }
参数
定义与 TokenizationParameters
相关的类型。
下表列出了 Parameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
gateway |
String | 必需。 示例: |
|
gatewayMerchantId |
String | ||
[additionalKey: string] |
String | 其他键值对 |
以下示例展示了 Parameters
元素:
示例 1
{ "gatewayMerchantId": "90412491", "gateway": "olo" }
示例 2
{ "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "YOUR_MERCHANT_ID", "braintree:clientKey": "YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY" }
PaymentDataRequest
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 PaymentDataRequest
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
apiVersion |
对比度 | 必需。 主要 API 版本。 值: |
|
apiVersionMinor |
对比度 | 必需。 次要 API 版本。 值: |
|
merchantInfo |
MerchantInfo |
必需。 (Google Pay 商家 ID)请求付款数据的商家的相关信息。 |
|
allowedPaymentMethods |
列表PaymentMethod |
必需。 指定对 Google Pay API 支持的一种或多种付款方式的支持。 |
|
transactionInfo |
TransactionInfo |
必需。 根据用户是否同意交易来提供有关交易授权的详细信息。此字段包含总价和价格状态。 |
以下示例展示了 PaymentDataRequest
元素:
示例
{ "apiVersion": 2, "apiVersionMinor": 0, "merchantInfo": { "merchantId": "10391231", "merchantName": "Burrito Town" }, "allowedPaymentMethods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": true, "cvcRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2019-05-16", "stripe:publishableKey": "pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA" } } } ], "transactionInfo": { "currencyCode": "INR", "totalPriceStatus": "ESTIMATED", "totalPrice": "185.00" } }
付款信息
订单的付款相关信息。
下表列出了 PaymentInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
displayName |
String | 必需。 显示在收据上的付款方式的用户可见名称。 |
|
paymentType |
PaymentType |
必需。 |
|
googleProvidedPaymentInstrument |
GoogleProvidedPaymentInstrument |
操作可以使用的令牌。仅当您在 CheckoutResponseMessage 中将 GoogleProvidedPaymentOptions 指定为付款方式时,才指定此字段。 |
以下示例展示了 PaymentInfo
元素:
示例 1
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" }
示例 2
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "123 Random Street", "Unit ABC" ], "recipients": [ "sample_receipient" ] } }, "paymentType": "PAYMENT_CARD" }
付款方式
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 PaymentMethod
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
对比度 | 必需。 所支持付款方式的简短标识符。目前仅支持 CARD。 值: |
|
parameters |
CardParameters |
必需。 配置所提供的付款方式类型所需的参数。 |
|
tokenizationSpecification |
TokenizationSpecification |
必需。 配置帐号或解密服务提供商以接收付款信息。CARD 付款方式需要此属性。 |
以下示例展示了 PaymentMethod
元素:
示例
{ "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "90412491", "gateway": "olo" } } }
付款方式
下表列出了 PaymentOptions
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
只能提供以下属性组之一。 | |||
googleProvidedOptions |
分组 1 | GoogleProvidedPaymentOptions |
与 actionProvidedOptions 互斥。使用此付款方式通过 gPay 进行在线付款。 |
actionProvidedOptions |
分组 2 | ActionProvidedPaymentOptions |
与 googleProvidedOptions 互斥。将此卡用于“货到付款现金”或“履单付款”。 |
以下示例展示了 PaymentOptions
元素:
示例 1
{ "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }
示例 2
{ "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } } }
PaymentOptionsEnums
PaymentOptionsEnums
类型具有以下可能值:
Cash
Card
UPI
Paytm
PaymentType
PaymentType
类型具有以下可能值:
PAYMENT_CARD
:适用于 GoogleProvidedPaymentOptions。ON_FULFILLMENT
:适用于 ActionProvidedPaymentOptions。
支持的支付卡网络
定义与GoogleProvidedPaymentOptions
相关的类型。
SupportedCardNetworks
类型具有以下可能值:
UNSPECIFIED_CARD_NETWORK
AMEX
DISCOVER
JCB
MASTERCARD
VISA
Tokenization 参数
定义与GoogleProvidedPaymentOptions
相关的类型。
下表列出了 TokenizationParameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
tokenizationType |
Enum [
"UNSPECIFIED_TOKENIZATION_TYPE",
"PAYMENT_GATEWAY"
] |
必需。 请改为使用 facilitationSpecification。可接受的令牌类型。 |
|
parameters |
Parameters |
请改为使用 facilitationSpecification。 |
令牌化规范
此对象可让您将帐号配置为接收可扣款的付款信息。
下表列出了 TokenizationSpecification
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
对比度 | 必需。 |
|
parameters |
Parameters |
必需。 |
以下示例展示了 TokenizationSpecification
元素:
示例 1
{ "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "1247192", "gateway": "cybersource" } }
示例 2
{ "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2018-10-31", "stripe:publishableKey": "12378127" } }
TransactionInfo
此对象描述了一个用于确定付款人付款能力的交易。用于显示付款授权对话框。
下表列出了 TransactionInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
currencyCode |
String | 必需。 ISO 4217 字母货币代码。 |
|
transactionId |
String |
标识交易尝试的唯一 ID。商家可以使用现有 ID 或生成特定 ID 来尝试 Google Pay 交易。向 Google Transaction Events API 发送回调时,此字段为必填字段。 |
|
totalPriceStatus |
对比度 | 必需。 使用“ESTIMATED”作为默认选项。总价可能会根据回复详细信息(例如根据账单邮寄地址收取的销售税)进行调整。 值: |
|
totalPrice |
String | 必需。 交易的总货币价值,可选择是否精确到小数点后两位。此字段的值应与 car.totalPrice 相同。 |
以下示例展示了 TransactionInfo
元素:
示例
{ "totalPriceStatus": "ESTIMATED", "totalPrice": "12.34", "currencyCode": "USD" }