Я пытаюсь установить значение «оплачено» в моей пользовательской таблице, когда платеж прошел успешно / клиент перенаправляется на страницу благодарности.
Я не уверен, что это достаточно безопасно, чтобы вставить «оплачено => 1» сразу после того, как покупатель достиг страницы благодарности. Вот почему я хотел проверить, действительно ли заказ оплачен, завершен или обрабатывается.
Теперь я понял, что некоторые способы оплаты работают медленно? Когда я оформляю заказ через Klarna, мой метод работает и вставляет оплачено = 1, но когда я выбираю Paypal, мой метод умирает и возвращает: «БЫЛО НЕ ОПЛАЧЕНО». Но когда я обновляю страницу благодарности примерно через 30 секунд, это работает. Итак, я пришел к выводу, что order_status устанавливается недостаточно быстро? Есть ли более чистый способ, чем мой?
add_action('woocommerce_thankyou', 'ceb_order_complete', 10, 1);
function ceb_order_complete( $order_id ) {
if ( ! $order_id )
return;
// Getting an instance of the order object
$order = wc_get_order( $order_id );
if($order->is_paid() || $order->has_status('processing') || $order->has_status('completed')) {
global $wpdb;
$payID = WC()->session->get( 'payID' );
if(!empty($payID)) {
if(!$wpdb->update($wpdb->prefix."ceb_registrations", array("paid"=>1), array("payID"=>$payID))) {
die("ERROR IN PAYMENT COMPLETE");
}
}
} else {
die("WASNT PAID");
}
}
Подробнее здесь: https://stackoverflow.com/questions/534 ... -completed