Получить и передать идентификатор заказа на пользовательском платежном шлюзе в Woocommerce - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю пользовательский платежный шлюз, который мне нужен для обработки ответа об успешном завершении через ajax и сопоставил идентификатор транзакции с идентификатором заказа.Я запрашиваю, чтобы получить last_order_id.Это правильный способ получения идентификатора заказа или возникнут какие-либо проблемы, если я буду использовать этот способ для получения идентификатора заказа.

<script>
    jQuery.ajax({
        type : "POST",                                          
        url: 'http://example.com/?wc-api=callback',
// .........
</script>

function callback(){
    // handle the response here 
}


function get_last_order_id(){
    global $wpdb;
    $statuses = array_keys(wc_get_order_statuses());
    $statuses = implode( "','", $statuses );

    // Getting last Order ID (max value)
    $results = $wpdb->get_col( "
        SELECT MAX(ID) FROM {$wpdb->prefix}posts
        WHERE post_type LIKE 'shop_order'
        AND post_status IN ('$statuses')
    " );
    return reset($results);
}

1 Ответ

0 голосов
/ 01 февраля 2019

Обновлено

Вкл нормальный процесс Вы можете увидеть в WC_Checkout Класс в process_checkout()метод:

$order_id = $this->create_order( $posted_data ); // on line 1067

или WC_Checkout Класс с create_order() Метод:

$order_id = $order->save(); // on line 365

Что дает Идентификатор заказа

Теперь внутри метода process_checkout() у вас есть:

if ( WC()->cart->needs_payment() ) {
    $this->process_order_payment( $order_id, $posted_data['payment_method'] );

И если вы посмотрите на метод process_order_payment() вы увидите:

// Store Order ID in session so it can be re-used after payment failure
WC()->session->set( 'order_awaiting_payment', $order_id );

, который будет хранить идентификатор заказа в сеансах Woocommerce

Итак ПОЛУЧИТЬ идентификатор заказа через AJAX (когда он будет сгенерирован) вы будете использовать внутри своей PHP-функции Wordpress Ajax:

$order_id = WC()->session->get( 'order_awaiting_payment' );

и вернуть ее в jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...