Сессия WooCommerce возвращает пустое - PullRequest
1 голос
/ 18 мая 2019

Я разрабатываю мобильное приложение из моего существующего магазина WooCommerce. Я добавил пользовательские API для поддержки всего через пользовательский сеанс. Я не знаю, как сессия управляется в WooCommerce. Но когда я вызываю метод wp_get_session_token() из мобильного приложения, он возвращает пустую строку, а из почтальона, когда я вызываю тот же API, он возвращает правильную строку сеанса.

Моя основная задача - добавить товар в корзину и получить его из корзины для определенного сеанса пользователя. Используя пользовательские API, я могу делать все в соответствии с пользовательским сеансом. Товар добавляется в текущую зарегистрированную корзину пользователя через зарегистрированную сессию. Но из мобильного приложения я не могу добавить товар в корзину для конкретного пользователя через его сеанс. Я получаю правильный ответ для пользовательского добавления в корзину API из мобильного приложения, но он не может определить, для какой пользовательской корзины добавлен этот продукт. Также после добавления товара в корзину я вызываю API get cart items, который также возвращает 0 товаров, что означает, что товар там не добавляется. Все эти API работают нормально от Почтальона.

Чтобы выяснить эту проблему, я попытался вызвать метод wp_get_session_token() в API входа в систему. Этот метод возвращает правильный идентификатор сессии, когда он вызывается из Почтальона. Но когда я вызываю это из мобильного приложения, он возвращает только пустую строку.

Мне кажется, что проблема в сеансе из мобильного приложения, но я не знаю, как управлять им из мобильного приложения в магазин WooCommerce.

Вот мой API входа в систему, где я возвращаю идентификатор сеанса для отладки:

function register_api_hooks() {

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

    function login($request) {
        $creds = array();
        $creds['user_login'] = $request["username"];
        $creds['user_password'] =  $request["password"];
        $creds['remember'] = true;
        $user = wp_signon( $creds, false );

        $session = (object) wp_get_session_token();

        write_log($user);
        write_log($session);
        return $session;

       // return $user;
    }
}

В write_log также есть пустая запись для сеанса, когда он вызывается из мобильного приложения.

Код для добавления в корзину:

add_action( 'rest_api_init', 'register_cart_hooks' );
// API custom endpoints for WP-REST API
function register_cart_hooks() {

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

    function addToCart($request) {

        global $woocommerce;

     $woocommerce>cart>add_to_cart($request["product_id"],$request["quantity"]);

        return "Success...";

    }
}

Пожалуйста, дайте мне знать, где я ошибаюсь или какую другую реализацию я должен сделать.

EDIT

Вот код, который я использую в мобильном приложении React Native:

 fetch(url1, {
        method: methodName,
        async: true,
        crossDomain: true,
        headers: new Headers({
          "Content-Type": "application/json",
          "cache-control": "no-cache",
        }),
        body:data1
      }).then((response) => {
        const statusCode = response.status;
        console.log("fetchData StatusCode : "+statusCode);
        console.log("fetchData response1 : " + JSON.stringify(response));
        console.log("fetchData response2 : " + response);
        return response.json();
      }).then((responseJson) => {
        // var firstResponse = responseJson.split(',');
        // console.log("fetchData responseJson 111 : "+firstResponse);
        console.log("fetchData responseJson : "+responseJson);
        var response = JSON.stringify(responseJson);
        console.log("fetchData responseJson stringify : " + response);
        response = JSON.parse(response);
        console.log("fetchData responseJson stringify 1 : " + response);
        console.log("fetchData responseJson stringify 2 : " + JSON.stringify(response));
        if (callBack != null) {
          callBack("", response);
        }
      }).catch((error) => {
        console.log("fetchData Api error : "+error);
        if (callBack != null) {
          console.log("fetchData Api error callBack != null 2");
          callBack("Error", "");
        }
      });
...