Вопрос или проблема
Я работаю с WooCommerce Bookings (версия 1.15.11) и использую REST API для получения детальной информации о бронируемых продуктах, в частности о “типах людей” и связанных с ними ценах (например, различные ставки для взрослых и детей для каждого продукта). Однако мои текущие запросы возвращают только пустой объект для типов людей, и я не уверен, не пропустил ли я какие-либо обязательные параметры или нужны ли дополнительные настройки метаданных.
Вот что я попробовал до сих пор:
-
Обращение по адресу
https://mydomaine.com/wp-json/wc-bookings/v1/products/213
-
Убедился, что ключи API имеют полные
read/write
разрешения.
Пример ответа: Вот пример ответа, который я получаю для бронируемого продукта:
{
"id": 213,
"name": "Название бронируемого продукта",
"slug": "nazvanie-broniruemogo-produkt",
"permalink": "https://mydomaine.com/product/nazvanie-broniruemogo-produkt/",
"date_created": "2019-07-09T13:03:33",
"date_created_gmt": "2019-07-09T12:03:33",
"date_modified": "2023-10-19T11:31:12",
"date_modified_gmt": "2023-10-19T10:31:12",
"type": "booking",
"status": "publish",
"featured": false,
"catalog_visibility": "visible",
"description": "<p>Примите душ и расслабьтесь по прибытии в одной из наших залов ожидания.</p>\n<ul>\n<li>Время бронирования (часов) 1</li>\n<li>Часовой пояс аэропорта (GMT) +1</li>\n</ul>\n",
"short_description": "<p>Примите душ и расслабьтесь по прибытии в одной из наших залов ожидания.</p>\n",
"sku": "",
"price": "55",
"regular_price": "",
"sale_price": "",
"date_on_sale_from": null,
"date_on_sale_from_gmt": null,
"date_on_sale_to": null,
"date_on_sale_to_gmt": null,
"on_sale": false,
"purchasable": true,
"total_sales": 27,
"virtual": true,
"downloadable": false,
"downloads": [],
"download_limit": -1,
"download_expiry": -1,
"external_url": "",
"button_text": "",
"tax_status": "taxable",
"tax_class": "",
"manage_stock": false,
"stock_quantity": null,
"backorders": "no",
"backorders_allowed": false,
"backordered": false,
"low_stock_amount": null,
"sold_individually": true,
"weight": "",
"dimensions": {
"length": "",
"width": "",
"height": ""
},
"shipping_required": false,
"shipping_taxable": false,
"shipping_class": "",
"shipping_class_id": 0,
"reviews_allowed": false,
"average_rating": "0.00",
"rating_count": 0,
"upsell_ids": [],
"cross_sell_ids": [],
"parent_id": 0,
"purchase_note": "",
"categories": [
{
"id": 18,
"name": "Без категории",
"slug": "bez-kategorii"
}
],
"tags": [],
"images": [
{
"id": 303,
"date_created": "2019-07-15T15:01:08",
"date_created_gmt": "2019-07-15T14:01:08",
"date_modified": "2019-07-15T15:01:08",
"date_modified_gmt": "2019-07-15T14:01:08",
"src": "https://mydomaine.com/wp-content/uploads/2019/07/nazvanie-broniruemogo-produkt.jpg",
"name": "nazvanie-broniruemogo-produkt",
"alt": ""
}
],
"attributes": [],
"default_attributes": [],
"variations": [],
"grouped_products": [],
"menu_order": 0,
"price_html": "От: <span class=\"woocommerce-Price-amount amount\"><bdi><span class=\"woocommerce-Price-currencySymbol\">€</span>55.00</bdi></span>",
"related_ids": [
211,
215,
504
],
"meta_data": [
{
"id": 1368,
"key": "_yoast_wpseo_primary_product_cat",
"value": ""
},
{
"id": 1369,
"key": "_yoast_wpseo_content_score",
"value": "90"
},
{
"id": 12112,
"key": "_product_addons",
"value": [
{
"name": "Время прибытия/отправления",
"title_format": "label",
"description_enable": 1,
"description": "hh:mm am/pm",
"type": "custom_text",
"display": "select",
"position": 0,
"required": 1,
"restrictions": 0,
"restrictions_type": "any_text",
"adjust_price": 0,
"price_type": "flat_fee",
"price": "",
"min": 0,
"max": 0,
"options": [
{
"label": "",
"price": "",
"image": "",
"price_type": "flat_fee"
}
],
"wc_booking_person_qty_multiplier": 0,
"wc_booking_block_qty_multiplier": 0
},
{
"name": "Авиакомпания / Номер рейса",
"title_format": "label",
"description_enable": 0,
"description": "",
"type": "custom_text",
"display": "select",
"position": 1,
"required": 1,
"restrictions": 0,
"restrictions_type": "any_text",
"adjust_price": 0,
"price_type": "flat_fee",
"price": "",
"min": 0,
"max": 0,
"options": [
{
"label": "",
"price": "",
"image": "",
"price_type": "flat_fee"
}
],
"wc_booking_person_qty_multiplier": 0,
"wc_booking_block_qty_multiplier": 0
}
]
},
{
"id": 12113,
"key": "_product_addons_exclude_global",
"value": "1"
},
{
"id": 22888,
"key": "_yoast_wpseo_estimated-reading-time-minutes",
"value": "1"
},
{
"id": 22889,
"key": "_yoast_wpseo_wordproof_timestamp",
"value": ""
}
],
"stock_status": "в наличии",
"has_options": false,
"post_password": "",
"global_unique_id": "",
"apply_adjacent_buffer": false,
"availability": [],
"block_cost": 0,
"buffer_period": 0,
"calendar_display_mode": "",
"cancel_limit_unit": "месяц",
"cancel_limit": 1,
"check_start_block_only": false,
"cost": 0,
"default_date_availability": "доступно",
"display_cost": "55",
"duration_type": "fixed",
"duration_unit": "день",
"duration": 2,
"enable_range_picker": false,
"first_block_time": "",
"has_person_cost_multiplier": false,
"has_person_qty_multiplier": false,
"has_person_types": true,
"has_persons": true,
"has_resources": false,
"has_restricted_days": "",
"max_date": {
"value": 12,
"unit": "месяц"
},
"max_date_value": 12,
"max_date_unit": "месяц",
"max_duration": 1,
"max_persons": 1000,
"min_date": {
"value": 2,
"unit": "день"
},
"min_date_value": 2,
"min_date_unit": "день",
"min_duration": 1,
"min_persons": 1,
"person_types": { //здесь должны быть детали
"381": {},
"382": {}
},
"pricing": [],
"qty": 1000,
"requires_confirmation": false,
"resource_label": "",
"resource_base_costs": [],
"resource_block_costs": [],
"resource_ids": [],
"resources_assignment": "customer",
"restricted_days": "",
"can_be_cancelled": false,
"user_can_cancel": false,
"_links": {
"self": [
{
"href": "https://fasttrack-casablanca.com/wp-json/wc-bookings/v1/products/213"
}
],
"collection": [
{
"href": "https://fasttrack-casablanca.com/wp-json/wc-bookings/v1/products"
}
]
}
}
данные, которые мне нужно получить:
Мои вопросы:
-
Есть ли конкретные параметры, которые мне нужно включить, чтобы получить детали типов людей через WooCommerce REST API?
-
Существует ли специальная конечная точка для доступа к типам людей с разбиением цен, которую использует WooCommerce Bookings?
-
Если эти детали хранятся в виде метаданных, как я могу правильно их запросить?
Любая помощь в доступе к этим данным будет очень appreciated!
Ответ или решение
Для получения информации о типах людей и связанных с ними ценах в продукте бронирования WooCommerce через REST API, необходимо учитывать несколько ключевых моментов, которые могут быть связаны с вашей текущей проблемой. Давайте подробно рассмотрим ваши вопросы и предоставим необходимые шаги для успешного выполнения задачи.
1. Уточнение параметров для получения данных о типах людей
Для получения данных о типах людей (например, взрослых и детей) через REST API WooCommerce необходимо проверить, корректно ли ваш запрос формируется, и на каких данных он основан. В вашем случае:
- Параметры запроса: Обратите внимание на то, с каким типом аутентификации вы работаете. Убедитесь, что вы используете правильные ключи API и что у них есть соответствующие полномочия (чтение и запись).
- Во избежание ошибок: Попробуйте выполнить запрос на получение подробной информации о продукте с помощью метода
GET
, как указано ниже:
GET https://mydomaine.com/wp-json/wc-bookings/v1/products/213
Убедитесь, что вы используете правильный ID продукта и что он действительно имеет тип продукта, поддерживающий бронирование.
2. Выполнение запроса для получения информации о человеке и ценах
На момент использования WooCommerce Bookings (v1.15.11), типы людей и их цены не всегда возвращаются в основной информации о продукте.
Для получения детальной информации о типах людей и связанных ценах:
- Метаданные: Если данные о типах людей хранятся в метаданных, вы можете выполнить специальный запрос, используя дополнительный (или специализированный) параметр для фильтрации информации. Например, вы можете воспользоваться следующим методом:
GET https://mydomaine.com/wp-json/wc/v3/products/213?consumer_key=your_ck&consumer_secret=your_cs
При этом необходимо удостовериться, что у вас есть необходимые права доступа на запросы к метаданным.
3. Доступ к метаданным и необходимости дополнительных запросов
Типы людей и связанные с ними цены, как правило, хранятся в формате, который вы упомянули в метаданных под ключом person_types
. Вы можете получить их следующим образом:
-
Обратите внимание на структуру: В вашем ответе на запрос
GET
, если полеperson_types
возвращает пустой объект, это может указывать на то, что для данного продукта не определены типы людей. Это следует проверить в админ-панели WooCommerce, убедившись, что они действительно заданы для данного продукта. -
Дополнительные запросы и фильтры: Если данные всё ещё не появляются, возможно, потребуется использовать отдельные запросы для получения полной информации. Некоторые данные могут быть заблокированы или могут требовать дополнительных прав доступа.
Пример кода для Python
Если вы хотите протестировать вызовы API через Python, вот пример того, как это может быть реализовано:
import requests
url = "https://mydomaine.com/wp-json/wc-bookings/v1/products/213"
consumer_key = "your_consumer_key"
consumer_secret = "your_consumer_secret"
response = requests.get(url, auth=(consumer_key, consumer_secret))
if response.status_code == 200:
product_data = response.json()
print(product_data)
else:
print(f"Ошибка: {response.status_code} - {response.text}")
Заключение
Если после выполнения всех указанных шагов информация о типах людей и ценах по-прежнему отсутствует, это может указывать на проблемы с конфигурацией самого продукта в WooCommerce. Рекомендуется проверить вашу админ-панель на предмет наличия необходимых установок и настроек.
Эти шаги помогут вам успешно извлечь необходимую информацию через REST API WooCommerce. Не забывайте также следить за обновлениями документации WooCommerce, так как часто выходят новые версии с изменениями в API.