Giản đồ về hành động thực hiện đơn hàng

Trang này mô tả tải trọng của dịch vụ web thực hiện đơn hàng (Ordering End-to-End API) khi làm việc với API hành động tích hợp đặt hàng hai đầu. Để có phiên bản mà máy có thể đọc được, bạn có thể tải giản đồ JSON xuống.

Các loại cơ sở

Giỏ hàng

Chứa thông tin chi tiết về đơn đặt hàng, cũng như thông tin về việc yêu cầu đó có phải là đến lấy hàng hay không hoặc giao hàng. Giỏ hàng cũng có thông tin giao hàng, tiền thưởng và việc giao hàng của bạn. Đối tượng Cart được xác định trong Checkout AppRequest.f Bạn thêm một bản sao của giỏ hàng vào Checkout AppResponse của mình

Bảng sau đây liệt kê các thuộc tính của loại Cart:

Thuộc tính Loại Mô tả
@type Liên tục

Loại của đối tượng này. Bỏ qua trường này nếu đối tượng Giỏ hàng gốc là một phần của RecommendeddOrder.

Giá trị: type.googleapis.com/google.actions.v2.orders.Cart

id String

Mã giỏ hàng (không bắt buộc).

merchant Merchant

Người bán đã liên kết với giỏ hàng này.

lineItems Danh sách<LineItem>

Bắt buộc.

Danh sách (các) hàng hoá hoặc dịch vụ mà người dùng đang đặt.

Không được có ít hơn 1 mục.

promotions Danh sách<Promotion>

Chương trình khuyến mãi được áp dụng trong giỏ hàng này. Hiện chỉ hỗ trợ một chương trình khuyến mãi.

notes String

Ghi chú về đơn đặt hàng hoặc hướng dẫn giao hàng.

extension FoodCartExtension

Xác định thông tin chi tiết về người dùng, chẳng hạn như lựa chọn ưu tiên về phương thức thực hiện đơn hàng.

Ví dụ sau đây cho thấy phần tử Cart:

Ví dụ 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"
    }
  }
}

Ví dụ 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"
    }
  }
}

Thông tin liên hệ

Nêu rõ thông tin chi tiết về người nhận đơn đặt hàng. Chương trình này chỉ có ở AppResponse.

Bảng sau đây liệt kê các thuộc tính của loại Contact:

Thuộc tính Loại Mô tả
displayName String

Tên của người nhận đơn đặt hàng, bạn muốn mọi người thấy tên này. Sử dụng trường này nếu firstName và lastName chưa được chỉ định.

Ví dụ: Lovefood Ordering

email String

Địa chỉ email của người nhận đơn đặt hàng.

Ví dụ: ilovefood@example.com

firstName String

Tên của người nhận đơn đặt hàng.

Ví dụ: Lovefood

lastName String

Họ của người nhận đơn đặt hàng.

Ví dụ: Ordering

phoneNumber String

Số điện thoại của người nhận đơn đặt hàng, bao gồm cả mã quốc gia.

Ví dụ: +16501234567

emailVerified Boolean

Cho biết người nhận đơn đặt hàng có đăng nhập bằng Tài khoản Google của họ hay không.

Ví dụ sau đây cho thấy phần tử Contact:

Ví dụ:

{
  "displayName": "Lovefood Ordering",
  "email": "ilovefood@example.com",
  "phoneNumber": "+16501234567"
}

CustomPushMessage

Chứa OrderUpdate cho yêu cầu.

Bảng sau đây liệt kê các thuộc tính của loại CustomPushMessage:

Thuộc tính Loại Mô tả
orderUpdate OrderUpdate

Bắt buộc.

Đã cập nhật thông tin cho đơn đặt hàng.

Ví dụ sau đây cho thấy phần tử CustomPushMessage:

Ví dụ:

{
  "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

Bảng sau đây liệt kê các thuộc tính của loại DeliveryInfo:

Thuộc tính Loại Mô tả
deliveryTimeIso8601 String

Thời gian giao hàng dự kiến, theo định dạng dấu thời gian ISO 8601: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời lượng: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M thể hiện thời lượng 90 phút. Giá trị mặc định "PT0M", cho biết rằng thời gian giao hàng ưu tiên là sớm nhất có thể. Tài liệu tham khảo: https://en.wikipedia.org/wiki/ISO_8601#Joind_date_and_time_representations. Hãy sử dụng thuộc tính này để cập nhật thời gian giao hàng dự kiến trong quy trình phản hồi quy trình thanh toán.

Ví dụ: PT90M

Ví dụ sau đây cho thấy phần tử DeliveryInfo:

Ví dụ:

{
  "deliveryTimeIso8601": "PT90M"
}

Tuyên bố từ chối trách nhiệm

Bảng sau đây liệt kê các thuộc tính của loại Disclaimer:

Thuộc tính Loại Mô tả
predefinedMessage PredefinedMessage

Bắt buộc.

Hiển thị thông báo tuyên bố từ chối trách nhiệm được xác định trước trong quy trình thanh toán.

feeAmount Money

Đối tác sẽ tính cho người bán khoản phí N cho đơn đặt hàng này.

feeAmountRange FeeAmountRange

Đối tác sẽ tính cho nhà hàng khoản phí từ N đến M cho mỗi đơn đặt hàng.

feePercent Number

Đối tác sẽ tính phí cho người bán đối với đơn đặt hàng này là N%.

feePercentRange FeePercentRange

Đối tác sẽ tính cho người bán khoản phí từ N% đến M% cho mỗi đơn đặt hàng.

Ví dụ sau đây cho thấy phần tử Disclaimer:

Ví dụ 1

{
  "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER"
}

Ví dụ 2

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE"
}

Ví dụ 3

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercent": 25
}

Ví dụ 4

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercentRange": {
    "minFeePercent": 20,
    "maxFeePercent": 30
  }
}

Ví dụ 5

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmount": {
    "currencyCode": "AUD",
    "units": 2,
    "nanos": 500000000
  }
}

Ví dụ 6

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmountRange": {
    "minFeeAmount": {
      "currencyCode": "AUD",
      "units": 2,
      "nanos": 500000000
    },
    "maxFeeAmount": {
      "currencyCode": "AUD",
      "units": 10,
      "nanos": 0
    }
  }
}

Lỗi

Loại Error có thể có các giá trị sau:

  • CLOSED: Nhà hàng đóng cửa không hoạt động tại thời điểm gọi món.
  • NO_CAPACITY: Không có dung lượng dịch vụ (ví dụ: tạm thời ngừng dịch vụ do giờ cao điểm).
  • NO_COURIER_AVAILABLE: Không thể xử lý đơn đặt hàng vì có nhân viên giao hàng bị hạn chế.
  • REQUIREMENTS_NOT_MET: Chưa đáp ứng các quy tắc ràng buộc đối với việc chấp nhận đơn đặt hàng (ví dụ: kích thước giỏ hàng tối thiểu).
  • UNAVAILABLE_SLOT: Đơn đặt hàng không thể được thực hiện tại thời điểm đặt hàng trước do DeliveryInfo hoặc PickupInfo chỉ định.
  • OUT_OF_SERVICE_AREA: Đơn đặt hàng không thể được giao đến địa chỉ của người dùng.
  • PROMO_EXPIRED: Không thể áp dụng vì chương trình khuyến mãi đã hết hạn.
  • PROMO_NOT_APPLICABLE: Mã lỗi chung để phát hiện tất cả các trường hợp không áp dụng được mã khuyến mãi, nếu không có lỗi mã khuyến mãi nào khác phù hợp.
  • PROMO_NOT_RECOGNIZED: Không nhận dạng được mã giảm giá.
  • PROMO_ORDER_INELIGIBLE: Đơn đặt hàng hiện tại không đủ điều kiện nhận phiếu giảm giá này.
  • PROMO_USER_INELIGIBLE: Người dùng hiện tại không đủ điều kiện nhận phiếu giảm giá này.
  • AVAILABILITY_CHANGED: Mặt hàng không còn nữa hoặc không có đủ mặt hàng để hoàn thành yêu cầu.
  • INCORRECT_PRICE: Lỗi về giá trong phí hoặc tổng số.
  • INVALID: Mục hàng, FulfillmentOption hoặc Chương trình khuyến mãi chứa dữ liệu không hợp lệ.
  • NOT_FOUND: Không tìm thấy một mục hàng, FulfillmentOption hoặc Chương trình khuyến mãi.
  • PRICE_CHANGED: Giá của một mặt hàng đã thay đổi.

FeeAmountRange

Bảng sau đây liệt kê các thuộc tính của loại FeeAmountRange:

Thuộc tính Loại Mô tả
minFeeAmount Money

Giới hạn dưới của số tiền phí được tính..

maxFeeAmount Money

Giới hạn trên của số tiền phí được tính..

FeePercentRange

Bảng sau đây liệt kê các thuộc tính của loại FeePercentRange:

Thuộc tính Loại Mô tả
minFeePercent Number

Giới hạn dưới của tỷ lệ phần trăm phí được tính.

maxFeePercent Number

Giới hạn trên của tỷ lệ phần trăm phí được tính.

FoodCartExtension

Chứa thông tin chi tiết về người dùng, chẳng hạn như lựa chọn ưu tiên về phương thức thực hiện đơn hàng.

Bảng sau đây liệt kê các thuộc tính của loại FoodCartExtension:

Thuộc tính Loại Mô tả
@type Liên tục

Loại phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodCartExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodCartExtension

contact Contact

Thông tin liên hệ của người nhận đơn đặt hàng. Thông tin chi tiết bao gồm tên, số điện thoại và địa chỉ email của người đó.

fulfillmentPreference FulfillmentOption

Bắt buộc.

Lựa chọn ưu tiên của người dùng về việc thực hiện đơn hàng.

location Location

Trong CheckoutRequestMessage, trường này chỉ định địa chỉ giao hàng. Bạn bắt buộc phải cung cấp địa chỉ giao hàng nếu đơn đặt hàng dùng để giao hàng. Đối với các đơn đặt hàng mang đi hoặc đến lấy hàng, trường này không có trong thông báo.

Ví dụ sau đây cho thấy phần tử FoodCartExtension:

Ví dụ 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"
  }
}

Ví dụ 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

Xác định một hoặc nhiều lỗi đã xảy ra trong khi xử lý yêu cầu. Bảng sau đây mô tả các trường của loại FoodErrorExtension. Lỗi có thể được gửi trong CheckoutResponse.

Bảng sau đây liệt kê các thuộc tính của loại FoodErrorExtension:

Thuộc tính Loại Mô tả
@type Liên tục

Bắt buộc.

Loại phần mở rộng này.

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodErrorExtension

foodOrderErrors Danh sách<FoodOrderError>

Bắt buộc.

Mảng các đối tượng FoodOrderError mô tả lỗi đã xảy ra. Bạn nên chọn một lỗi cho mỗi giỏ hàng hoặc mỗi mặt hàng.

Không được có ít hơn 1 mục.

correctedProposedOrder ProposedOrder

Bắt buộc khi foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED".

Đơn đặt hàng được đề xuất mới có nội dung chỉnh sửa. Trả về đối tượng này nếu có lỗi có thể khôi phục trong RecommendeddOrder ban đầu. Ví dụ: lỗi có thể khôi phục là sự thay đổi về giá của một hoặc nhiều mục hàng trong giỏ hàng. Lỗi có thể khôi phục với RecommendeddOrder hợp lệ sẽ được chuyển sang giai đoạn xác nhận, thay vì yêu cầu người dùng xem lại giỏ hàng.

paymentOptions PaymentOptions

Bắt buộc khi foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED".

Đã chọn các phương thức thanh toán mặc định cho người dùng.

additionalPaymentOptions Danh sách<PaymentOptions>

Các phương thức thanh toán thay thế dành cho người dùng.

Ví dụ sau đây cho thấy phần tử FoodErrorExtension:

Ví dụ:

{
  "@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

Xác định tiện ích bổ sung cho các mặt hàng thực phẩm.

Bảng sau đây liệt kê các thuộc tính của loại FoodItemExtension:

Thuộc tính Loại Mô tả
@type Liên tục

Bắt buộc.

Loại phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodItemExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodItemExtension

options Danh sách<FoodItemOption>

Một lựa chọn có thể là một mục tiện ích bổ sung hoặc nhóm tiện ích bổ sung chứa một nhóm tiện ích bổ sung.

Ví dụ sau đây cho thấy phần tử FoodItemExtension:

Ví dụ:

{
  "@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

Bảng sau đây liệt kê các thuộc tính của loại FoodItemOption:

Thuộc tính Loại Mô tả
id String

Mã nhận dạng duy nhất do Google chỉ định. Khi bạn gửi FoodOrderError hoặc AsyncOrderUpdateRequest, hãy sử dụng trường này để phân biệt trong các trường hợp giỏ hàng chứa nhiều mặt hàng có cùng mã offerId.

Ví dụ: 39231093

offerId String

Mã ưu đãi của mặt hàng.

Ví dụ: 912835081

name String

Tên lựa chọn.

Ví dụ: Honey Mustard

price Money
note String

Ghi chú liên quan đến lựa chọn này.

quantity Number

Đối với các tuỳ chọn là mục, số lượng mục.

Ví dụ: 3

subOptions Danh sách<FoodItemOption>

Tùy chọn phụ cho tùy chọn, nếu có.

Ví dụ: [ { "id": "71283712", "offerId": "51209121", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "units": "3", "nanos": 780000000 }, "quantity": 2 }, { "id": "102941024", "offerId": "12084102", "name": "Ketchup", "price": { "currencyCode": "USD", "units": "2", "nanos": 980000000 }, "quantity": 6 } ]

Ví dụ sau đây cho thấy phần tử FoodItemOption:

Ví dụ 1

{
  "id": "10293231",
  "offerId": "1918491",
  "name": "Honey Mustard",
  "price": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 250000000
  },
  "quantity": 5
}

Ví dụ 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

Chứa thông tin chi tiết về các lỗi trong CheckoutResponse.

Bảng sau đây liệt kê các thuộc tính của loại FoodOrderError:

Thuộc tính Loại Mô tả
error Error

Bắt buộc.

id String

Bắt buộc khi error = "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "PRICE_CHANGED", "INVALID", or "NOT_FOUND".

Đây là trường bắt buộc đối với các lỗi ở cấp mặt hàng. Đây là LineItem.id do Google chỉ định cho các mục trong trình đơn hoặc FoodItemOption.id cho các tiện ích bổ sung.

description String

Nội dung mô tả về lỗi. Nội dung mô tả này dùng để ghi nhật ký nội bộ và người dùng sẽ không thấy được.

updatedPrice Money

Bắt buộc khi error = "PRICE_CHANGED".

Giá mới của một mặt hàng đã gây ra lỗi. Giá trị này chỉ bắt buộc khi lỗi là "PRICE_CHANGED".

availableQuantity Số nguyên

Bắt buộc khi error = "INVALID", or "NOT_FOUND".

Số lượng mới hiện có của mặt hàng đã gây ra lỗi. Yêu cầu này chỉ bắt buộc khi lỗi "INVALID" (KHÔNG HỢP LỆ) hoặc "NOT_FOUND". Giá trị phải bằng 0 đối với "INVALID" và "NOT_FOUND".

Ví dụ sau đây cho thấy phần tử FoodOrderError:

Ví dụ 1

{
  "error": "CLOSED",
  "description": "This store is currently reachable. Please try again later."
}

Ví dụ 2

{
  "error": "PRICE_CHANGED",
  "id": "french_fries",
  "description": "The price has changed.",
  "updatedPrice": {
    "currencyCode": "USD",
    "units": "2",
    "nanos": 750000000
  }
}

FoodOrderExtension

Chứa thông tin về cách thực hiện đơn đặt hàng.

Bảng sau đây liệt kê các thuộc tính của loại FoodOrderExtension:

Thuộc tính Loại Mô tả
@type Liên tục

Loại phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodOrderExtension

availableFulfillmentOptions Danh sách<FulfillmentOption>

Biểu thị các tuỳ chọn thực hiện đơn hàng có sẵn cho đơn đặt hàng.

optinForRemarketing Boolean

Người dùng yêu cầu chọn tham gia các kênh tiếp thị của bạn. Theo mặc định, bạn không thể gửi nội dung tiếp thị mà không có sự đồng ý của người dùng. Nếu optinForTiếp thị lại là true, bạn có thể đăng ký cho người dùng đó. Nếu optinForTiếp thị lại sai hoặc không xuất hiện, bạn phải giữ nguyên trạng thái gói thuê bao trong hệ thống của mình. Người dùng không thể từ chối thông qua Google mà chỉ thông qua chức năng huỷ đăng ký có trong các kênh tiếp thị của bạn. Cờ này chỉ xuất hiện trong SubmitOrderRequestMessage.

Ví dụ sau đây cho thấy phần tử FoodOrderExtension:

Ví dụ 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2017-07-17T12:30:00Z"
    }
  ]
}

Ví dụ 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "pickup": {
          "pickupTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2020-08-20T11:41:00Z"
    }
  ],
  "optinForRemarketing": true
}

FulfillmentOption

Bạn có thể sử dụng đối tượng FulfillmentOption theo các cách sau:
  • Sau Checkout AppRequestSubmit AppRequest, Cart.extension.fulfillmentPreference: Lưu trữ lựa chọn ưu tiên của người dùng (phân phối hoặc đến lấy hàng). Giá luôn bằng 0 khi yêu cầu thanh toán được gửi.
  • Trong Checkout AppResponse, ProposedOrder.extension.availableFulfillmentOptions: Xác định một hoặc nhiều tuỳ chọn phân phối (hiện chỉ có một tuỳ chọn là được hỗ trợ). Bạn chỉ định tuỳ chọn mặc định là LineItem trong ProposedOrder.otherItems offerId của FulfillmentOption phải khớp với mã nhận dạng của LineItem được chỉ định trong ProposedOrder.otherItems.

Bảng sau đây liệt kê các thuộc tính của loại FulfillmentOption:

Thuộc tính Loại Mô tả
offerId String

Giá trị nhận dạng duy nhất cho lựa chọn thực hiện này (nếu có).

fulfillmentInfo FulfillmentOptionInfo

Bắt buộc.

expiresAt Dấu thời gian ISO

Thời gian mà tuỳ chọn thực hiện này hết hạn.

price Money

Chi phí của lựa chọn này.

Ví dụ sau đây cho thấy phần tử FulfillmentOption:

Ví dụ:

{
  "offerId": "offer5",
  "fulfillmentInfo": {
    "pickup": {
      "pickupTimeIso8601": "P0M"
    }
  },
  "expiresAt": "2019-05-02T00:00:00-07:00",
  "price": {
    "currencyCode": "USD",
    "units": "5",
    "nanos": 230000000
  }
}

FulfillmentOptionInfo

Xác định thông tin liên quan đến FulfillmentInfo.

Bảng sau đây liệt kê các thuộc tính của loại FulfillmentOptionInfo:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
delivery Nhóm 1 DeliveryInfo

Vui lòng cho biết đơn đặt hàng (nếu có).

pickup Nhóm 2 PickupInfo

Biểu tượng này cho biết đơn đặt hàng đến lấy hàng (nếu có).

Bài đăng có hình ảnh

Bảng sau đây liệt kê các thuộc tính của loại Image:

Thuộc tính Loại Mô tả
sourceUrl String

Bắt buộc.

URL của hình ảnh. Hình ảnh phải có kích thước tối thiểu là 72x72 pixel. Để có kết quả tốt nhất, hãy sử dụng hình ảnh có kích thước tối thiểu là 216x216 pixel. Hình ảnh phải nhỏ hơn 6 MB và 64 megapixel.

LineItem

Xác định nội dung của giỏ hàng (Cart.lineItems) hoặc các khoản phí bổ sung cho một đơn đặt hàng (ProposedOrder.otherItems).

Bảng sau đây liệt kê các thuộc tính của loại LineItem:

Thuộc tính Loại Mô tả
id String

Bắt buộc khi type = "REGULAR".

Đối với Mục hàng trong Giỏ hàng (RecommendeddOrder.cart.lineItems[0].id), đây là mã nhận dạng duy nhất do Google tạo khi bạn tạo đơn đặt hàng. Đối với Mặt hàng trong đơn đặt hàng được đề xuất (RecommendeddOrder.otherItems[0].id), được dùng để thêm các mặt hàng như phí và thuế giao hàng, giá trị của mã nhận dạng là do nhà cung cấp xác định. Ví dụ: Một giỏ hàng có hai mặt hàng giống nhau nhưng có hướng dẫn chuẩn bị khác nhau (chẳng hạn như 2 chiếc bánh pizza cỡ vừa với các nhóm nhân bên trên khác nhau). Trong trường hợp này, cả hai mặt hàng đều có cùng một mã ưu đãi cơ sở. Khi bạn gửi yêu cầu cập nhật đơn đặt hàng để cho biết rằng một mặt hàng bị từ chối, hãy sử dụng mã nhận dạng này làm mã phân biệt. Nói cách khác, nếu một trong các loại pizza bị từ chối vì thiếu lớp phủ cụ thể, thì mã nhận dạng sẽ giúp Google xác định mặt hàng nào trong đơn đặt hàng mà bạn đang đề cập. Trường này là bắt buộc, ngoại trừ trong otherItems.

name String

Bắt buộc.

Tên của mục hàng. Đây là một chuỗi mà người dùng thấy được và nên viết hoa đầu câu nếu có thể (chẳng hạn như "Phí giao hàng", "Phí dịch vụ", "Thuế"). Trường này được cắt ngắn còn 100 ký tự đối với người dùng.

type LineItemType

Bắt buộc.

quantity Số nguyên

Bắt buộc khi type = "REGULAR".

Số lượng mục được đưa vào. Không áp dụng cho SuggesteddOrder.otherItems.

description String

Nội dung mô tả mặt hàng.

price Price

Bắt buộc.

Giá của một hoặc nhiều mặt hàng. Giá trị này phản ánh tổng giá của tất cả hàng hoá hoặc dịch vụ cho mục hàng này (nói cách khác, cộng chi phí của mọi tiện ích bổ sung rồi nhân với số lượng). Ví dụ: Nếu một mặt hàng 10 USD có số lượng là 3 thì giá sẽ là 30 USD. Đối với một chiếc bánh pizza có giá cơ bản là 5 đô la và phần bổ sung 1 đô la, giá sẽ là 6 đô la. Đối với hai chiếc pizza (số lượng = 2) có giá cơ bản là 5 USD và mỗi chiếc có thêm phụ kiện 1 USD, giá sẽ là 12 USD. Mỗi Mục hàng phải có giá, ngay cả khi giá bằng "0". Khi loại là DISCOUNT, hãy chỉ định giá trị là số âm (ví dụ: "-2").

subLines Danh sách<SublineNote>

Không bắt buộc và chỉ hợp lệ nếu loại là "REGULAR". Trong yêu cầu thanh toán và yêu cầu gửi đơn đặt hàng, họ có thể sẽ nhận được một ghi chú về mặt hàng cụ thể của người dùng trong trường này. Đảm bảo rằng người bán nhận được ghi chú khi bạn cung cấp ghi chú. Giá trị này sẽ nằm trong yêu cầu dưới dạng subLines[0].note, đây là giá trị duy nhất được cung cấp trong trường này khi có trong một yêu cầu.

Không được có nhiều hơn 1 mục.

offerId String

Bắt buộc khi type = "REGULAR".

Mã ưu đãi của mặt hàng trong trình đơn. Không áp dụng cho SuggesteddOrder.otherItems.

extension FoodItemExtension

Xác định tiện ích bổ sung cho các mặt hàng thực phẩm.

Ví dụ sau đây cho thấy phần tử LineItem:

Ví dụ 1

{
  "name": "New customer discount",
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "-5",
      "nanos": -500000000
    }
  },
  "type": "DISCOUNT"
}

Ví dụ 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

Loại LineItemType có thể có các giá trị sau:

  • REGULAR: Mục hàng hàng hoá. Áp dụng cho Cart.lineItems.
  • TAX: Mục hàng thuế. Áp dụng cho suggesteddOrder.otherItems.
  • DISCOUNT: Mục hàng giảm giá. Xin lưu ý rằng giá phải là số âm. Áp dụng cho suggesteddOrder.otherItems.
  • GRATUITY: Mục hàng trọng số. Thường dành riêng cho SubmitOrderRequestMessage cho mẹo do người dùng chọn. Áp dụng cho RecommendeddOrder.otherItems.
  • DELIVERY: Mục hàng phân phối. Áp dụng cho suggesteddOrder.otherItems.
  • SUBTOTAL: Mục hàng là tổng số phụ. Áp dụng cho suggesteddOrder.otherItems.
  • FEE: Mục hàng bổ sung không có trong các loại khác. Áp dụng cho RecommendeddOrder.otherItems.

Vị trí

Chỉ định một địa chỉ để đặt món ăn. Loại Location được dùng trong một Cart để chỉ cho biết điểm đến của một đơn đặt hàng giao hàng. Vị trí cuối cùng cũng hiển thị trong TransactionDecisionValue nếu người dùng đặt hàng. Đối với các đơn đặt hàng có chỉ định đến lấy hàng, vị trí là không được đưa vào (thậm chí không phải là một giá trị trống).

Bảng sau đây liệt kê các thuộc tính của loại Location:

Thuộc tính Loại Mô tả
coordinates Coordinates
formattedAddress String

Địa chỉ hiển thị của vị trí.

Ví dụ: 1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States

postalAddress PostalAddress
zipCode String

Ví dụ: 90210

city String

Tên của thành phố.

Ví dụ: Los Angeles

notes String

Ghi chú về vị trí, chẳng hạn như mã cổng. Tên chỉ được dài tối đa 500 ký tự.

Ví dụ: Gate code is #111

Ví dụ sau đây cho thấy phần tử Location:

Ví dụ:

{
  "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"
}

Người bán

Bảng sau đây liệt kê các thuộc tính của loại Merchant:

Thuộc tính Loại Mô tả
id String

Mã người bán. Nếu được chỉ định, hãy khớp với Restaurant.@id trong nguồn cấp dữ liệu Nhà hàng.

Ví dụ: https://www.exampleprovider.com/merchant/id1

name String

Bắt buộc.

Tên hiển thị của người bán.

Ví dụ: Falafel Bite

Ví dụ sau đây cho thấy phần tử Merchant:

Ví dụ:

{
  "id": "https://www.exampleprovider.com/merchant/id1",
  "name": "Falafel Bite"
}

Tiền

Bảng sau đây liệt kê các thuộc tính của loại Money:

Thuộc tính Loại Mô tả
currencyCode String

Bắt buộc.

Mã đơn vị tiền tệ gồm 3 chữ cái theo định dạng ISO 4217.

Ví dụ: USD

units String

Toàn bộ đơn vị của số tiền. Ví dụ: nếu CurrencyCode là "USD", thì "1" 1 đô la Mỹ.

Ví dụ: 36

nanos Số nguyên

Số lượng nano (10^-9) đơn vị của lượng. Giá trị phải nằm trong khoảng từ -999.999.999 đến +999.999.999, tính toàn bộ. Áp dụng các quy tắc sau: Nếu có đơn vị là số dương, thì nano phải có giá trị dương hoặc bằng 0. Nếu đơn vị bằng 0, nano có thể có giá trị dương, 0 hoặc âm. Nếu có đơn vị là số âm, thì nano phải có giá trị âm hoặc bằng 0. Ví dụ: $-1.75 được biểu diễn dưới dạng đơn vị = -1 và nano = -750.000.000.

Ví dụ: 730000000

Ví dụ sau đây cho thấy phần tử Money:

Ví dụ 1

{
  "currencyCode": "USD",
  "units": "36",
  "nanos": 730000000
}

Ví dụ 2

{
  "currencyCode": "EUR",
  "units": "10"
}

Đặt

Chứa đơn đặt hàng cuối cùng, bao gồm thuế, phí và phí giao hàng, như cũng như thông tin thanh toán. Hành động của bạn sẽ nhận được đối tượng này trong một Submit AppRequest.

Bảng sau đây liệt kê các thuộc tính của loại Order:

Thuộc tính Loại Mô tả
finalOrder ProposedOrder

Bắt buộc.

Đơn đặt hàng được đề xuất đã tạo ra đơn đặt hàng.

googleOrderId String

Bắt buộc.

Mã đơn hàng do Google chỉ định. Mã nhận dạng này phải là mã cố định trong toàn bộ vòng đời của một đơn đặt hàng. Người dùng cuối không nhìn thấy mã nhận dạng này.

orderDate Dấu thời gian ISO

Bắt buộc.

Ngày và giờ tạo đơn đặt hàng.

paymentInfo PaymentInfo

Bắt buộc.

Thông tin thanh toán tương ứng với khoản thanh toán cho đơn đặt hàng này.

Ví dụ sau đây cho thấy phần tử Order:

Ví dụ:

{
  "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

Bảng sau đây mô tả các trường của loại OrderUpdate đang được bao gồm trong AppResponse.

Bảng sau đây liệt kê các thuộc tính của loại OrderUpdate:

Thuộc tính Loại Mô tả
actionOrderId String

Bắt buộc.

Mã nhận dạng duy nhất của đơn đặt hàng trong hệ thống của nhà tích hợp, dùng để xác định thứ tự gửi bản cập nhật. Nếu biên nhận.user_visible_order_id không được cung cấp ít nhất một lần trong OrderUpdate cho một "CREATED" đơn đặt hàng, mã này sẽ là mã nhận dạng hiển thị của người dùng đã nhập xuất hiện trong thẻ đơn đặt hàng của Google.

orderState OrderState

Bắt buộc.

Trạng thái mới của đơn đặt hàng.

lineItemUpdates Map<String, LineItemUpdate>
updateTime Dấu thời gian ISO

Bắt buộc.

Thời điểm cập nhật đơn đặt hàng.

orderManagementActions Danh sách<OrderManagementAction>

Các thao tác sau khi đặt hàng như liên hệ với nhóm hỗ trợ và xem chi tiết đơn đặt hàng.

Không được có ít hơn 1 mục và không quá 6 mục.

rejectionInfo RejectionInfo

Bắt buộc khi orderState.state = "REJECTED".

cancellationInfo CancellationInfo

Bắt buộc khi orderState.state = "CANCELLED".

inTransitInfo InTransitInfo

Trường này không còn được dùng nữa.

fulfillmentInfo FulfillmentInfo

Trường này không còn được dùng nữa.

receipt Receipt

Bắt buộc khi orderState.state = "CONFIRMED", "IN_PREPARATION", or "READY_FOR_PICKUP".

Cung cấp mã đơn hàng mà người dùng có thể thấy trong biên nhận.

totalPrice Price

Tổng giá của đơn đặt hàng.

infoExtension FoodOrderUpdateExtension

Xác định thêm thông tin chi tiết khác về thông tin cập nhật đơn đặt hàng, chẳng hạn như khoảng thời gian giao hàng hoặc đến lấy hàng dự kiến.

Ví dụ sau đây cho thấy phần tử OrderUpdate:

Ví dụ:

{
  "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

Bảng sau đây liệt kê các thuộc tính của loại PickupInfo:

Thuộc tính Loại Mô tả
pickupTimeIso8601 String

Thời gian đến lấy hàng ước tính, theo định dạng dấu thời gian ISO 8601: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời lượng: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M thể hiện thời lượng 90 phút. Giá trị mặc định "PT0M" cho biết thời gian đến lấy hàng bạn mong muốn là sớm nhất có thể. Tài liệu tham khảo: https://en.wikipedia.org/wiki/ISO_8601#Joind_date_and_time_representations. Hãy sử dụng thuộc tính này để cập nhật thời gian đến lấy hàng dự kiến trong quá trình phản hồi quy trình thanh toán.

Ví dụ: PT90M

Ví dụ sau đây cho thấy phần tử PickupInfo:

Ví dụ:

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress (Địa chỉ bưu điện)

Bảng sau đây liệt kê các thuộc tính của loại PostalAddress:

Thuộc tính Loại Mô tả
regionCode String

Bắt buộc.

Mã quốc gia gồm hai chữ cái.

Ví dụ: US

postalCode String

Mã bưu chính.

Ví dụ: 94043

administrativeArea String

Phân khu hành chính cao nhất dùng cho địa chỉ bưu chính của một quốc gia hoặc khu vực. Đây có thể là một tiểu bang, một tỉnh, một vùng hoặc một tỉnh.

Ví dụ: CA

locality String

Thành phố hoặc thị trấn cho vị trí này. Trong các khu vực trên thế giới nơi các địa phương không được xác định rõ hoặc không phù hợp với cấu trúc này, không chỉ định địa phương và sử dụng trường addressLines thay vào đó.

Ví dụ: Mountain View

addressLines List<String>

Bạn có thể sử dụng một hoặc nhiều dòng để chỉ định địa chỉ đường phố. Bạn không nên sửa đổi trường này vì trường này có thể chứa các khu vực không rõ ràng.

Ví dụ: [ "1350 Charleston Road" ]

recipients List<String>

Danh sách người nhận đơn đặt hàng. Trường này chỉ có trong billingAddress.

Ví dụ sau đây cho thấy phần tử PostalAddress:

Ví dụ:

{
  "regionCode": "US",
  "postalCode": "94043",
  "administrativeArea": "CA",
  "locality": "Mountain View",
  "addressLines": [
    "1350 Charleston Road"
  ]
}

Giá

Bảng sau đây liệt kê các thuộc tính của loại Price:

Thuộc tính Loại Mô tả
type Enum [ "ESTIMATE", "ACTUAL" ]

Bắt buộc.

Mã giảm giá khuyến mãi.

amount Money

Bắt buộc.

Khuyến mãi

Bảng sau đây liệt kê các thuộc tính của loại Promotion:

Thuộc tính Loại Mô tả
coupon String

Bắt buộc.

Mã giảm giá khuyến mãi.

ProposedOrder

Bảng sau đây liệt kê các thuộc tính của loại ProposedOrder:

Thuộc tính Loại Mô tả
id String

Mã không bắt buộc cho đơn đặt hàng đề xuất.

cart Cart

Bắt buộc.

Các mặt hàng của người dùng.

otherItems Danh sách<LineItem>

Các mặt hàng do nhà cung cấp thêm vào, chẳng hạn như phí giao hàng, các khoản phí khác và thuế. otherItems cũng có thể chứa tiền thưởng và/hoặc khoản chiết khấu do người dùng thêm vào.

Không được nhiều hơn 10 mục.

image Image

Hình ảnh được liên kết với đơn đặt hàng được đề xuất.

totalPrice Price

Bắt buộc.

Tổng giá của đơn đặt hàng được đề xuất.

extension FoodOrderExtension

Bắt buộc.

Xác định thông tin về cách thực hiện đơn hàng cho đơn đặt món.

disclaimers Danh sách<Disclaimer>

Tương ứng với thông báo tuyên bố từ chối trách nhiệm sẽ được hiển thị trong giao diện người dùng trước khi đặt hàng.

Ví dụ sau đây cho thấy phần tử ProposedOrder:

Ví dụ:

{
  "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

Bảng sau đây liệt kê các thuộc tính của loại SublineNote:

Thuộc tính Loại Mô tả
note String

Bắt buộc.

Dấu thời gian

Ngày và giờ, ở định dạng sau: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"

TransactionDecisionValue

Chứa Order.

Bảng sau đây liệt kê các thuộc tính của loại TransactionDecisionValue:

Thuộc tính Loại Mô tả
order Order

Bắt buộc.

Đơn đặt hàng sẽ được đặt cùng với thông tin thanh toán.

Ví dụ sau đây cho thấy phần tử TransactionDecisionValue:

Ví dụ:

{
  "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"
    }
  }
}

Thực hiện Yêu cầu

AppRequest

Bảng sau đây liệt kê các thuộc tính của loại AppRequest:

Thuộc tính Loại Mô tả
isInSandbox Boolean

Cho biết liệu các giao dịch tiếp theo có được thực hiện trong môi trường hộp cát hay không.

conversation Conversation
inputs Danh sách<Input>

Bắt buộc.

Chứa các đối số dự kiến để thanh toán giỏ hàng.

Phải có chính xác 1 mục.

Ví dụ sau đây cho thấy phần tử AppRequest:

Ví dụ 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"
              }
            }
          }
        }
      ]
    }
  ]
}

Ví dụ 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 là một AppRequest với ý định actions.foodordering.intent.CHECKOUT.

SubmitOrderRequestMessage

SubmitOrderRequestMessage là một AppRequest với ý định actions.foodordering.intent.TRANSACTION_DECISION.

Cuộc trò chuyện

Conversation chỉ dành riêng cho một phiên. Bạn có thể sử dụng báo cáo này để liên kết nhiều CheckoutSubmitOrder cùng thực hiện các thao tác nếu cần.

Bảng sau đây liệt kê các thuộc tính của loại Conversation:

Thuộc tính Loại Mô tả
conversationId String

Bắt buộc.

Mã nhận dạng duy nhất của cuộc trò chuyện.

Ví dụ sau đây cho thấy phần tử Conversation:

Ví dụ:

{
  "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ"
}

Đầu vào

Các đối số dự kiến để thanh toán giỏ hàng.

Bảng sau đây liệt kê các thuộc tính của loại Input:

Thuộc tính Loại Mô tả
intent Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ]

Bắt buộc.

Đặt thành "action.foodordering.intent.dispute" cho thông báo yêu cầu thanh toán HOẶC " actions.intent.TRANSACTION_DECISION" cho nội dung gửi yêu cầu đặt hàng.

arguments Danh sách<Argument>

Bắt buộc.

Chứa thông tin về Giỏ hàng cần thanh toán hoặc đơn đặt hàng

Phải có chính xác 1 mục.

Đối số

Chứa thông tin chi tiết về các mặt hàng thực phẩm mà người dùng muốn thanh toán. Đối với quy trình thanh toán, chỉ được gia hạn. Đối với đơn đặt hàng gửi, chỉ áp dụng transactionDecisionValue

Bảng sau đây liệt kê các thuộc tính của loại Argument:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
extension Nhóm 1 Cart

Chi tiết các mặt hàng thực phẩm mà người dùng muốn thanh toán.

transactionDecisionValue Nhóm 2 TransactionDecisionValue

Chứa đơn đặt hàng sẽ được đặt cùng với thông tin thanh toán.

Phản hồi về việc thực hiện đơn hàng

AppResponse

Bảng sau đây liệt kê các thuộc tính của loại AppResponse:

Thuộc tính Loại Mô tả
expectUserResponse Liên tục

Đặt thành false.

Giá trị: False

finalResponse FinalResponse

Bắt buộc.

Chứa nội dung phản hồi của bạn đối với việc thanh toán giỏ hàng.

Ví dụ sau đây cho thấy phần tử AppResponse:

Ví dụ 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."
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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"
              }
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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 là một AppResponsecheckoutResponse hoặc error trong StructuredResponse.

SubmitOrderResponseMessage

SubmitOrderResponseMessage là một AppResponseorderUpdate trong StructuredResponse.

FinalResponse

Phản hồi của bạn cho việc thanh toán giỏ hàng hoặc SubmitOrderRequestMessage.

Bảng sau đây liệt kê các thuộc tính của loại FinalResponse:

Thuộc tính Loại Mô tả
richResponse RichResponse

Bắt buộc.

Chứa phản hồi của bạn đối với CheckoutRequestMessage hoặc SubmitOrderRequestMessage.

CheckoutResponse

Bảng sau đây liệt kê các thuộc tính của loại CheckoutResponse:

Thuộc tính Loại Mô tả
proposedOrder ProposedOrder

Bắt buộc.

Đơn đặt hàng được đề xuất để sử dụng cho giao dịch.

paymentOptions PaymentOptions

Bắt buộc.

Đã chọn phương thức thanh toán mặc định cho người dùng.

additionalPaymentOptions Danh sách<PaymentOptions>

Các phương thức thanh toán thay thế dành cho người dùng.

Ví dụ sau đây cho thấy phần tử CheckoutResponse:

Ví dụ:

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

Mục

Chứa nội dung phản hồi của bạn đối với việc thanh toán giỏ hàng hoặc SubmitOrderRequestMessage.

Bảng sau đây liệt kê các thuộc tính của loại Item:

Thuộc tính Loại Mô tả
structuredResponse StructuredResponse

Bắt buộc.

RichResponse

Chứa nội dung phản hồi của bạn đối với một giao dịch thanh toán giỏ hàng.

Bảng sau đây liệt kê các thuộc tính của loại RichResponse:

Thuộc tính Loại Mô tả
items Danh sách<Item>

Bắt buộc.

Phải có chính xác 1 mục.

StructuredResponse

Đối với CheckoutResponseMessage, một trong những trường hợp sau có thể là: CheckoutResponse Cho biết quá trình thanh toán thành công. HOẶC FoodErrorExtension: Cho biết có lỗi khi thanh toán. Câu trả lời có thể bao gồm RecommendeddOrder và PaymentOptions đã sửa đổi hoặc thông báo lỗi không có PaymentOptions. Đối với SubmitOrderResponseMessage, chỉ có orderUpdate.

Bảng sau đây liệt kê các thuộc tính của loại StructuredResponse:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
checkoutResponse Nhóm 1 CheckoutResponse

Các mặt hàng đã thanh toán cộng với các khoản thuế và chiết khấu.

error Nhóm 2 FoodErrorExtension

Đã phát hiện lỗi trong các mặt hàng trong giỏ hàng. Tuỳ thuộc vào bản chất của lỗi, thuộc tính này có thể bao gồm RecommendeddOrder và PaymentOptions đã sửa hoặc chỉ có một thông báo lỗi không có PaymentOptions.

orderUpdate Nhóm 3 OrderUpdate

Cập nhật thứ tự không đồng bộ

Phần này mô tả các loại cấp cao tạo nên yêu cầu và phản hồi của một tương tác thông thường, tích hợp sẵn trong hành động đặt món ăn.

AsyncOrderUpdateRequestMessage

Thông báo cho người dùng về các thay đổi sau khi đơn hàng đã được gửi và xác nhận. Ví dụ: Bạn có thể thông báo cho người dùng rằng đơn đặt hàng đang được vận chuyển hoặc đã thay đổi. Để biết thêm thông tin, hãy xem

Bảng sau đây liệt kê các thuộc tính của loại AsyncOrderUpdateRequestMessage:

Thuộc tính Loại Mô tả
isInSandbox Boolean

Cho biết đơn đặt hàng được gửi bản cập nhật này là khoản thanh toán trong hộp cát.

customPushMessage CustomPushMessage

Bắt buộc.

Chứa OrderUpdate của yêu cầu.

Ví dụ sau đây cho thấy phần tử AsyncOrderUpdateRequestMessage:

Ví dụ:

{
  "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

Sau khi bạn gửi thành công một AsyncOrderUpdateRequestMessage, Google sẽ phản hồi có trạng thái HTTP 200 và nội dung trống. Nếu cập nhật không thành công, Google sẽ trả lời kèm theo thông tin chi tiết về lý do không cập nhật được đơn đặt hàng.

Loại thông tin cập nhật về đơn đặt hàng

Nút

Xác định một phần tử giao diện người dùng mà bạn có thể thêm để cung cấp tương tác cho người dùng.

Bảng sau đây liệt kê các thuộc tính của loại Button:

Thuộc tính Loại Mô tả
title String

Bắt buộc.

Nhãn hiển thị. Hãy sử dụng cách viết hoa đầu câu, dài tối đa 30 ký tự để đảm bảo hiển thị chính xác.

Ví dụ: Contact us

openUrlAction OpenUrlAction

Bắt buộc.

Ví dụ sau đây cho thấy phần tử Button:

Ví dụ:

{
  "title": "Send us feedback",
  "openUrlAction": {
    "url": "mailto:person@example.com"
  }
}

CancellationInfo

Bảng sau đây liệt kê các thuộc tính của loại CancellationInfo:

Thuộc tính Loại Mô tả
reason String

Bắt buộc.

Văn bản có thể hiển thị lý do từ chối khi OrderState.state có giá trị là "CANCELLED".

Ví dụ: Restaurant closed

Ví dụ sau đây cho thấy phần tử CancellationInfo:

Ví dụ:

{
  "reason": "Insufficient inventory"
}

FoodOrderUpdateExtension

Loại này cung cấp cho người dùng một khoảng thời gian ước tính về thời điểm đơn đặt hàng đã giao hoặc sẵn sàng để nhận hàng. Gửi tiện ích này trong OrderUpdate bất cứ khi nào thông tin có sẵn hoặc đã thay đổi kể từ lần gửi gần đây nhất.

Cung cấp số liệu ước tính thận trọng cho khoảng thời gian thực hiện đơn hàng để người dùng các kỳ vọng đều được đáp ứng một cách nhất quán. Ví dụ: nếu đơn đặt hàng được ước tính là phân phối vào lúc 13:00 hôm nay, bạn nên gửi khoảng thời gian ước tính là phù hợp với sự thay đổi do điều kiện giao thông, chẳng hạn như lúc 12:45 hôm nay đến 13:15.

Thời lượng hoặc dấu thời gian ISO 8601 được diễn giải có nghĩa là khoảng thời gian từ updateTime của OrderUpdate (về bản chất, "hiện tại") cho updateTime cộng với duration. Đừng dùng định dạng này trừ phi "ngay bây giờ" thực sự là một kỳ vọng hợp lý.

Khoảng thời gian ISO 8601 được diễn giải là khoảng thời gian từ khi bắt đầu đến cuối khoảng thời gian.

Bảng sau đây liệt kê các thuộc tính của loại FoodOrderUpdateExtension:

Thuộc tính Loại Mô tả
@type Liên tục

Loại phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension

estimatedFulfillmentTimeIso8601 String

Thời gian dự kiến khi đơn đặt hàng được giao hoặc có thể đến lấy. Chuỗi phải theo định dạng ISO 8601 và phải tương ứng với một khoảng thời gian thay vì một khoảng thời gian cố định. Các quy ước được chấp nhận là: Khoảng thời gian, Thời lượng và Ngày/Giờ. Trường này có thể được gửi trong SubmitOrderResponseMessage hoặc AsyncOrderUpdateRequestMessage khi thông tin có sẵn hoặc có thay đổi, chẳng hạn như những người đến sớm hoặc bị chậm trễ.

Ví dụ: 2017-07-17T13:00:00Z/2017-07-17T13:30:00Z

foodOrderErrors Danh sách<FoodOrderError>

Mô tả lỗi đã xảy ra sau khi đặt hàng. Bạn nên chọn một lỗi cho mỗi giỏ hàng hoặc mỗi mặt hàng. Sử dụng FoodOrderUpdateExtension.FoodOrderErrors cho bất kỳ lỗi nào không được CPCionInfo xử lý.

Phải có không quá 1 mục.

Ví dụ sau đây cho thấy phần tử FoodOrderUpdateExtension:

Ví dụ 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
  "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
}

Ví dụ 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

Bảng sau đây liệt kê các thuộc tính của loại FulfillmentInfo:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
deliveryTime Nhóm 1 Dấu thời gian ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

pickupTime Nhóm 2 Dấu thời gian ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

Ví dụ sau đây cho thấy phần tử FulfillmentInfo:

Ví dụ 1

{
  "deliveryTime": "2017-05-10T02:36:38.803Z"
}

Ví dụ 2

{
  "pickupTime": "2019-12-26T07:24:27.803Z"
}

InTransitInfo

Bảng sau đây liệt kê các thuộc tính của loại InTransitInfo:

Thuộc tính Loại Mô tả
updatedTime Dấu thời gian ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

Ví dụ sau đây cho thấy phần tử InTransitInfo:

Ví dụ:

{
  "updatedTime": "2017-05-10T02:36:38.803Z"
}

LineItemUpdate

Bảng sau đây liệt kê các thuộc tính của loại LineItemUpdate:

Thuộc tính Loại Mô tả
orderState OrderState
price Price
reason String

Lý do thay đổi. Bắt buộc khi giá thay đổi.

Ví dụ sau đây cho thấy phần tử LineItemUpdate:

Ví dụ:

{
  "orderState": {
    "state": "CONFIRMED",
    "label": "Provider confirmed"
  },
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "5",
      "nanos": 500000000
    }
  },
  "reason": "Menu updated prices."
}

OpenUrlAction

Bảng sau đây liệt kê các thuộc tính của loại OpenUrlAction:

Thuộc tính Loại Mô tả
url String

Bắt buộc.

Hành động được kích hoạt bằng cách nhấp hoặc chạm vào nút. Danh sách các tiền tố có thể áp dụng phụ thuộc vào orderManagementActionType. "EMAIL": Tiền tố phải là "mailto". "CALL": Tiền tố phải là "tel". "CUSTOMER_SERVICE": Tiền tố phải là "mailto", "tel", "http" hoặc "https".

Ví dụ: https://www.google.com

OrderManagementAction

Tính năng quản lý đơn đặt hàng cho phép người dùng nhận hỗ trợ sau khi đặt hàng và sẽ được gửi đến mỗi OrderUpdate trong đơn đặt hàng đã gửi AppResponse và mỗi lượt chuyển đổi tiếp theo AsyncOrderUpdateRequestMessage Các thao tác quản lý đơn đặt hàng được gửi cho một đơn đặt hàng cụ thể có thể thay đổi tuỳ theo trạng thái.

Ví dụ: trong quá trình "CREATED" trạng thái, CUSTOMER_SERVICE có thể tham chiếu đến điện thoại hỗ trợ khách hàng. Sau đó, trong mục "ĐÃ XÁC NHẬN" tiểu bang, CUSTOMER_SERVICE có thể đổi sang điện thoại của nhà hàng nếu đó là điểm tốt nhất địa chỉ liên hệ cho khách hàng. Tương tự, khi đơn đặt hàng nằm trong chuỗi "FULFILLED" tiểu bang, CUSTOMER_SERVICE có thể tham khảo các địa chỉ email hỗ trợ của bạn.

Bảng sau đây liệt kê các thuộc tính của loại OrderManagementAction:

Thuộc tính Loại Mô tả
type OrderManagementActionType

Bắt buộc.

button Button

Bắt buộc.

Ví dụ sau đây cho thấy phần tử OrderManagementAction:

Ví dụ 1

{
  "type": "CUSTOMER_SERVICE",
  "button": {
    "title": "Contact customer service",
    "openUrlAction": {
      "url": "mailto:support@example.com"
    }
  }
}

Ví dụ 2

{
  "type": "EMAIL",
  "button": {
    "title": "Email restaurant",
    "openUrlAction": {
      "url": "mailto:person@example.com"
    }
  }
}

OrderManagementActionType

Xác định các loại liên quan đến OrderManagementAction.

Loại OrderManagementActionType có thể có các giá trị sau:

  • CUSTOMER_SERVICE: Địa chỉ email và/hoặc số điện thoại liên hệ của bộ phận dịch vụ khách hàng sẽ xuất hiện trên trang xác nhận đơn đặt hàng. Đây là thông tin bắt buộc. Tiền tố openUrlAction.url phải là "mailto", "tel", "http" hoặc "https".
  • EMAIL: Chỉ thực hiện thao tác qua email đối với trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "mailto".
  • CALL_DRIVER: Chỉ hành động gọi trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "tel".
  • CALL_RESTAURANT: Chỉ hành động gọi trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "tel".

OrderState

Trạng thái hiện tại của đơn đặt hàng. Mỗi giá trị state của OrderState cũng tương ứng với trạng thái mua hàng trên myaccount.google.com.

Bảng sau đây liệt kê các thuộc tính của loại OrderState:

Thuộc tính Loại Mô tả
state OrderStateEnum

Bắt buộc.

label String

Bắt buộc.

Chuỗi hiển thị cho người dùng thấy cho trạng thái. Sử dụng cách viết hoa đầu câu.

Ví dụ: Your order has been received

Ví dụ sau đây cho thấy phần tử OrderState:

Ví dụ:

{
  "state": "CONFIRMED",
  "label": "Provider confirmed"
}

OrderStateEnum

Xác định các loại liên quan đến OrderState.

Loại OrderStateEnum có thể có các giá trị sau:

  • CREATED: Đơn đặt hàng do nhà tích hợp tạo và đang chờ nhà cung cấp xác nhận. Tương ứng với trạng thái "Đã đặt hàng" trạng thái mua hàng.
  • CONFIRMED: Đơn đặt hàng đã được nhà cung cấp xác nhận và đang có hiệu lực. Tương ứng với trạng thái "Đã chấp nhận" trạng thái mua hàng.
  • REJECTED: Đơn đặt hàng bị đối tác tích hợp hoặc nhà cung cấp từ chối. Tương ứng với trạng thái "Bị từ chối" trạng thái mua hàng.
  • CANCELLED: Người dùng đã huỷ đơn đặt hàng. Tương ứng với trạng thái "Đã huỷ" trạng thái mua hàng.
  • IN_PREPARATION: Thức ăn đang được chuẩn bị. Tương ứng với "Trạng thái không xác định" trạng thái mua hàng.
  • READY_FOR_PICKUP: Đồ ăn đã sẵn sàng để bạn đến lấy. Tương ứng với trạng thái "Sẵn sàng để đến lấy hàng" trạng thái mua hàng.
  • IN_TRANSIT: Đơn đặt hàng đang được giao. Tương ứng với trạng thái "Đang xử lý" trạng thái mua hàng.
  • FULFILLED: Người dùng đã nhận được sản phẩm/dịch vụ được đặt hàng. Tương ứng với nút "Đã nhận" trạng thái mua hàng.

Biên Lai

Gửi loại này trong đơn đặt hàng AppResponse, trong đó OrderState là "CONFIRMED" (ĐÃ XÁC NHẬN), "FULFILLED" hoặc "IN_TRANSIT". Gửi biên nhận tại khi userVisibleOrderId có sẵn. Bạn không cần giữ lại gửi biên nhận trong các bản cập nhật tiếp theo.

Bảng sau đây liệt kê các thuộc tính của loại Receipt:

Thuộc tính Loại Mô tả
userVisibleOrderId String

Bắt buộc.

Bắt buộc nếu đơn đặt hàng có trạng thái là "CONFIRMED", "IN_TRANSIT" hoặc "FULFILLED". Trường này là mã nhận dạng dành riêng cho người dùng của đơn đặt hàng này (thường là mã đơn hàng của nhà hàng), hiển thị trong cả biên nhận của nhà tích hợp và thẻ đặt hàng của Google. Người dùng phải sử dụng được mã này để tham chiếu đơn đặt hàng của họ cho dịch vụ khách hàng với nhà cung cấp và đối tác tích hợp. Bạn chỉ cần cung cấp mã này một lần trong một đơn đặt hàng bất kỳ. Cho đến khi được cung cấp, actionOrderId là userVisibleOrderId. Ví dụ: Bạn có thể không có userVisibleOrderId cho đến khi nhà hàng xác nhận đơn đặt hàng. Sau khi xác nhận, bạn phải gửi AsyncOrderUpdateRequestMessage cùng với OrderUpdate và Biên nhận.

Ví dụ sau đây cho thấy phần tử Receipt:

Ví dụ:

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

Bảng sau đây liệt kê các thuộc tính của loại RejectionInfo:

Thuộc tính Loại Mô tả
type RejectionType

Bắt buộc.

reason String

Lý do từ chối được dùng cho hoạt động ghi nhật ký nội bộ. Người dùng sẽ không nhìn thấy trường này.

Ví dụ sau đây cho thấy phần tử RejectionInfo:

Ví dụ:

{
  "type": "PAYMENT_DECLINED",
  "reason": "There is an issue with payment processing."
}

RejectionType

Loại RejectionType có thể có các giá trị sau:

  • INELIGIBLE: Người dùng không đủ điều kiện do lo ngại về chính sách hoặc rủi ro.
  • PAYMENT_DECLINED: Đã xảy ra sự cố khi xử lý khoản thanh toán.
  • UNAVAILABLE_SLOT: Đơn đặt hàng không thể được thực hiện tại thời điểm đặt hàng trước do DeliveryInfo hoặc PickupInfo chỉ định.
  • PROMO_NOT_APPLICABLE: Đã xảy ra vấn đề với chương trình khuyến mãi.
  • UNKNOWN: Bất kỳ lý do nào khác.

Các loại liên quan đến thanh toán

Phần này mô tả các hình thức liên quan đến thanh toán được dùng khi đặt món ăn phương thức thực hiện.

ActionProvidedPaymentOptions

Các yêu cầu đối với phương thức thanh toán do hành động cung cấp.

Bảng sau đây liệt kê các thuộc tính của loại ActionProvidedPaymentOptions:

Thuộc tính Loại Mô tả
paymentType PaymentType

Bắt buộc.

displayName String

Bắt buộc.

Tên của phương thức thanh toán trên biên lai.

Ví dụ: Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

Dữ liệu bổ sung cho paymentType "ON_FULFILLMENT". Ví dụ: Bạn có thể sử dụng trường này để cho biết liệu chúng tôi có hỗ trợ tiền mặt hay thẻ khi thực hiện đơn hàng hay không.

Ví dụ sau đây cho thấy phần tử ActionProvidedPaymentOptions:

Ví dụ:

{
  "paymentType": "ON_FULFILLMENT",
  "displayName": "Pay when you get your food.",
  "onFulfillmentPaymentData": {
    "supportedPaymentOptions": [
      "Cash",
      "Card"
    ]
  }
}

AllowedAuthMethods

Loại AllowedAuthMethods có thể có các giá trị sau:

  • PAN_ONLY: Phương thức xác thực được liên kết với thẻ thanh toán được lưu trữ trong hồ sơ bằng Tài khoản Google của người dùng. Dữ liệu thanh toán được trả lại bao gồm số tài khoản cá nhân (PAN) có tháng hết hạn và năm hết hạn.

AllowedCardNetworks

Loại AllowedCardNetworks có thể có các giá trị sau:

  • AMEX
  • DISCOVER
  • INTERAC
  • JCB
  • MASTERCARD
  • VISA

BillingAddressParameters

Đối tượng này cho phép bạn đặt các trường bổ sung sẽ được trả về cho một địa chỉ thanh toán đã yêu cầu.

Bảng sau đây liệt kê các thuộc tính của loại BillingAddressParameters:

Thuộc tính Loại Mô tả
format String

Phải có định dạng địa chỉ thanh toán để hoàn tất giao dịch. MIN: Tên, mã quốc gia và mã bưu điện. ĐẦY ĐỦ: Tên, địa chỉ đường phố, thành phố, khu vực, mã quốc gia và mã bưu chính.

Ví dụ sau đây cho thấy phần tử BillingAddressParameters:

Ví dụ 1

{
  "format": "MIN"
}

Ví dụ 2

{
  "format": "FULL"
}

CardParameters

Hãy sử dụng đối tượng này để định cấu hình tính năng hỗ trợ trang web của bạn cho Google Pay API.

Bảng sau đây liệt kê các thuộc tính của loại CardParameters:

Thuộc tính Loại Mô tả
allowedAuthMethods List<Const>

Bắt buộc.

Các trường được hỗ trợ để xác thực giao dịch thẻ.

Không được có ít hơn 1 mục.

allowedCardNetworks Danh sách<AllowedCardNetworks>

Bắt buộc.

Một hoặc nhiều mạng thẻ mà bạn hỗ trợ và cũng được Google Pay API hỗ trợ.

Phải có không quá 1 mục.

billingAddressRequired Boolean

Đặt thành true nếu bạn yêu cầu địa chỉ thanh toán. Chỉ yêu cầu địa chỉ thanh toán nếu đó là yêu cầu bắt buộc để xử lý giao dịch. Việc bổ sung yêu cầu dữ liệu có thể làm gia tăng phiền hà trong quy trình thanh toán và dẫn đến tỷ lệ chuyển đổi thấp hơn.

billingAddressParameters BillingAddressParameters

Các trường dự kiến sẽ được trả về nếu billingAddressrequired được đặt thành true.

cvcRequired Boolean

Đặt thành true nếu sử dụng TimesofMoney, false đối với tất cả các công ty xử lý thanh toán khác.

Ví dụ sau đây cho thấy phần tử CardParameters:

Ví dụ 1

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": false,
  "cvcRequired": false
}

Ví dụ 2

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": true,
  "billingAddressParameters": {
    "format": "MIN"
  },
  "cvcRequired": false
}

GoogleProvidedPaymentInstrument

Bảng sau đây liệt kê các thuộc tính của loại GoogleProvidedPaymentInstrument:

Thuộc tính Loại Mô tả
instrumentToken String

Bắt buộc.

Chuỗi được mã hoá cơ sở 64 chứa mã thanh toán để tính phí người dùng thông qua một công ty xử lý Google Pay tham gia, theo GoogleProvidedPaymentOptions được chỉ định trước đó.

billingAddress PostalAddress

Địa chỉ thanh toán cho khoản thanh toán.

Ví dụ sau đây cho thấy phần tử GoogleProvidedPaymentInstrument:

Ví dụ:

{
  "instrumentToken": "abcd",
  "billingAddress": {
    "regionCode": "US",
    "postalCode": "94043",
    "administrativeArea": "CA",
    "locality": "Mountain View",
    "addressLines": [
      "1350 Charleston Road"
    ]
  }
}

GoogleProvidedPaymentOptions

Các yêu cầu đối với phương thức thanh toán do Google cung cấp.

Bảng sau đây liệt kê các thuộc tính của loại GoogleProvidedPaymentOptions:

Thuộc tính Loại Mô tả
facilitationSpecification String

JSON PaymentDataRequest dưới dạng chuỗi. Hãy sử dụng đối tượng này để định cấu hình tính năng hỗ trợ trang web của bạn cho Google Pay API.

supportedCardNetworks Danh sách<SupportedCardNetworks>

Thay vào đó, hãy sử dụng facilitationSpecification. Loại mạng thẻ mà nhân viên hỗ trợ hỗ trợ.

Trường này không còn được dùng nữa.

prepaidCardDisallowed Boolean

Thay vào đó, hãy sử dụng facilitationSpecification. Liệu có cho phép sử dụng thẻ trả trước làm hình thức thanh toán hay không.

Trường này không còn được dùng nữa.

billingAddressRequired Boolean

Thay vào đó, hãy sử dụng facilitationSpecification. Liệu có bắt buộc địa chỉ thanh toán hay không.

Trường này không còn được dùng nữa.

tokenizationParameters TokenizationParameters

Trường này không còn được dùng nữa.

Ví dụ sau đây cho thấy phần tử GoogleProvidedPaymentOptions:

Ví dụ 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\"}}"
}

Ví dụ 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
}

Ví dụ 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

Hãy sử dụng đối tượng này để định cấu hình tính năng hỗ trợ trang web của bạn cho Google Pay API.

Bảng sau đây liệt kê các thuộc tính của loại MerchantInfo:

Thuộc tính Loại Mô tả
merchantId String

Mã nhận dạng người bán của Google do Google Pay cấp cho bạn.

merchantName String

Bắt buộc.

Tên người bán được mã hoá dưới dạng UTF-8. Tên người bán xuất hiện trong bảng thanh toán.

OnFulfillmentPaymentData

Sử dụng đối tượng này để gửi dữ liệu bổ sung cho PaymentType "ON_FULFILLMENT".

Bảng sau đây liệt kê các thuộc tính của loại OnFulfillmentPaymentData:

Thuộc tính Loại Mô tả
supportedPaymentOptions Danh sách<PaymentOptionsEnums>

Danh sách các phương thức thanh toán mà người dùng có thể sử dụng tại thời điểm thực hiện đơn đặt hàng.

Ví dụ sau đây cho thấy phần tử OnFulfillmentPaymentData:

Ví dụ:

{
  "supportedPaymentOptions": [
    "Cash",
    "Card"
  ]
}

Thông số

Xác định các loại liên quan đến TokenizationParameters.

Bảng sau đây liệt kê các thuộc tính của loại Parameters:

Thuộc tính Loại Mô tả
gateway String

Bắt buộc.

Ví dụ: braintree

gatewayMerchantId String
[additionalKey: string] String Cặp khoá-giá trị bổ sung

Ví dụ sau đây cho thấy phần tử Parameters:

Ví dụ 1

{
  "gatewayMerchantId": "90412491",
  "gateway": "olo"
}

Ví dụ 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

Hãy sử dụng đối tượng này để định cấu hình tính năng hỗ trợ trang web của bạn cho Google Pay API.

Bảng sau đây liệt kê các thuộc tính của loại PaymentDataRequest:

Thuộc tính Loại Mô tả
apiVersion Liên tục

Bắt buộc.

Phiên bản API chính.

Giá trị: 2

apiVersionMinor Liên tục

Bắt buộc.

Phiên bản API nhỏ.

Giá trị: 0

merchantInfo MerchantInfo

Bắt buộc.

(Mã người bán trên Google Pay) Thông tin về người bán yêu cầu cung cấp dữ liệu thanh toán.

allowedPaymentMethods Danh sách<PaymentMethod>

Bắt buộc.

Chỉ định khả năng hỗ trợ một hoặc nhiều phương thức thanh toán mà Google Pay API hỗ trợ.

transactionInfo TransactionInfo

Bắt buộc.

Thông tin chi tiết về việc uỷ quyền giao dịch dựa trên việc người dùng có đồng ý với giao dịch hay không. Trường này bao gồm tổng giá và trạng thái giá.

Ví dụ sau đây cho thấy phần tử PaymentDataRequest:

Ví dụ:

{
  "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

Thông tin liên quan đến thanh toán cho một đơn đặt hàng.

Bảng sau đây liệt kê các thuộc tính của loại PaymentInfo:

Thuộc tính Loại Mô tả
displayName String

Bắt buộc.

Tên hiển thị cho người dùng của phương thức thanh toán được hiển thị trên biên nhận.

paymentType PaymentType

Bắt buộc.

googleProvidedPaymentInstrument GoogleProvidedPaymentInstrument

Mã thông báo mà hành động có thể sử dụng. Chỉ chỉ định thông tin này nếu bạn đã chỉ định GoogleProvidedPaymentOptions làm một tuỳ chọn thanh toán trong CheckoutResponseMessage.

Ví dụ sau đây cho thấy phần tử PaymentInfo:

Ví dụ 1

{
  "displayName": "Visa\u2006****\u20061111",
  "googleProvidedPaymentInstrument": {
    "instrumentToken": "abcd"
  },
  "paymentType": "PAYMENT_CARD"
}

Ví dụ 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

Hãy sử dụng đối tượng này để định cấu hình tính năng hỗ trợ trang web của bạn cho Google Pay API.

Bảng sau đây liệt kê các thuộc tính của loại PaymentMethod:

Thuộc tính Loại Mô tả
type Liên tục

Bắt buộc.

Giá trị nhận dạng ngắn của phương thức thanh toán được hỗ trợ. Hiện chỉ hỗ trợ CARD.

Giá trị: CARD

parameters CardParameters

Bắt buộc.

Các thông số bắt buộc để định cấu hình loại phương thức thanh toán được cung cấp.

tokenizationSpecification TokenizationSpecification

Bắt buộc.

Định cấu hình tài khoản hoặc nhà cung cấp dịch vụ giải mã để nhận thông tin thanh toán. Thuộc tính này là bắt buộc đối với phương thức thanh toán CARD.

Ví dụ sau đây cho thấy phần tử PaymentMethod:

Ví dụ:

{
  "type": "CARD",
  "parameters": {
    "allowedAuthMethods": [
      "PAN_ONLY"
    ],
    "allowedCardNetworks": [
      "VISA",
      "AMEX",
      "MASTERCARD"
    ],
    "billingAddressRequired": false
  },
  "tokenizationSpecification": {
    "type": "PAYMENT_GATEWAY",
    "parameters": {
      "gatewayMerchantId": "90412491",
      "gateway": "olo"
    }
  }
}

PaymentOptions

Bảng sau đây liệt kê các thuộc tính của loại PaymentOptions:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
googleProvidedOptions Nhóm 1 GoogleProvidedPaymentOptions

Loại trừ lẫn nhau với actionProvidedOptions. Sử dụng phương thức này để thanh toán trực tuyến bằng gPay.

actionProvidedOptions Nhóm 2 ActionProvidedPaymentOptions

Độc quyền lẫn nhau với googleProvidedOptions. Sử dụng cho "tiền mặt khi nhận hàng" hay "thanh toán khi thực hiện đơn hàng".

Ví dụ sau đây cho thấy phần tử PaymentOptions:

Ví dụ 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\"}}"
  }
}

Ví dụ 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\"}}"
  }
}

Ví dụ 3

{
  "actionProvidedOptions": {
    "paymentType": "ON_FULFILLMENT",
    "displayName": "Pay when you get your food.",
    "onFulfillmentPaymentData": {
      "supportedPaymentOptions": [
        "Cash",
        "Card"
      ]
    }
  }
}

PaymentOptionsEnums

Loại PaymentOptionsEnums có thể có các giá trị sau:

  • Cash
  • Card
  • UPI
  • Paytm

PaymentType

Loại PaymentType có thể có các giá trị sau:

  • PAYMENT_CARD: Đối với GoogleProvidedPaymentOptions.
  • ON_FULFILLMENT: Đối với ActionProvidedPaymentOptions.

SupportedCardNetworks

Xác định các loại liên quan đến GoogleProvidedPaymentOptions.

Loại SupportedCardNetworks có thể có các giá trị sau:

  • UNSPECIFIED_CARD_NETWORK
  • AMEX
  • DISCOVER
  • JCB
  • MASTERCARD
  • VISA

TokenizationParameters

Xác định các loại liên quan đến GoogleProvidedPaymentOptions.

Bảng sau đây liệt kê các thuộc tính của loại TokenizationParameters:

Thuộc tính Loại Mô tả
tokenizationType Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ]

Bắt buộc.

Thay vào đó, hãy sử dụng facilitationSpecification. Loại mã thông báo được chấp nhận.

parameters Parameters

Thay vào đó, hãy sử dụng facilitationSpecification.

TokenizationSpecification

Đối tượng này cho phép bạn thiết lập tài khoản để nhận thông tin thanh toán có thể tính phí.

Bảng sau đây liệt kê các thuộc tính của loại TokenizationSpecification:

Thuộc tính Loại Mô tả
type Liên tục

Bắt buộc.

parameters Parameters

Bắt buộc.

Ví dụ sau đây cho thấy phần tử TokenizationSpecification:

Ví dụ 1

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gatewayMerchantId": "1247192",
    "gateway": "cybersource"
  }
}

Ví dụ 2

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gateway": "stripe",
    "stripe:version": "2018-10-31",
    "stripe:publishableKey": "12378127"
  }
}

TransactionInfo

Đối tượng này mô tả một giao dịch giúp xác định khả năng thanh toán của người thanh toán. Tên này được dùng để trình bày hộp thoại uỷ quyền thanh toán.

Bảng sau đây liệt kê các thuộc tính của loại TransactionInfo:

Thuộc tính Loại Mô tả
currencyCode String

Bắt buộc.

Mã tiền tệ ở dạng chữ cái ISO 4217.

transactionId String

Mã nhận dạng duy nhất xác định một giao dịch. Người bán có thể sử dụng mã nhận dạng hiện có hoặc tạo một mã nhận dạng cụ thể cho các lượt giao dịch trên Google Pay. Đây là trường bắt buộc khi bạn gửi lệnh gọi lại đến API Sự kiện giao dịch của Google.

totalPriceStatus Liên tục

Bắt buộc.

Sử dụng giá trị " ƯỚC TÍNH" làm mặc định. Tổng giá có thể điều chỉnh tuỳ theo thông tin chi tiết trong nội dung phản hồi, chẳng hạn như thuế bán hàng thu dựa trên địa chỉ thanh toán.

Giá trị: ESTIMATED

totalPrice String

Bắt buộc.

Tổng giá trị tiền tệ của giao dịch với độ chính xác thập phân tuỳ chọn là 2 chữ số thập phân. Trường này phải có cùng một giá trị với cart.totalPrice.

Ví dụ sau đây cho thấy phần tử TransactionInfo:

Ví dụ:

{
  "totalPriceStatus": "ESTIMATED",
  "totalPrice": "12.34",
  "currencyCode": "USD"
}