基本类型
购物车
包含订单的详细信息,以及请求是自提还是送货。购物车还包含送货详情、小费和送货地址。Cart
对象在 Checkout AppRequest
.f 中定义。您可以在 Checkout AppResponse
中添加购物车的副本
下表列出了 Cart
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const |
此对象的类型。如果父级购物车对象是 ProposedOrder 的一部分,请省略此字段。 值: |
|
id |
String |
购物车的可选 ID。 |
|
merchant |
Merchant |
与此购物车关联的商家。 |
|
lineItems |
List<LineItem > |
必填。 用户正在订购的商品或服务的列表。 必须至少包含 1 项。 |
|
promotions |
List<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 |
布尔值 |
指示接收订单的用户是否已使用其 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
下表列出了 DeliveryInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
deliveryTimeIso8601 |
String |
预计送达时间,采用 ISO 8601 时间戳格式:“{year}-{month}-{day}T{hour}:{min}:{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#Combined_date_and_time_representations。您可以使用此参数在结账回复期间更新预计送货时间。 示例: |
以下示例展示了 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 或促销活动包含无效数据。NOT_FOUND
:找不到 LineItem、FulfillmentOption 或 Promotion。PRICE_CHANGED
:商品的价格发生了变化。
FeeAmountRange
下表列出了 FeeAmountRange
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
minFeeAmount |
Money |
收取的费用金额的下限。 |
|
maxFeeAmount |
Money |
收取的费用金额的上限。 |
FeePercentRange
下表列出了 FeePercentRange
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
minFeePercent |
编号 |
收取的费用百分比下限。 |
|
maxFeePercent |
编号 |
收取的费用百分比的上限。 |
FoodCartExtension
包含有关用户的详细信息,例如执行方式偏好设置。
下表列出了 FoodCartExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const |
此扩展程序的类型。此字段始终设置为“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
用于标识处理请求时发生的一个或多个错误。 下表介绍了FoodErrorExtension
类型的字段。错误可以通过 CheckoutResponse
发送。
下表列出了 FoodErrorExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const | 必填。 此扩展程序的类型。 值: |
|
foodOrderErrors |
List<FoodOrderError > |
必填。 用于描述发生的错误的 FoodOrderError 对象数组。建议每个购物车或每件商品一个错误。 必须至少包含 1 项。 |
|
correctedProposedOrder |
ProposedOrder |
包含更正内容的新 ProposedOrder。如果原始 ProposedOrder 中存在可恢复的错误,则返回此对象。例如,购物车中一个或多个订单项的价格发生变化属于可恢复的错误。具有有效 ProposedOrder 的可恢复错误会推进到确认阶段,而无需用户查看购物车。 |
|
paymentOptions |
PaymentOptions |
为用户选择的默认付款方式。 |
|
additionalPaymentOptions |
List<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
定义食品的附加项。
下表列出了 FoodItemExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const | 必填。 此扩展程序的类型。此字段始终设置为“type.googleapis.com/google.actions.v2.orders.FoodItemExtension”。 值: |
|
options |
List<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
下表列出了 FoodItemOption
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
由 Google 分配的唯一 ID。发送 FoodOrderError 或 AsyncOrderUpdateRequest 时,如果购物车中包含多个 offerId 相同的商品,请使用此字段进行区分。 示例: |
|
offerId |
String |
商品的优惠 ID。 示例: |
|
name |
String |
选项名称。 示例: |
|
price |
Money |
||
note |
String |
与选项相关的备注。 |
|
quantity |
编号 |
对于是项的选项,则为项的数量。 示例: |
|
subOptions |
List<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 } ] }
FoodOrderError
包含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
包含订单的履单信息。
下表列出了 FoodOrderExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const |
此扩展程序的类型。此字段始终设置为“type.googleapis.com/google.actions.v2.orders.FoodOrderExtension”。 值: |
|
availableFulfillmentOptions |
List<FulfillmentOption > |
表示订单的可用履单选项。 |
|
optinForRemarketing |
布尔值 |
用户请求选择接收您通过营销渠道发送的邮件。默认情况下,您必须征得用户同意才能发送营销内容。如果 optinForRemarketing 为 true,您可以为用户订阅。如果 optinForRemarketing 为 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
您可以通过以下方式使用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 } }
FulfillmentOptionInfo
定义与FulfillmentInfo
相关的信息。
下表列出了 FulfillmentOptionInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
必须提供以下某个属性组。 | |||
delivery |
第 1 组 | DeliveryInfo |
如果存在,则表示送货订单。 |
pickup |
第 2 组 | PickupInfo |
如果存在,则表示自提订单。 |
Image
下表列出了 Image
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
sourceUrl |
String | 必填。 图片的网址。图片至少应为 72x72 像素。为取得最佳显示效果,请使用一张不低于 216x216 像素的图片。图片必须小于 6 MB 且低于 6400 万像素。 |
LineItem
定义购物车中的内容 (Cart.lineItems
) 或订单的额外费用 (ProposedOrder.otherItems
)。
下表列出了 LineItem
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
对于购物车中的商品详情 (ProposedOrder.cart.lineItems[0].id),此字段是 Google 在创建订单时创建的唯一 ID。对于 ProposedOrder 中的 LineItem(ProposedOrder.otherItems[0].id),该 LineItem 用于添加运费和税费等项,其 id 值由提供方定义。例如,购物车中包含两件相同的商品,但准备说明不同(例如,两份中等披萨,配料各不相同)。在本例中,这两件商品具有相同的基本 offerId。发送订单更新请求以指明商品被拒绝时,请使用此 ID 作为歧义消除符。换句话说,如果其中一个披萨因缺少特定配料而被拒绝,该 ID 可帮助 Google 确定您所指的是订单中的哪个商品。此字段是必填字段,但在 otherItems 中除外。 |
|
name |
String | 必填。 订单项的名称。这是面向用户显示的字符串,应尽可能采用句子大写形式(例如“运费”“服务费”“税费”)。对于用户,此字段的长度上限为 100 个字符。 |
|
type |
LineItemType |
必填。 |
|
quantity |
整数 |
包含的项数量。不适用于 ProposedOrder.otherItems。 |
|
description |
String |
商品的说明。 |
|
price |
Price |
必填。 商品的价格。此值反映此订单项的所有商品或服务的总价格(即,将所有附加项的费用相加,然后乘以数量)。例如:如果一件价格为 10 美元的商品的数量为 3,则价格为 30 美元。如果一个披萨的基本价格为 5 美元,附加费用为 1 美元,那么其价格为 6 美元。如果两个披萨(数量 = 2)的基准价格为 5 美元,每个披萨都有 1 美元的附加费用,那么价格将为 12 美元。每个 LineItem 都应具有价格,即使价格为“0”也是如此。如果类型为 DISCOUNT,请将值指定为负数(例如“-2”)。 |
|
subLines |
List<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
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) 单位数。此值必须介于 -999,999,999(含)和 +999,999,999(含)之间。请遵循以下规则:如果单位数是正数,纳秒数必须是正数或零。如果单位数为零,纳秒数可以是正数、零或负数。如果单位数是负数,纳诺必须是负数或零。例如,$-1.75 表示为 units = -1 和 nanos = -750,000,000。 示例: |
以下示例展示了 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,用于标识要发送更新的订单。如果 OrderUpdate 中未针对“已创建”订单至少提供一次 receipt.user_visible_order_id,则此 ID 将是 Google 订单卡片中显示的输入的公开订单 ID。 |
|
orderState |
OrderState |
必填。 订单的新状态。 |
|
lineItemUpdates |
Map<String, LineItemUpdate > |
||
updateTime |
ISO 时间戳 | 必填。 订单的更新时间。 |
|
orderManagementActions |
List<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
下表列出了 PickupInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
pickupTimeIso8601 |
String |
预计接人时间,采用 ISO 8601 时间戳格式:“{year}-{month}-{day}T{hour}:{min}:{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#Combined_date_and_time_representations。在结账回复期间,使用此属性更新预计取件时间。 示例: |
以下示例展示了 PickupInfo
元素:
示例
{ "pickupTimeIso8601": "PT90M" }
PostalAddress
下表列出了 PostalAddress
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
regionCode |
String | 必填。 包含两个字母的国家/地区代码。 示例: |
|
postalCode |
String |
邮政编码。 示例: |
|
administrativeArea |
String |
最高行政区划,用于国家或地区的邮政地址。此值可以是州、省、州(俄罗斯)或县。 示例: |
|
locality |
String |
此地理位置所属的城市或城镇。对于没有明确定义市行政区或者其无法很好地对应这个结构的地区,请勿指定市行政区,而改用 addressLines 字段。 示例: |
|
addressLines |
List<String> |
您可以使用的一个或多个行来指定街道地址。此字段不应修改,因为其中可能包含不明确的地区。 示例: |
|
recipients |
List<String> |
订单的收货人列表。此字段仅在 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
下表列出了 ProposedOrder
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
id |
String |
建议的订单的 ID(可选)。 |
|
cart |
Cart |
必填。 用户的项。 |
|
otherItems |
List<LineItem > |
提供商添加的项,例如运费、其他费用和税费。otherItems 还可能包含用户添加的小费和/或折扣。 不得超过 10 项。 |
|
image |
Image |
与建议的订单关联的图片。 |
|
totalPrice |
Price |
必填。 拟议订单的总价。 |
|
extension |
FoodOrderExtension |
必填。 定义餐食订单的履单信息。 |
|
disclaimers |
List<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
下表列出了 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
下表列出了 AppRequest
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
isInSandbox |
布尔值 |
指示后续事务是在沙盒环境中完成的。 |
|
conversation |
Conversation |
||
inputs |
List<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" } } } } ] } ] }
CheckoutRequestMessage
CheckoutRequestMessage
是具有 actions.foodordering.intent.CHECKOUT
intent 的 AppRequest
。
SubmitOrderRequestMessage
SubmitOrderRequestMessage
是具有 actions.foodordering.intent.TRANSACTION_DECISION
intent 的 AppRequest
。
对话
Conversation
仅对一个会话而言是唯一的。您可以使用它将多个 Checkout
和 SubmitOrder
操作关联在一起(如有需要)。
下表列出了 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 |
List<Argument > |
必填。 包含要结账的购物车或要下单的订单 必须只有 1 项。 |
参数
包含用户想要结账的菜品的详细信息。对于结账,只有延期付款适用。对于提交订单,只有 transactionDecisionValue 适用
下表列出了 Argument
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
必须提供以下某个属性组。 | |||
extension |
第 1 组 | Cart |
详细说明用户要结账的餐品。 |
transactionDecisionValue |
第 2 组 | TransactionDecisionValue |
包含要下单的订单以及付款详情。 |
执行响应
AppResponse
下表列出了 AppResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
expectUserResponse |
Const |
设为 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
是 AppResponse
,其中 StructuredResponse
中包含 checkoutResponse
或 error
。
SubmitOrderResponseMessage
SubmitOrderResponseMessage
是 AppResponse
,其中 StructuredResponse
中包含 orderUpdate
。
FinalResponse
您对购物车结账或 SubmitOrderRequestMessage 的回复。
下表列出了 FinalResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
richResponse |
RichResponse |
必填。 包含您对 CheckoutRequestMessage 或 SubmitOrderRequestMessage 的响应。 |
CheckoutResponse
下表列出了 CheckoutResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
proposedOrder |
ProposedOrder |
必填。 建议用于交易的订单。 |
|
paymentOptions |
PaymentOptions |
必填。 为用户选择的默认付款方式。 |
|
additionalPaymentOptions |
List<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
包含您对购物车结账的回复。
下表列出了 RichResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
items |
List<Item > |
必填。 必须只有 1 项。 |
StructuredResponse
对于 CheckoutResponseMessage,此值可以是以下各项之一:CheckoutResponse:表示结账成功。OR FoodErrorExtension:表示结账失败。响应可以包含经过更正的 ProposedOrder 和 PaymentOptions,也可以包含不含 PaymentOptions 的错误消息。对于 SubmitOrderResponseMessage,只有 orderUpdate 适用。
下表列出了 StructuredResponse
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
必须提供以下某个属性组。 | |||
checkoutResponse |
第 1 组 | CheckoutResponse |
结账商品金额,含税费和折扣。 |
error |
第 2 组 | FoodErrorExtension |
购物车商品中存在错误。根据错误的性质,此属性可以包含经过更正的 ProposedOrder 和 PaymentOptions,也可以仅包含不含 PaymentOptions 的错误消息。 |
orderUpdate |
第 3 组 | OrderUpdate |
异步订单更新
本部分介绍了构成典型外卖内置 Action 互动请求和响应的概要类型。AsyncOrderUpdateRequestMessage
在订单提交并确认后,通知用户发生的更改。 例如,您可以通知用户订单正在运输中或价格发生了变化。 如需了解详情,请参阅下表列出了 AsyncOrderUpdateRequestMessage
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
isInSandbox |
布尔值 |
表示发送此更新的订单是沙盒付款。 |
|
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
下表列出了 CancellationInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
reason |
String | 必填。 当 OrderState.state 为“CANCELLED”时,显示的拒绝原因文本。 示例: |
以下示例展示了 CancellationInfo
元素:
示例
{ "reason": "Insufficient inventory" }
FoodOrderUpdateExtension
此类型可向用户提供订单预计送达或可提货的时间范围。每当有可用信息或自上次发送后信息发生更改时,请在 OrderUpdate
中发送此扩展。
请为执行间隔提供保守估算值,以便始终满足用户的预期。例如,如果订单预计今天 13:00 送达,您应发送与交通状况变化相符的预计送货时间范围,例如今天 12:45 至 13:15。
ISO 8601 时长或时间戳的含义为:从 OrderUpdate
的 updateTime
(本质上为“现在”)到 updateTime
加上 duration
之间的间隔。
除非“现在”确实是合理的预期时间,否则请勿使用此格式。
ISO 8601 间隔的含义是指从间隔的开始到结束之间的间隔。
下表列出了 FoodOrderUpdateExtension
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
@type |
Const |
此扩展程序的类型。此字段始终设置为“type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension”。 值: |
|
estimatedFulfillmentTimeIso8601 |
String |
订单的预计送达时间或可自提时间。字符串必须采用 ISO 8601 格式,并且必须对应于一个时间间隔,而不是单个固定时间。可接受的惯例包括:间隔、时长和日期/时间。当信息可用或发生变化(例如提前或延迟送达)时,可以通过 SubmitOrderResponseMessage 或 AsyncOrderUpdateRequestMessage 发送此字段。 示例: |
|
foodOrderErrors |
List<FoodOrderError > |
说明后续发生的错误。建议每个购物车或每件商品一个错误。对于 RejectionInfo 未涵盖的任何错误,请使用 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 消息中使用 estimatedFulfillmentTimeIso8601 |
pickupTime |
第 2 组 | ISO 时间戳 |
在 FoodOrderingUpdateExtension 消息中使用 estimatedFulfillmentTimeIso8601 |
以下示例展示了 FulfillmentInfo
元素:
示例 1
{ "deliveryTime": "2017-05-10T02:36:38.803Z" }
示例 2
{ "pickupTime": "2019-12-26T07:24:27.803Z" }
InTransitInfo
下表列出了 InTransitInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
updatedTime |
ISO 时间戳 |
在 FoodOrderingUpdateExtension 消息中使用 estimatedFulfillmentTimeIso8601 |
以下示例展示了 InTransitInfo
元素:
示例
{ "updatedTime": "2017-05-10T02:36:38.803Z" }
LineItemUpdate
下表列出了 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”:前缀必须为“tel”。“CUSTOMER_SERVICE”:前缀必须为“mailto”“tel”“http”或“https”。 示例: |
OrderManagementAction
订单管理功能可让用户获取订单后支持,应在提交订单 AppResponse
中的每个 OrderUpdate
以及每个后续 AsyncOrderUpdateRequestMessage
中发送。为特定订单发送的订单管理操作可能会因状态而异。
例如,在“已创建”状态下,CUSTOMER_SERVICE
可能会引用您的客户服务电话。然后,在“已确认”状态下,如果餐厅的电话号码成为客户的首选联系方式,CUSTOMER_SERVICE
可以更改为该电话号码。同样,当订单处于“已履行”状态后,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 | 必填。 如果订单状态为“CONFIRMED”“IN_TRANSIT”或“FULFILLED”,则必须提供。此字段是此订单的单个面向用户的 ID(通常是餐厅的订单 ID),会同时显示在集成商的收据和 Google 订单卡中。用户必须能够使用此 ID 来引用其订单,以便向提供商和集成商寻求客户服务。您只需在任何给定的 OrderUpdate 中提供一次此 ID。在提供 actionOrderId 之前,actionOrderId 为 userVisibleOrderId。例如,在餐厅确认订单之前,您可能没有 userVisibleOrderId。确认后,您必须发送包含 OrderUpdate 和 Receipt 的 AsyncOrderUpdateRequestMessage。 |
以下示例展示了 Receipt
元素:
示例
{ "userVisibleOrderId": "userVisibleId1234" }
RejectionInfo
下表列出了 RejectionInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
RejectionType |
必填。 |
|
reason |
String |
用于内部日志记录的拒绝原因。用户看不到此字段。 |
以下示例展示了 RejectionInfo
元素:
示例
{ "type": "PAYMENT_DECLINED", "reason": "There is an issue with payment processing." }
RejectionType
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
AllowedAuthMethods
类型有以下可能值:
PAN_ONLY
:与用户的 Google 账号中保存的支付卡相关联的身份验证方法。返回的付款数据包含个人账号 (PAN) 以及到期月份和到期年份。
AllowedCardNetworks
AllowedCardNetworks
类型有以下可能值:
AMEX
DISCOVER
INTERAC
JCB
MASTERCARD
VISA
BillingAddressParameters
此对象可让您设置要为所请求的账单邮寄地址返回的其他字段。
下表列出了 BillingAddressParameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
format |
String |
完成交易所需的账单邮寄地址格式。MIN:姓名、国家/地区代码和邮政编码。完整:姓名、街道地址、市行政区、区域、国家/地区代码和邮政编码。 |
以下示例展示了 BillingAddressParameters
元素:
示例 1
{ "format": "MIN" }
示例 2
{ "format": "FULL" }
CardParameters
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 CardParameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
allowedAuthMethods |
List<Const> | 必填。 支持用于对卡交易进行身份验证的字段。 必须至少包含 1 项。 |
|
allowedCardNetworks |
List<AllowedCardNetworks > |
必填。 您和 Google Pay API 都支持的一个或多个支付卡网络。 必须至少包含 1 项。 |
|
billingAddressRequired |
布尔值 |
如果您要求提供账单邮寄地址,请将此属性设为 true。请仅在必须提供账单邮寄地址才能处理交易的情况下,请求账单邮寄地址。额外的数据请求会使结账流程不能顺畅进行,并可能会导致转化率较低。 |
|
billingAddressParameters |
BillingAddressParameters |
如果 billingAddressRequired 设为 true,则返回预期字段。 |
|
cvcRequired |
布尔值 |
如果使用 TimesofMoney,请将此值设为 true;对于所有其他付款处理方,请将此值设为 false。 |
以下示例展示了 CardParameters
元素:
示例 1
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": false, "cvcRequired": false }
示例 2
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "MIN" }, "cvcRequired": false }
GoogleProvidedPaymentInstrument
下表列出了 GoogleProvidedPaymentInstrument
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
instrumentToken |
String | 必填。 采用 Base 64 编码的字符串,其中包含用于通过参与的 Google Pay 处理方向用户收费的付款令牌,具体取决于之前指定的 GoogleProvidedPaymentOptions。 |
|
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 |
List<SupportedCardNetworks > |
请改用 facilitationSpecification。代理支持的支付卡网络类型。 此字段已弃用。 |
|
prepaidCardDisallowed |
布尔值 |
请改用 facilitationSpecification。是否允许使用预付卡作为付款方式。 此字段已弃用。 |
|
billingAddressRequired |
布尔值 |
请改用 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 }
MerchantInfo
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 MerchantInfo
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
merchantId |
String |
Google Pay 向您签发的 Google 商家 ID。 |
|
merchantName |
String | 必填。 采用 UTF-8 编码的商家名称。商家名称会显示在付款表格中。 |
OnFulfillmentPaymentData
使用此对象可为 PaymentType“ON_FULFILLMENT”发送其他数据。
下表列出了 OnFulfillmentPaymentData
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
supportedPaymentOptions |
List<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 |
Const | 必填。 主要 API 版本。 值: |
|
apiVersionMinor |
Const | 必填。 次要 API 版本。 值: |
|
merchantInfo |
MerchantInfo |
必填。 (Google Pay 商家 ID)请求付款数据的商家的相关信息。 |
|
allowedPaymentMethods |
List<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, "billingAddressParameters": { "format": "FULL" }, "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
订单的付款相关信息。
下表列出了 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" }
PaymentMethod
使用此对象可配置您的网站对 Google Pay API 的支持。
下表列出了 PaymentMethod
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
Const | 必填。 所支持付款方式的短标识符。目前仅支持 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
下表列出了 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
{ "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\":true, \"billingAddressParameters\": { \"format\":\"MIN\" } }, \"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\"}}" } }
示例 3
{ "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。
SupportedCardNetworks
定义与GoogleProvidedPaymentOptions
相关的类型。
SupportedCardNetworks
类型有以下可能值:
UNSPECIFIED_CARD_NETWORK
AMEX
DISCOVER
JCB
MASTERCARD
VISA
TokenizationParameters
定义与GoogleProvidedPaymentOptions
相关的类型。
下表列出了 TokenizationParameters
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
tokenizationType |
Enum [
"UNSPECIFIED_TOKENIZATION_TYPE",
"PAYMENT_GATEWAY"
] |
必填。 请改用 facilitationSpecification。可接受的令牌类型。 |
|
parameters |
Parameters |
请改用 facilitationSpecification。 |
TokenizationSpecification
借助此对象,您可以配置要接收可扣款付款信息的账号。
下表列出了 TokenizationSpecification
类型的属性:
属性 | 类型 | 说明 | |
---|---|---|---|
type |
Const | 必填。 |
|
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 |
Const | 必填。 使用“ESTIMATED”(估算)作为默认值。总价可能会根据响应详细信息(例如根据账单邮寄地址收取的销售税)进行调整。 值: |
|
totalPrice |
String | 必填。 交易的总货币价值,可选择是否精确到小数点后两位。此字段的值应与 cart.totalPrice 相同。 |
以下示例展示了 TransactionInfo
元素:
示例
{ "totalPriceStatus": "ESTIMATED", "totalPrice": "12.34", "currencyCode": "USD" }