WooCommerce рассчитывает доставку через REST API - PullRequest
1 голос
/ 04 июня 2019

Моя реализация в приложении похожа на мой веб-сайт WooCommerce. Я хочу набрать следующие баллы для расчета доставки:

  1. Проверьте, требуется ли адрес для расчета адреса доставки?
  2. Если адрес введен пользователем, как проверить, попадает ли этот адрес между crieteria метода доставки? Выдает ошибку пользователю, если введенный адрес недействителен согласно способу доставки.
  3. Как только пользователь введет действительный адрес, рассчитайте стоимость всех способов доставки.
  4. Показать все способы доставки пользователю в приложении с его стоимостью при выбранном способе по умолчанию.
  5. Когда пользователь переключается между способами доставки, он также должен сохранять данные и синхронизироваться с веб-сайтом и получать общее количество корзин согласно выбранному методу.

До сих пор я достигаю пункта 4. Я могу рассчитать все способы доставки через веб-сайт, но если он не рассчитан через веб-сайт, он возвращает меня в ноль.

Вот мой код API:

function register_get_cart_shipping() {

    register_rest_route(
        'custom-plugin', '/getCartShipping/',
        array(
            'methods'  => ['GET'],
            'callback' => 'getCartShipping',
        )
    );

        function getCartShipping() {
            $chosen_methods = WC()->session->get('chosen_shipping_methods');
            $count = 0;
            foreach( WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate ){

                $data[$count]->rate_id        = $rate->id;
                $data[$count]->method_id      = $rate->method_id;
                $data[$count]->instance_id    = $rate->instance_id;
                $data[$count]->label          = $rate->label;
                $data[$count]->cost           = $rate->cost;
                $data[$count]->taxes          = $rate->taxes;
                $data[$count]->chosen         = $chosen_methods['rate_id'];

                if($chosen_methods['rate_id'] == $rate->id ){
                    $data[$count]->isSelected  = true;
                } else {
                    $data[$count]->isSelected  = false;
                }
                $count++;
            }
            return $data;
        }
}

Также для пункта 5, когда пользователь переключается между способами доставки, я использую этот код, но он не обновляет выбранный способ доставки на веб-сайте. Вот код:

function updateCartShipping($request) {
            $rate_id["rate_id"] = "table_rate:10:4";
            // $rate_id["rate_id"] = "table_rate:9:3";
            // $rate_id["rate_id"] = $request['shippingID'];
            WC()->session->set('chosen_shipping_methods', $rate_id);
            return "OK";
}

Я также не знаю, какой идентификатор метода установить в качестве метода доставки. Это кажется мне загадочным.

Любая помощь будет оценена. Спасибо!

...