Документация здесь находится в поиске и поиске, чтобы выяснить, что следует передать для первоначального почтового запроса:
https://connect.squareup.com/v2/locations/{{LOCATION_ID}}/checkouts
документация здесь довольно просто, отправьте запрос на публикацию выше и перенаправьте пользователей на URL-адрес извлечения, который генерируется и возвращается в ответе.
Square предоставляет следующий пример для первоначального запроса POST, но не указывает, какие значения для ‘ITEMS’ должны быть включены.
{
"redirect_url": "{{URL TO CONFIRMATION PAGE}}",
"idempotency_key": "{{UNIQUE STRING FOR THIS TRANSACTION}}",
"ask_for_shipping_address": {{true or false}},
"merchant_support_email": "{{SUPPORT EMAIL ADDRESS}}",
"order": {
"reference_id": "{{STORE ORDER ID}}",
"line_items": [
// List each item in the order as an individual line item
{
"name": "{{ITEM_1 NAME}}",
"quantity": "{{ITEM_1 QUANTITY}}",
"base_price_money": {
"amount": {{ITEM_1 COST IN BASE MONETARY UNIT}},
"currency": "{{ITEM_1 CURRENCY USED}}"},
discounts: [
{
"name": "{{ITEM_1_DISCOUNT NAME}}",
"amount_money": {
"amount": {{ITEM_1_DISCOUNT AMOUNT}},
"currency": "{{ITEM_1_DISCOUNT CURRENCY USED}}"}
}
],
"taxes": [
{
"name": "{{ITEM_1_TAX NAME}}",
"percentage": "{{ITEM_1_TAX PERCENTAGE}}",
"type": "{{ITEM_1_TAX TYPE}}"}
]
},
{
"name": "{{ITEM_2 NAME}}",
"quantity": "{{ITEM_2 QUANTITY}}",
"base_price_money": {
"amount": {{ITEM_2 COST IN BASE MONETARY UNIT}},
"currency": "{{ITEM_2 CURRENCY USED}}"}
},
. . .
{
"name": "{{ITEM_N NAME}}",
"quantity": "{{ITEM_N QUANTITY}}",
"base_price_money": {
"amount": {{ITEM_N COST IN BASE MONETARY UNIT}},
"currency": "{{ITEM_N CURRENCY USED}}"},
discounts: [
{
"name": "{{ITEM_N_DISCOUNT NAME}}",
"percentage": "{{ITEM_N PERCENTAGE USED}}"}
]
},
]
},
"pre_populate_buyer_email": "{{CUSTOMER CONTACT INFORMATION: EMAIL}}",
"pre_populate_shipping_address": {
"address_line_1": "{{SHIPPING ADDRESS, LINE 1}}",
"address_line_2": "{{SHIPPING ADDRESS, LINE 2}}",
"locality": "{{SHIPPING CITY/TOWNSHIP/ETC}}",
"administrative_district_level_1": "{{SHIPPING STATE/PROVINCE/ETC}}",
"postal_code": "{{SHIPPING POSTAL CODE}}",
"country": "{{SHIPPING COUNTRY}}",
"first_name": "{{CUSTOMER FIRST NAME}}",
"last_name": "{{CUSTOMER LAST NAME}}"},
"additional_recipients":[
{
"location_id": "{{RECIPIENT_LOCATION_ID}}",
"description": "{{DESCRIPTION}}",
"amount_money" : {
"amount": {{SPLIT AMOUNT IN BASE MONETARY UNIT}},
"currency": "{{CURRENCY USED}}"}
}
]
}
Давайте посмотрим на свойство ‘line_items’:
"line_items": [
// List each item in the order as an individual line item
{
"name": "{{ITEM_1 NAME}}",
"quantity": "{{ITEM_1 QUANTITY}}",
"base_price_money": {
"amount": {{ITEM_1 COST IN BASE MONETARY UNIT}},
"currency": "{{ITEM_1 CURRENCY USED}}"},
discounts: [
{
"name": "{{ITEM_1_DISCOUNT NAME}}",
"amount_money": {
"amount": {{ITEM_1_DISCOUNT AMOUNT}},
"currency": "{{ITEM_1_DISCOUNT CURRENCY USED}}"}
}
],
"taxes": [
{
"name": "{{ITEM_1_TAX NAME}}",
"percentage": "{{ITEM_1_TAX PERCENTAGE}}",
"type": "{{ITEM_1_TAX TYPE}}"}
]
}
Очевидно, что line_items
это массив объектов, мой вопрос касается значений для «Имя». Это относится к «названию варианта» или названию элемента каталога?
Фрагмент ниже выводится из var_dump
на getItemData
что возвращается при использовании SquareConnect\Model\CatalogItem
,
object(SquareConnect\Model\CatalogItem)[2731]
protected 'name' => string 'Amusementpark' (length=11)
protected 'description' => string 'Ages 3-69' (length=9)
protected 'abbreviation' => null
protected 'label_color' => null
protected 'available_online' => boolean false
protected 'available_for_pickup' => boolean false
protected 'available_electronically' => boolean false
protected 'category_id' => string 'ZYACasdfadsA674SJRS3J' (length=24)
protected 'tax_ids' => null
protected 'modifier_list_info' => null
protected 'image_url' => string 'https://square-production.s3.amazonaws.com/files/9f5f5b061adsfadsfa603622eab14904f6950431e/original.png' (length=102)
protected 'variations' =>
array (size=1)
0 =>
object(SquareConnect\Model\CatalogObject)[2732]
protected 'type' => string 'ITEM_VARIATION' (length=14)
protected 'id' => string '7XasdfasdfaUIKWNKGAJBA4SE' (length=24)
protected 'updated_at' => string '2018-03-10T21:39:05.18Z' (length=23)
protected 'version' => int 1520723945180
protected 'is_deleted' => boolean false
protected 'catalog_v1_ids' => null
protected 'present_at_all_locations' => boolean true
protected 'present_at_location_ids' => null
protected 'absent_at_location_ids' => null
protected 'item_data' => null
protected 'category_data' => null
protected 'item_variation_data' =>
object(SquareConnect\Model\CatalogItemVariation)[2733]
protected 'item_id' => string 'INdeee6OVT2YLOW7LKDKLN' (length=24)
protected 'name' => string 'Regular' (length=7)
protected 'sku' => null
protected 'upc' => null
protected 'ordinal' => int 1
protected 'pricing_type' => string 'FIXED_PRICING' (length=13)
protected 'price_money' =>
object(SquareConnect\Model\Money)[2734]
protected 'amount' => int 3400
protected 'currency' => string 'USD' (length=3)
protected 'location_overrides' =>
array (size=1)
0 =>
object(SquareConnect\Model\ItemVariationLocationOverrides)[2735]
protected 'location_id' => string 'CNCadafdA3TZA' (length=13)
protected 'price_money' => null
protected 'pricing_type' => null
protected 'track_inventory' => boolean true
protected 'inventory_alert_type' => string 'LOW_QUANTITY' (length=12)
protected 'inventory_alert_threshold' => int 50
protected 'track_inventory' => null
protected 'inventory_alert_type' => null
protected 'inventory_alert_threshold' => null
protected 'user_data' => null
protected 'service_duration' => null
protected 'tax_data' => null
protected 'discount_data' => null
protected 'modifier_list_data' => null
protected 'modifier_data' => null
protected 'product_type' => string 'REGULAR' (length=7)
protected 'skip_modifier_screen' => boolean false
Если для элемента есть только один вариант, для имени варианта в поле «Обычный» возвращается item_variation_data
,
Если в элементе имеется более одного варианта, возвращается фактическое значение имени варианта.
Вопрос в том, должно ли название варианта Regular
передаваться как name
недвижимость в line_items
массив, или если имя элемента будет передано Amusementpark
в этом примере?
Сначала я думал, что это не будет иметь значения, но если передать «Обычный» для всех элементов, без возможности отличить, к какому элементу относится вариация, это может сбить с толку из панели «Квадрат». Какой предмет был куплен …
Я не уверен, должна ли наша реализация передавать Имя элемента, если есть только один вариант Amusementpark
, а затем передайте имя варианта, только если для элемента имеется более одного варианта.
Кажется, что в документации есть пробел, но если кто-то сталкивался с этим, было бы полезно какое-то направление.
Управляет ли квадратная страница оформления заказа элементами вариантов? Я бы так не думал, потому что информация о ценах должна быть передана в первоначальный пост-запрос … Или я должен просто использовать имя товара и установить цену равной изменению, которое выберет пользователь?
Поле «name» в «line_items» должно быть заполнено, если оно еще не существует в вашем каталоге (специальные элементы). Документация для CreateOrderRequestLineItem
определяет:
Позиции могут ссылаться на объекты из каталога продавца или вместо этого могут указывать имя и цену.
Каждый line_item имеет необязательный catalog_object_id
который указывает:
Используется только для позиций каталога. Идентификатор объекта каталога для существующего CatalogItemVariation.
Не указывайте значение для этого поля, если укажите значение для name и base_price_money.
Так что, если элемент уже существует, вы должны передать id
для объекта Вариация, и вы можете оставить поля имени и цены пустыми.
Ссылка: https://docs.connect.squareup.com/api/connect/v2#type-createorderrequestlineitem
Других решений пока нет …