Изменение статуса заказа в woocommerce при использовании оплаты tinkoff банка?

Доброго времени суток.
Есть интернет-магазин на WordPress + Woocommerce.
Заказы приходят часто, операторы получают новые заказы путем уведомления по почте.
Есть плагин онлайн оплаты от банка Тинькофф.
Плагин установился хорошо. Все проходит, статусы заказа меняет в соответствии с результатом оплаты.
НО. уведомления по почте не приходят как при обычном заказе.
Как я понял, плагин банка просто присваивает значения статуса заказа, а не изменяет через update_status. Из-за этого уведомления о заказе на почту не приходят. Нужно руками в админ панели статусы менять, чтобы письмо ушло, но так как заказы идут часто, то это неудобно очень.

Вот кусок кода, который отвечает за статусы заказа (если нужно больше, могу скинуть, или позаимствовать весь плагин на сайте банка)

//woocommerce_tinkoff_settings
    $settings = $wpdb->get_results("select * from ".$wpdb->prefix."options where option_name='woocommerce_tinkoff_settings'");
    $settings = unserialize($settings[0]->option_value);
    $_POST['Password'] = $settings['secret_key'];
    ksort($_POST);
    $sorted = $_POST;
    $original_token = $sorted['Token'];
    unset($sorted['Token']);
    $values = implode('', array_values($sorted));
    $token = hash('sha256', $values);


    if($token == $original_token){
        $order = $wpdb->get_results("select * from ".$wpdb->prefix."woocommerce_order_items where order_id=". (int) $_POST['OrderId']);
        $order_status = $wpdb->get_results("select * from ".$wpdb->prefix."posts where ID=".  $order[0]->order_id);
        $status = $order_status[0]->post_status;

        switch ($_POST['Status']) {
            case 'AUTHORIZED': $order_status = 'wc-on-hold'; break; /*Деньги на карте захолдированы. Корзина очищается.*/
            case 'CONFIRMED': $order_status = 'wc-processing'; break; /*Платеж подтвержден.*/
            case 'CANCELED': $order_status = 'wc-cancelled'; break; /*Платеж отменен*/
            case 'REJECTED': $order_status = 'wc-failed'; break; /*Платеж отклонен.*/
            case 'REVERSED': $order_status = 'wc-cancelled'; break; /*Платеж отменен*/
            case 'REFUNDED': $order_status = 'wc-refunded'; break; /*Произведен возврат денег клиенту*/
        }
		
        $a = $wpdb->query($wpdb->prepare("UPDATE ".$wpdb->prefix."posts SET post_status='".$order_status."' WHERE ID=%d ", (int) $_POST['OrderId']));
        ($a) ? die('OK') : die('NOTOK');
       
 
    }


Буду признателен за помощь!
  • Вопрос задан
  • 3745 просмотров
Пригласить эксперта
Ответы на вопрос 1
@buyuk
Есть еще такая проблема с tinkoff для woocommerce: в случае успешной оплаты шлюз перенаправляет на свою собственную страничку с благодарностью, передавая . В настройках можно прописать и свою собственную страницу. Туда методом GET передается помимо всего прочего order_id.
(документация по API https://oplata.tinkoff.ru/documentation/?section=p...

В WooCommerce стандартная страница благодарности - это http:///checkout/order-received//?key=wc_order_

Так вот вопрос: как передать в стандартную страницу WooCommerce методом GET эти данные, что б сформировать страницу http:///checkout/order-received//?key=wc_order_

В моем видении (возможно ошибаюсь) это выглядит так: создается страница на сайте, которая будет от платежного шлюза из GET запроса принимать order_id, формировать из него key wc_order и делать редирект на http:///checkout/order-received//?key=wc_order_
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы