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 về phương thức thực hiện (API Đặt hàng hai đầu) khi làm việc với API Hành động tích hợp đầu cuối theo thứ tự. Để máy có thể đọc được phiên bản thông tin này, bạn có thể tải giản đồ JSON xuống.

Loại cơ sở

Giỏ hàng

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

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

Tài sản Loại Nội dung mô tả
@type Const

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

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

id Chuỗi

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

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 hàng hoá hoặc dịch vụ mà người dùng đang đặt mua.

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 Chuỗi

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ư các lựa chọn ưu tiên về phương thức thực hiện.

Ví dụ sau đây cho thấy một 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. Tính năng này chỉ có trong AppResponse.

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

Tài sản Loại Mô tả
displayName Chuỗi

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

Ví dụ: Lovefood Ordering

email Chuỗi

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

Ví dụ: ilovefood@example.com

firstName Chuỗi

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

Ví dụ: Lovefood

lastName Chuỗi

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

Ví dụ: Ordering

phoneNumber Chuỗi

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 liệu 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 một 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 cho loại CustomPushMessage:

Tài sản Loại Nội dung 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 một 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 cho loại DeliveryInfo:

Tài sản Loại Mô tả
deliveryTimeIso8601 Chuỗi

Thời gian giao hàng dự kiến, ở định dạng dấu thời gian ISO 8601: "{năm}-{tháng}-{ngày}T{giờ}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời gian: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M biểu thị thời lượng là 90 phút. Giá trị mặc định "PT0M" cho biết thời gian giao hàng ưu tiên là càng sớm càng tốt. Tham khảo: https://vi.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_representations. Hãy sử dụng tính năng này để cập nhật thời gian giao hàng dự kiến trong phản hồi thanh toán.

Ví dụ: PT90M

Ví dụ sau đây cho thấy một 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 cho loại Disclaimer:

Tài sản Loại Nội dung 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ẽ thu của người bán một khoản phí là N cho đơn đặt hàng này.

feeAmountRange FeeAmountRange

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

feePercent Number

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

feePercentRange FeePercentRange

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

Ví dụ sau đây cho thấy một 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 tại thời điểm đặt hàng.
  • NO_CAPACITY: Không có khả năng cung cấp dịch vụ (ví dụ: ngừng dịch vụ tạm thời do giờ cao điểm).
  • NO_COURIER_AVAILABLE: Không thể xử lý đơn đặt hàng vì nhân viên giao hàng bị hạn chế.
  • REQUIREMENTS_NOT_MET: Chưa đáp ứng các hạn chế đố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: Không thể thực hiện đơn đặt hàng vào thời điểm đặt hàng trước do DeliveryInfo hoặc PickupInfo chỉ định.
  • OUT_OF_SERVICE_AREA: Không thể gửi đơn đặt hàng đế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 mọi trường hợp không áp dụng được mã khuyến mãi nếu không có lỗi nào khác về mã khuyến mãi tương ứng.
  • 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 hoặc không có đủ mặt hàng để đáp ứng yêu cầu.
  • INCORRECT_PRICE: Lỗi về giá trong phí hoặc tổng số tiền.
  • INVALID: Một 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ục LineItem, FulfillmentOption hoặc promotion.
  • 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 cho loại FeeAmountRange:

Tài sản Loại Nội dung 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 cho loại FeePercentRange:

Tài sản Loại Nội dung mô tả
minFeePercent Number

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

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ư các lựa chọn ưu tiên về phương thức thực hiện.

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

Tài sản Loại Nội dung mô tả
@type Const

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 thực hiện ưu tiên của người dùng.

location Location

Trong CheckoutRequestMessage, trường này chỉ định địa chỉ giao hàng, địa chỉ này là bắt buộc nếu đơn đặt hàng là để giao hàng. Đối với các đơn đặt hàng mua 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 một 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 quá trình xử lý yêu cầu. Bảng sau đây mô tả các trường của loại FoodErrorExtension. Bạn có thể gửi lỗi trong CheckoutResponse.

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

Tài sản Loại Nội dung mô tả
@type Const

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. Đề xuất 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".

Một Đơn đặt hàng đề xuất mới có chỉnh sửa. Trả về đối tượng này nếu có lỗi có thể khắc phục trong RecommendationdOrder ban đầu. Ví dụ: sự thay đổi về giá của một hoặc nhiều mục hàng trong giỏ hàng là lỗi có thể khắc phục. Lỗi có thể khôi phục với Đề xuất hợp lệ đượ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 của mình.

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

Các lựa chọn thanh toán mặc định được chọn cho người dùng.

additionalPaymentOptions Danh sách<PaymentOptions>

Các lựa chọn thanh toán thay thế được cung cấp cho người dùng.

Ví dụ sau đây cho thấy một 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 cho loại FoodItemExtension:

Tài sản Loại Nội dung mô tả
@type Const

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 hàng 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 một 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 cho loại FoodItemOption:

Tài sản Loại Mô tả
id Chuỗi

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

Ví dụ: 39231093

offerId Chuỗi

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

Ví dụ: 912835081

name Chuỗi

Tên tuỳ chọn.

Ví dụ: Honey Mustard

price Money
note Chuỗi

Lưu ý liên quan đến tuỳ chọn này.

quantity Number

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

Ví dụ: 3

subOptions Danh sách<FoodItemOption>

Các tuỳ chọn phụ cho tuỳ 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 một 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 cho loại FoodOrderError:

Tài sản Loại Nội dung mô tả
error Error

Bắt buộc.

id Chuỗi

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

Trường này là 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ón trong thực đơn hoặc FoodItemOption.id cho tiện ích bổ sung.

description Chuỗi

Nội dung mô tả 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. Điều này chỉ bắt buộc khi lỗi là "PRICE_ gần".

availableQuantity Số nguyên

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

Số lượng hàng mới có sẵn của mặt hàng gây ra lỗi. Thông tin này chỉ bắt buộc khi lỗi là "INVALID" hoặc "NOT_FOUND". Giá trị phải bằng 0 đối với "INVALID" (không hợp lệ) và "NOT_FOUND".

Ví dụ sau đây cho thấy một 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 thực hiện đơn đặt hàng.

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

Tài sản Loại Nội dung mô tả
@type Const

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 phương thức thực hiện có sẵn cho đơn đặt hàng.

optinForRemarketing Boolean

Yêu cầu của người dùng về việc 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ị khi chưa có sự đồng ý của người dùng. Nếu OptinFor tiếp thị lại là đúng, bạn có thể đăng ký người dùng. Nếu OptinFor tiếp thị lại là false hoặc không hiển thị, bạn phải giữ trạng thái đăng ký trong hệ thống của mình nguyên trạng. Người dùng không thể chọn không tham gia thông qua Google, chỉ thông qua chức năng hủy đăng ký được cung cấp trong các kênh tiếp thị của bạn. Cờ này chỉ xuất hiện trongSubmitOrderRequestMessage.

Ví dụ sau đây cho thấy một 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:
  • Trong Checkout AppRequestSubmit AppRequest, Cart.extension.fulfillmentPreference: Lưu trữ lựa chọn ưu tiên của người dùng (giao hàng 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ỉ hỗ trợ một tuỳ chọn). 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 cho loại FulfillmentOption:

Tài sản Loại Mô tả
offerId Chuỗi

Giá trị nhận dạng duy nhất của phương thức thực hiện này, nếu có.

fulfillmentInfo FulfillmentOptionInfo

Bắt buộc.

expiresAt Dấu thời gian ISO

Thời điểm phương thức thực hiện này hết hạn.

price Money

Chi phí của tuỳ chọn này.

Ví dụ sau đây cho thấy một 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 cho loại FulfillmentOptionInfo:

Tài sản Loại Nội dung mô tả
Bạn phải cung cấp đúng một trong các nhóm cơ sở lưu trú sau đây.
delivery Nhóm 1 DeliveryInfo

Nếu có, hãy cho biết đơn đặt hàng giao.

pickup Nhóm 2 PickupInfo

Nếu có, biểu tượng này cho biết đơn đặt hàng tự đến lấy.

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

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

Tài sản Loại Mô tả
sourceUrl Chuỗi

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 có kích thước 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 cho loại LineItem:

Tài sản Loại Mô tả
id Chuỗi

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

Đối với một mục hàng trong giỏ hàng (Đề xuất.cart.lineItems[0].id), đây là mã nhận dạng duy nhất do Google tạo khi tạo đơn đặt hàng. Đối với một mục hàng trong một betaĐơn đặt hàng (Đề xuất.otherItems[0].id), được dùng để thêm các mục như phí giao hàng và thuế, giá trị của mã nhận dạng do nhà cung cấp xác định. Ví dụ: trong 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ư hai chiếc pizza cỡ trung bình với các bộ 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ã này làm yếu tố phân biệt. Nói cách khác, nếu một trong những loại pizza bị từ chối vì thiếu một phần nhân cụ thể, thì mã nhận dạng này sẽ giúp Google xác định mặt hàng nào trong đơn đặt hàng mà bạn đang đề cập đến. Trường này là bắt buộc ngoại trừ trong các mục khác.

name Chuỗi

Bắt buộc.

Tên của mục hàng. Đây là một chuỗi mà người dùng nhìn thấy và phải viết hoa đầu câu khi 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 ở mức 100 ký tự cho 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 bao gồm. Không áp dụng cho Đề xuất.otherItems.

description Chuỗi

Nội dung mô tả về 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, hãy cộng chi phí của bất kỳ tiện ích bổ sung nào rồi nhân với số lượng). Ví dụ: Nếu một mặt hàng 10 $có số lượng là 3 thì giá sẽ là 30$. Đối với một chiếc bánh pizza có giá cơ bản là 5 đô la và tiện ích bổ sung là 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 đô la và mỗi chiếc có thêm tiện ích bổ sung là 1 đô la, giá sẽ là 12 đô la. 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 trường này, người dùng có thể gửi ghi chú về từng mặt hàng trong yêu cầu thanh toán và yêu cầu gửi đơn đặt hàng. Đảm bảo rằng người bán nhận được ghi chú khi họ cung cấp ghi chú. Giá trị này sẽ được thể hiện 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 xuất hiện trong yêu cầu.

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

offerId Chuỗi

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

Mã mặt hàng của mặt hàng trong trình đơn. Không áp dụng cho Đề xuất.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 một 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 tính thuế. Áp dụng cho đề xuất.otherItems.
  • DISCOUNT: Mục hàng giảm giá. Xin lưu ý rằng giá phải là số âm. Áp dụng cho đề xuất.otherItems.
  • GRATUITY: Mục hàng miễn phí. Thường dành riêng cho SendOrderRequestMessage đối với mẹo do người dùng chọn. Áp dụng cho đề xuất.otherItems.
  • DELIVERY: Mục hàng phân phối. Áp dụng cho đề xuất.otherItems.
  • SUBTOTAL: Tổng phụ phí mục hàng. Áp dụng cho đề xuất.otherItems.
  • FEE: Mục hàng bổ sung không thuộc các loại khác. Áp dụng cho đề xuất.otherItems.

Vị trí

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

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

Tài sản Loại Mô tả
coordinates Coordinates
formattedAddress Chuỗi

Hiển thị địa chỉ của vị trí.

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

postalAddress PostalAddress
zipCode Chuỗi

Ví dụ: 90210

city Chuỗi

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

Ví dụ: Los Angeles

notes Chuỗi

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

Ví dụ: Gate code is #111

Ví dụ sau đây cho thấy một 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 cho loại Merchant:

Tài sản Loại Mô tả
id Chuỗi

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

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

name Chuỗi

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 một 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 cho loại Money:

Tài sản Loại Mô tả
currencyCode Chuỗi

Bắt buộc.

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

Ví dụ: USD

units Chuỗi

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

Ví dụ: 36

nanos Số nguyên

Số lượng nano (10^-9) đơn vị. Giá trị phải nằm trong khoảng từ -999.999.999 đến +999.999.999, tính cả 2 giá trị đầu cuối. Hãy sử dụng các quy tắc sau: Nếu đơn vị là dương, nano phải có giá trị dương hoặc 0. Nếu đơn vị bằng 0, nano có thể có giá trị dương, 0 hoặc âm. Nếu đơn vị là số âm, thì nano phải có giá trị âm hoặc 0. Ví dụ: $-1,75 được biểu diễn dưới dạng đơn vị = -1 và nanos = -750,000,000.

Ví dụ: 730000000

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

Ví dụ 1

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

Ví dụ 2

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

Đặt

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

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

Tài sản Loại Nội dung mô tả
finalOrder ProposedOrder

Bắt buộc.

Đơn đặt hàng được đề xuất đã gây ra đơn đặt hàng này.

googleOrderId Chuỗi

Bắt buộc.

Mã đơn hàng do Google chỉ định. Mã nhận dạng này phải cố định trong toàn bộ vòng đời của một đơn đặt hàng. Người dùng cuối sẽ không thấy mã 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 một 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 có trong AppResponse.

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

Tài sản Loại Mô tả
actionOrderId Chuỗi

Bắt buộc.

Mã nhận dạng duy nhất của đơn đặt hàng trong hệ thống của trình tích hợp được dùng để xác định đơn đặt hàng mà bản cập nhật được gửi. 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 đơn đặt hàng "CREATED", thì mã này sẽ là mã nhận dạng có thể nhìn thấy của người dùng được nhập vào, hiển thị 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 hành động 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 nhiều hơn 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ể nhìn 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 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 dự kiến hoặc đến lấy hàng.

Ví dụ sau đây cho thấy một 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 cho loại PickupInfo:

Tài sản Loại Mô tả
pickupTimeIso8601 Chuỗi

Thời gian lấy hàng dự kiến, theo định dạng dấu thời gian ISO 8601: "{năm}-{tháng}-{ngày}T{giờ}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời gian: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M biểu thị thời lượng là 90 phút. Giá trị mặc định "PT0M" cho biết thời gian đến lấy hàng ưu tiên là càng sớm càng tốt. Tham khảo: https://vi.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_representations. Sử dụng tính năng này để cập nhật thời gian đến lấy hàng dự kiến trong phản hồi thanh toán.

Ví dụ: PT90M

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

Ví dụ:

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress

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

Tài sản Loại Mô tả
regionCode Chuỗi

Bắt buộc.

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

Ví dụ: US

postalCode Chuỗi

Mã bưu chính.

Ví dụ: 94043

administrativeArea Chuỗi

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

Ví dụ: CA

locality Chuỗi

Thành phố hoặc thị trấn cho vị trí này. Ở những vùng 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, đừng chỉ rõ địa phương và thay vào đó hãy sử dụng trường addressLines.

Ví dụ: Mountain View

addressLines List<String>

Một hoặc nhiều dòng bạn có thể sử dụng để chỉ định địa chỉ đường phố. Bạn không nên sửa đổi trường này vì trường 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 một 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 cho loại Price:

Tài sản Loại Nội dung 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 cho loại Promotion:

Tài sản Loại Mô tả
coupon Chuỗi

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 cho loại ProposedOrder:

Tài sản Loại Mô tả
id Chuỗi

Mã tùy chọn cho đơn đặt hàng được đề xuất.

cart Cart

Bắt buộc.

Mặt hàng của người dùng.

otherItems Danh sách<LineItem>

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

Không được 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 thực hiện đơn hàng cho các đơ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 một 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 cho loại SublineNote:

Tài sản Loại Mô tả
note Chuỗi

Bắt buộc.

Dấu thời gian

Ngày và giờ, theo đị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 cho loại TransactionDecisionValue:

Tài sản Loại Nội dung mô tả
order Order

Bắt buộc.

Đơn đặt hàng kèm theo thông tin thanh toán.

Ví dụ sau đây cho thấy một 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"
    }
  }
}

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

AppRequest

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

Tài sản Loại Nội dung 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ó đúng 1 mục.

Ví dụ sau đây cho thấy một 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 có ý định actions.foodordering.intent.CHECKOUT.

SubmitOrderRequestMessage

SubmitOrderRequestMessage là một AppRequest có ý định actions.foodordering.intent.TRANSACTION_DECISION.

Giao lưu và trò chuyện

Conversation chỉ dành cho một phiên duy nhất. Bạn có thể sử dụng đối tượng này để liên kết nhiều Hành động CheckoutSubmitOrder với nhau nếu cần.

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

Tài sản Loại Mô tả
conversationId Chuỗi

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 một phần tử Conversation:

Ví dụ:

{
  "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ"
}

Đầu vào

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

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

Tài sản Loại Nội dung mô tả
intent Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ]

Bắt buộc.

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

arguments Danh sách<Argument>

Bắt buộc.

Chứa Giỏ hàng để thanh toán hoặc đơn đặt hàng cần đặt

Phải có đúng 1 mục.

Đối số

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

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

Tài sản Loại Nội dung mô tả
Bạn phải cung cấp đúng một trong các nhóm cơ sở lưu trú sau đây.
extension Nhóm 1 Cart

Chi tiết về những 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 thông tin về đơn đặt hàng 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 cho loại AppResponse:

Tài sản Loại Nội dung mô tả
expectUserResponse Const

Đặt thành false.

Giá trị: False

finalResponse FinalResponse

Bắt buộc.

Chứa phản hồi của bạn cho quy trình thanh toán cho giỏ hàng.

Ví dụ sau đây cho thấy một 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 quy trình thanh toán giỏ hàng hoặc SendOrderRequestMessage.

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

Tài sản Loại Nội dung mô tả
richResponse RichResponse

Bắt buộc.

Chứa phản hồi của bạn đến CheckoutRequestMessage hoặcSubmitOrderRequestMessage.

CheckoutResponse

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

Tài sản Loại Nội dung mô tả
proposedOrder ProposedOrder

Bắt buộc.

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

paymentOptions PaymentOptions

Bắt buộc.

Lựa chọn thanh toán mặc định được chọn cho người dùng.

additionalPaymentOptions Danh sách<PaymentOptions>

Các lựa chọn thanh toán thay thế được cung cấp cho người dùng.

Ví dụ sau đây cho thấy một 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 phản hồi của bạn cho quy trình thanh toán giỏ hàng hoặc SendOrderRequestMessage.

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

Tài sản Loại Nội dung mô tả
structuredResponse StructuredResponse

Bắt buộc.

RichResponse

Chứa phản hồi của bạn cho quy trình thanh toán giỏ hàng.

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

Tài sản Loại Nội dung mô tả
items Danh sách<Item>

Bắt buộc.

Phải có đúng 1 mục.

StructuredResponse

Đối với CheckoutResponseMessage, đó có thể là một trong những trạng thái sau đây: CheckoutResponse Cho biết một giao dịch thanh toán thành công. HOẶC FoodErrorExtension: Cho biết lỗi trong quy trình thanh toán. Phản hồi có thể bao gồm Đề xuất và PaymentOptions đã sửa hoặc thông báo lỗi không có PaymentOptions. Đối với SendOrderResponseMessage, chỉ có orderUpdate mới được áp dụng.

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

Tài sản Loại Nội dung mô tả
Bạn phải cung cấp đúng một trong các nhóm cơ sở lưu trú sau đây.
checkoutResponse Nhóm 1 CheckoutResponse

Các mặt hàng bạn đã thanh toán, cộng với 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, tài sản này có thể bao gồm Đề xuất và PaymentOptions đã sửa hoặc chỉ là một thông báo lỗi không có PaymentOptions.

orderUpdate Nhóm 3 OrderUpdate

Cập nhật đơn đặt hàng không đồng bộ

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

AsyncOrderUpdateRequestMessage

Thông báo cho người dùng về các thay đổi sau khi đơn đặt 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 giá đã 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 cho loại AsyncOrderUpdateRequestMessage:

Tài sản Loại Nội dung mô tả
isInSandbox Boolean

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

customPushMessage CustomPushMessage

Bắt buộc.

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

Ví dụ sau đây cho thấy một 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 AsyncOrderUpdateRequestMessage thành công, Google sẽ phản hồi với trạng thái HTTP 200 và phần nội dung trống. Nếu cập nhật không thành công, Google sẽ phản hồi kèm theo thông tin chi tiết về lý do không cập nhật được đơn đặt hàng.

Các loại cập nhật đơn đặt hàng

Nút

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

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

Tài sản Loại Mô tả
title Chuỗi

Bắt buộc.

Nhãn hiển thị. Chỉ viết hoa đầu câu với 30 ký tự trở xuống để đảm bảo được hiển thị chính xác.

Ví dụ: Contact us

openUrlAction OpenUrlAction

Bắt buộc.

Ví dụ sau đây cho thấy một 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 cho loại CancellationInfo:

Tài sản Loại Mô tả
reason Chuỗi

Bắt buộc.

Lý do từ chối ở dạng văn bản có thể hiển thị khi OrderState.state là "CANCELLED".

Ví dụ: Restaurant closed

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

Ví dụ:

{
  "reason": "Insufficient inventory"
}

FoodOrderUpdateExtension

Loại này cho người dùng biết khoảng thời gian ước tính khi đơn đặt hàng được giao hoặc sẵn sàng để đến lấy. 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.

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

Thời lượng hoặc dấu thời gian ISO 8601 được diễn giải là khoảng thời gian từ updateTime của OrderUpdate (về bản chất là "hiện tại") đến updateTime cộng với duration. Không sử dụng định dạng này trừ khi "bây giờ" thực sự là một kỳ vọng hợp lý.

Khoảng thời gian theo ISO 8601 được diễn giải là khoảng thời gian từ điểm bắt đầu đến điểm kết thúc của khoảng thời gian.

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

Tài sản Loại Nội dung mô tả
@type Const

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 Chuỗi

Thời gian dự kiến khi đơn đặt hàng được giao hoặc sẵn sàng cho bạn đế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 chứ không phải một thời gian cố định duy nhất. Quy ước được chấp nhận là: Khoảng thời gian, Thời lượng và Ngày/Giờ. Bạn có thể gửi trường này trong SendOrderResponseMessage hoặc AsyncOrderUpdateRequestMessage khi thông tin có sẵn hoặc có thay đổi, chẳng hạn như hàng đến sớm hoặc bị trễ.

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

foodOrderErrors Danh sách<FoodOrderError>

Mô tả các lỗi xảy ra sau khi đặt hàng. Đề xuất một lỗi cho mỗi giỏ hàng hoặc mỗi mặt hàng. Sử dụng FoodOrderUpdateExtension.FoodOrderErrors cho những lỗi không có trong Giấy tờ từ chối.

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

Ví dụ sau đây cho thấy một 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 cho loại FulfillmentInfo:

Tài sản Loại Nội dung mô tả
Bạn phải cung cấp đúng một trong các nhóm cơ sở lưu trú sau đây.
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 một 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 cho loại InTransitInfo:

Tài sản Loại Nội dung 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 một 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 cho loại LineItemUpdate:

Tài sản Loại Mô tả
orderState OrderState
price Price
reason Chuỗi

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

Ví dụ sau đây cho thấy một 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 cho loại OpenUrlAction:

Tài sản Loại Mô tả
url Chuỗi

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ố áp dụng phụ thuộc vào orderManagementActionType. "EMAIL": Tiền tố phải là "mailto". "CUỘC GỌI": Tiền tố phải là "số điện thoại". "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 giúp người dùng được hỗ trợ sau khi đặt hàng và sẽ được gửi trong mỗi OrderUpdate của đơn đặt hàng AppResponse và mỗi AsyncOrderUpdateRequestMessage thao tác quản lý đơn đặt hàng tiếp theo được gửi cho một đơn đặt hàng cụ thể có thể thay đổi tuỳ theo trạng thái.

Ví dụ: ở trạng thái "TẠO", CUSTOMER_SERVICE có thể tham chiếu đến số điện thoại hỗ trợ khách hàng của bạn. Sau đó, ở trạng thái "XÁC NHẬN", CUSTOMER_SERVICE có thể đổi sang số điện thoại của nhà hàng nếu đó là đầu mối liên hệ phù hợp nhất cho khách hàng. Tương tự, khi đơn đặt hàng ở trạng thái "FULFILLED", CUSTOMER_SERVICE có thể tham chiếu đến các địa chỉ email hỗ trợ của bạn.

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

Tài sản Loại Nội dung mô tả
type OrderManagementActionType

Bắt buộc.

button Button

Bắt buộc.

Ví dụ sau đây cho thấy một 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: 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à yêu cầu bắt buộc. Tiền tố openUrlAction.url phải là "mailto", "tel", "http" hoặc "https".
  • EMAIL: Chỉ hành động đối với email trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "mailto".
  • CALL_DRIVER: Chỉ dành cho hành động gọi hành động trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "tel".
  • CALL_RESTAURANT: Chỉ dành cho hành động gọi hành động 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 một 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 cho loại OrderState:

Tài sản Loại Nội dung mô tả
state OrderStateEnum

Bắt buộc.

label Chuỗi

Bắt buộc.

Chuỗi hiển thị trạng thái mà người dùng thấy. Chỉ viết hoa đầu câu.

Ví dụ: Your order has been received

Ví dụ sau đây cho thấy một 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 đơn vị 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 mua hàng "Đã đặt hàng".
  • CONFIRMED: Đơn đặt hàng đã được nhà cung cấp xác nhận và đang hoạt động. Tương ứng với trạng thái mua hàng "Đã chấp nhận".
  • REJECTED: Đơn đặt hàng bị nhà tích hợp hoặc nhà cung cấp từ chối. Tương ứng với trạng thái giao dịch mua "Bị từ chối".
  • CANCELLED: Người dùng đã huỷ đơn đặt hàng. Tương ứng với trạng thái giao dịch mua "Đã huỷ".
  • IN_PREPARATION: Thức ăn đang được chuẩn bị. Tương ứng với trạng thái mua hàng "Trạng thái không xác định".
  • READY_FOR_PICKUP: Đồ ăn đã sẵn sàng cho bạn đến lấy. Tương ứng với trạng thái mua hàng "Sẵn sàng để đến lấy".
  • IN_TRANSIT: Đơn đặt hàng đang được giao. Tương ứng với trạng thái giao dịch mua "Đang tiến hành".
  • FULFILLED: Người dùng đã nhận được hàng đã đặt. Tương ứng với trạng thái giao dịch mua "Đã nhận hàng".

Biên nhận

Gửi loại này theo yêu cầu gửi AppResponse, trong đó OrderState là "CONFIRMED", "FULFILLED" hoặc "IN_TRANSIT". Gửi biên nhận vào thời điểm userVisibleOrderId có sẵn. Bạn không cần tiếp tục gửi biên nhận trong những lần cập nhật tiếp theo.

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

Tài sản Loại Mô tả
userVisibleOrderId Chuỗi

Bắt buộc.

Bắt buộc nếu đơn đặt hàng là "CONFIRMED", "IN_TRANSIT" hoặc "FULFILLED". Trường này là mã nhận dạng duy nhất dành 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 lai 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 đơn đặt hàng của họ cho dịch vụ khách hàng với nhà cung cấp và nhà tích hợp. Bạn chỉ cần cung cấp mã này một lần trong một lần cập nhật đơn hàng bất kỳ. Cho đến khi được cung cấp, actionOrderId sẽ là userVisibleOrderId. Ví dụ: bạn không thể 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 một phần tử Receipt:

Ví dụ:

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

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

Tài sản Loại Nội dung mô tả
type RejectionType

Bắt buộc.

reason Chuỗi

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

Ví dụ sau đây cho thấy một 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 các vấn đề liên quan đến chính sách hoặc rủi ro.
  • PAYMENT_DECLINED: Đã xảy ra vấn đề khi xử lý thanh toán.
  • UNAVAILABLE_SLOT: Không thể thực hiện đơn đặt hàng vào 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: Lý do khác.

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

Phần này mô tả các loại dữ liệu liên quan đến việc thanh toán được dùng để thực hiện đơn đặt đồ ăn.

ActionProvidedPaymentOptions

Các yêu cầu đối với phương thức thanh toán đã đưa ra hành động.

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

Tài sản Loại Nội dung mô tả
paymentType PaymentType

Bắt buộc.

displayName Chuỗi

Bắt buộc.

Tên phương thức thanh toán xuất hiện trên biên lai.

Ví dụ: Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

Dữ liệu bổ sung cho Loại thanh toán "ON_FULFILLMENT". Ví dụ: Bạn có thể sử dụng trường này để chỉ định xem phương thức thanh toán bằng tiền mặt hay thẻ có được hỗ trợ hay không.

Ví dụ sau đây cho thấy một 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 liên kết với thẻ thanh toán được lưu trữ trong hồ sơ cùng với 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) với 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 địa chỉ thanh toán được yêu cầu.

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

Tài sản Loại Mô tả
format Chuỗi

Bạn phải chọn đị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 chính. FULL: 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 một 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 khả năng hỗ trợ của trang web cho API Google Pay.

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

Tài sản Loại Nội dung 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ợ cũng được API Google Pay hỗ trợ.

Không được có ít hơn 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 cung cấp địa chỉ thanh toán nếu việc này cần thiết để xử lý giao dịch. Yêu cầu dữ liệu bổ sung có thể làm tăng sự phiền hà trong quá 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 một 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 cho loại GoogleProvidedPaymentInstrument:

Tài sản Loại Mô tả
instrumentToken Chuỗi

Bắt buộc.

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

billingAddress PostalAddress

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

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

Ví dụ:

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

GoogleProvidedPaymentOptions

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 cho loại GoogleProvidedPaymentOptions:

Tài sản Loại Mô tả
facilitationSpecification Chuỗi

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

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 thẻ trả trước có được cho phép 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 phải 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 một 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 khả năng hỗ trợ của trang web cho API Google Pay.

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

Tài sản Loại Mô tả
merchantId Chuỗi

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

merchantName Chuỗi

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 được hiển thị trên trang tính thanh toán.

OnFulfillmentPaymentData

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

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

Tài sản Loại Nội dung 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 hàng.

Ví dụ sau đây cho thấy một 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 cho loại Parameters:

Tài sản Loại Mô tả
gateway Chuỗi

Bắt buộc.

Ví dụ: braintree

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

Ví dụ sau đây cho thấy một 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 khả năng hỗ trợ của trang web cho API Google Pay.

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

Tài sản Loại Nội dung mô tả
apiVersion Const

Bắt buộc.

Phiên bản API chính.

Giá trị: 2

apiVersionMinor Const

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 tính năng hỗ trợ cho một hoặc nhiều phương thức thanh toán mà API Google Pay hỗ trợ.

transactionInfo TransactionInfo

Bắt buộc.

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 một 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 đơn đặt hàng.

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

Tài sản Loại Mô tả
displayName Chuỗi

Bắt buộc.

Tên hiển thị cho người dùng của phương thức thanh toán để 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 tuỳ chọn thanh toán trong CheckoutResponseMessage.

Ví dụ sau đây cho thấy một 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 khả năng hỗ trợ của trang web cho API Google Pay.

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

Tài sản Loại Nội dung mô tả
type Const

Bắt buộc.

Giá trị nhận dạng viết tắt cho 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ần có các thông số để định cấu hình loại phương thức thanh toán đã cung cấp.

tokenizationSpecification TokenizationSpecification

Bắt buộc.

Thiết lập 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 một 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 cho loại PaymentOptions:

Tài sản Loại Nội dung mô tả
Bạn phải cung cấp đúng một trong các nhóm cơ sở lưu trú sau đây.
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

Loại trừ lẫn nhau với googleProvidedOptions. Dùng phương thức này cho "tiền mặt khi nhận hàng" hoặc "thanh toán khi thực hiện đơn hàng".

Ví dụ sau đây cho thấy một 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 cho loại TokenizationParameters:

Tài sản Loại Nội dung 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 về khoản thanh toán có thể tính phí.

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

Tài sản Loại Nội dung mô tả
type Const

Bắt buộc.

parameters Parameters

Bắt buộc.

Ví dụ sau đây cho thấy một 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 xác định khả năng thanh toán của người thanh toán. Nút này được dùng để hiện hộp thoại uỷ quyền thanh toán.

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

Tài sản Loại Mô tả
currencyCode Chuỗi

Bắt buộc.

Mã tiền tệ ở dạng chữ cái theo tiêu chuẩn ISO 4217.

transactionId Chuỗi

Mã nhận dạng duy nhất xác định một lần cố gắng thực hiện 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ã nhận dạng cụ thể cho các lần giao dịch qua Google Pay. Đây là trường bắt buộc khi bạn gửi lệnh gọi lại đến Google transaction Events API (API Sự kiện giao dịch của Google).

totalPriceStatus Const

Bắt buộc.

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

Giá trị: ESTIMATED

totalPrice Chuỗi

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 là hai chữ số thập phân (không bắt buộc). Trường này phải có cùng giá trị với cart.totalPrice.

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

Ví dụ:

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