Невозможно добавить продукт бронирования WooCommerce в корзину через пользовательскую конечную точку REST APIPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно добавить продукт бронирования WooCommerce в корзину через пользовательскую конечную точку REST API

Сообщение Anonymous »

Я разрабатываю собственную конечную точку REST API в WordPress, чтобы программно добавлять продукт WooCommerce Booking в корзину. Однако я сталкиваюсь с проблемами, когда значение корзины пустое, а попытки добавить продукт для бронирования возвращают ложный результат.
Подробности конфигурации:
  • Версия WooCommerce: 9.3.3
  • Версия WooCommerce Bookings: 1.15.11
  • Версия WordPress: 6.6.2
Попытка кода:

Код: Выделить всё

function register_person_types_endpoint()
{
register_rest_route('custom-api/v1', '/products', array(
'methods' => 'POST',
'callback' => 'save_bookable_product',
'permission_callback' => '__return_true',
));
}
add_action('rest_api_init', 'register_person_types_endpoint');

// save bookable product
function save_bookable_product()
{
$response = [];
$product_id = 215;

try {
$product = wc_get_product($product_id);
$booking_data = [
'start_date' => strtotime('2024-11-15 00:00:00'),
'end_date' => strtotime('2024-11-16 23:59:59'),
'cost' => 540,
'resource_id' => '',
];

if (! WC()->session) {
WC()->session = new WC_Session_Handler();
WC()->session->init();
}

if (! WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}

if (! WC()->cart) {
WC()->cart = new WC_Cart();
}

if (! WC()->customer) {
WC()->customer = new WC_Customer(0);
}

$booking_item = WC()->cart->add_to_cart($product->get_id(), 1, 0, [], ['booking' => $booking_data]);

if ($booking_item) {
$response = rest_ensure_response(["message" => "Booking created", 'booking_item' => $booking_item,  "saved_booking_data" => $booking_data]);
} else {
$response = rest_ensure_response([
"status" => "Failed",
"message" => 'Product with id ' . $product->get_id() . ' does not saved in the cart.',
'product' => $product->get_price(),
'booking_item' => $booking_item
]);
$response->set_status(400);
}
} catch (\Throwable $th) {
$response = rest_ensure_response(["message" => "Error cached", 'error' => $th->getMessage(), "stack_trace" => $th->getTraceAsString()]);
$response->set_status(500);
}
return $response;
}
Предпринятые шаги:
  • Подтверждено, что продукт бронирования опубликован и правильно настроен.
  • Убедился, что плагины WooCommerce и Bookings активированы.
  • Инициализировал сеанс и корзину вручную в моей пользовательской конечной точке.
    -Проверил, что передаваемый Product_id действителен и соответствует продукт для бронирования.
Дополнительная информация:
Конечная точка вызывается через Postman и браузер.


Подробнее здесь: https://stackoverflow.com/questions/791 ... i-endpoint
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»