Статус заказа остается «Ожидающий платеж» после успешной оплаты (Пользовательский платежный шлюз) - PullRequest
0 голосов
/ 11 ноября 2019

Я разработал собственный платежный шлюз для woocommerce, все хорошо, но после успешной оплаты заказ все еще «ожидает оплаты»

В функции __construct() я проверяю, что платежный провайдер отвечает

<?php
//when payment done and redirected with payment reference code
if(isset($_REQUEST['transaction_id'])){
    paytabs_set_cookie('transaction_id', $_REQUEST['transaction_id']);
    $order  = new WC_Order($order_id);   
    $this->order = $order;
    $this->complete_transaction($order->get_id(), $_REQUEST['transaction_id']);
}

и вот функция complete_transaction()

<?php
/*
When transaction completed it is check the status 
is transaction completed or rejected
*/
function complete_transaction($order_id, $transaction_id) {
    global $woocommerce;       
    $order = new WC_Order( $order_id );

    $request_string=array(
                'secret_key'        => $_COOKIE['secret_key'],
                'merchant_email'    => $_COOKIE['merchant_email'],
                'transaction_id'    => $transaction_id,
                'order_id'          => $order_id
            );
    $gateway_url=$this->liveurl.'apiv2/verify_payment_transaction';
    $getdataresponse=$this->sendRequest($gateway_url, $request_string);
    $object=json_decode($getdataresponse, true);


    if (isset($object->response_code)) {
        //if get response successfull
        if($object->response_code == '100'){

            // thankyou and set error message 
            $this->msg['class'] = 'woocommerce_message';
            $check=$order->payment_complete();

            // Reduce stock levels
            $order->reduce_order_stock();

            // Remove cart
            $woocommerce->cart->empty_cart();   

            wc_add_notice( '' . __( 'Thank you for shopping with us. Your account has been charged and your transaction is successful.
            We will be shipping your order to you soon.', 'woocommerce' ), 'success' );     

            wp_redirect( $this->get_checkout_order_received_url( $order ) );
            exit;

        }else{

            // Change the status to pending / unpaid
            $order->update_status('failed', __('Payment Cancelled', 'error'));    

            // Add error for the customer when we return back to the cart
            $message=$object->result;

            wc_add_notice( '<strong></strong> ' . __($message, 'error' ), 'error' ); 

            // Redirect back to the last step in the checkout process
            wp_redirect( $this->get_cancel_order_url( $order ) );
            exit;          
        }

    }
}

Но статус заказа по-прежнему "в ожидании платежа". Теперь мне нужно изменить статус заказа на «Завершено» после проверки ответа поставщика платежа.

1 Ответ

0 голосов
/ 11 ноября 2019

Исправлено

Проблема из-за этой строки

wp_redirect( $this->get_checkout_order_received_url( $order ) );

должна быть $order вместо $this, поэтому строка выглядит так

wp_redirect( $order->get_checkout_order_received_url( $order ) );
...