Доброго времени суток.
Устнановил платежный модуль Тинькофф Банка для Woocommerce
https://oplata.tinkoff.ru/documentation/?section=cms
Столкнулся с проблемой изменения статуса заказа:
- не меняется автоматически статус заказа цифрового товара после покупки на Complete
Перепробовал все варианты найденные в интернете (правка functions.php) и плагины типа WooCommerce Order Status Control и Autocomplete Orders, однако статус заказа после оплаты всегда Обработка (processing).
Вот содержимое файла success.php платёжного модуля:
<?php
set_error_handler('exceptions_error_handler', E_ALL);
function exceptions_error_handler($severity) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
die('NOTOK');
}
}
try{
require( dirname( __FILE__ ) . '../../../../../wp-blog-header.php' );
//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);
// //log
// $log = $_POST;
// $log['token'] = $token;
// $log['original_token'] = $original_token;
// file_put_contents('log.txt', date('Y.m.d H:i:s') . ' ' . json_encode($log)."\r\n",FILE_APPEND);
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': $new_order_status = 'on-hold'; break; /*Деньги на карте захолдированы. Корзина очищается.*/
case 'CONFIRMED': $new_order_status = 'processing'; break; /*Платеж подтвержден.*/
case 'CANCELED': $new_order_status = 'cancelled'; break; /*Платеж отменен*/
case 'REJECTED': $new_order_status = 'failed'; break; /*Платеж отклонен.*/
case 'REVERSED': $new_order_status = 'cancelled'; break; /*Платеж отменен*/
case 'REFUNDED': $new_order_status = 'refunded'; break; /*Произведен возврат денег клиенту*/
}
$order_id = (int)$_POST['OrderId'];
$order = new WC_Order($order_id);
if( isset( $new_order_status ) ){
$order->update_status( $new_order_status );
die('OK'); } die('NOTOK');
}
else{
die('NOTOK');
}
}
catch(Exception $e){
die('NOTOK');
}
Буду признателен за помощь!