Как создать проверку статуса по расписанию? API Woocommerce 3+ - PullRequest
0 голосов

После отправки заказа на внешнюю службу доставки я хочу настроить проверку его статуса. А если его статус изменился, измените его в Woocommerce.

Я настроил отправку данных заказа во внешнюю службу доставки.

add_action('woocommerce_thankyou', 'send_order_to_shiping');
function send_order_to_shiping( $order_id ){
    $order = wc_get_order( $order_id );

    $order_data = $order->get_data();

    // Get order details
    $parametr['sale_amount'] = $order_data['discount_total'];
    $parametr['street'] = $order_data['billing']['address_1'];
    $parametr['home'] = $order_data['billing']['address_2'];

    $order_id = $order_data['id'];

    foreach ($parametr as $key => $value){ 
        $data .= "&parametr[".$key."]=".$value."";
    } 

    // Send data
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://app.example.com/api/index.php?new_order");
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($ch);
    curl_close($ch);

    echo $result;
}

Когда я отправляю заказ (пример id 555), я получаю ответ echo $result;: id_order из службы доставки - 7273896.

echo $result; Показать:

{"result":"success","order_id":7273896,"order_number":10}

Итак, у меня есть идентификатор заказа в Woocommerce - 555, идентификатор заказа в службе доставки 7273896.

Логически мне нужно сохранить это в метаданных заказа и сделать проверку статуса отдельно с этими данными.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Для обновления статуса заказа

$order = new WC_Order( $parametr['order_id'] );

$order->update_status('wc-cancelled');

Обзор статуса заказа можно получить из https://docs.woocommerce.com/wc-apidocs/source-function-wc_get_order_statuses.html#88-106

0 голосов
/ 26 июня 2018

Для первой части вашего вопроса я бы предложил использовать плагин под названием WP Crontrol. Вы можете создать задание cron для вызова функции с помощью API службы доставки.

Вам нужно будет создать правило, разрешающее крону каждые 15 минут. Перейдите в Настройки-> Расписание Cron, чтобы добавить правило 15-минутного интервала. Добавьте задание cron в Tools-> Cron Events. Дайте ему название крюка и действие. Вы также можете включить аргументы, которые идут к вашей функции, если это необходимо.

В functions.php добавьте соответствующий код для вашего нового задания cron для запуска. Вот пример:

add_action( 'check_status_hook', 'checkStatusAction' );
function checkStatusAction ($args) {
    //run your code here or call it from here
}

Часть 2 вашего вопроса ... Я не могу предложить какую-либо помощь. Я не работал в WooCommerce, чтобы даже знать, где установлен статус заказа, или вы можете просто изменить одно значение статуса, не нарушая что-то еще.

...