• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Отмена заказа при неоплате

alyoha

Новичок
Привет.
Поставил на сайт инетркассу и на тестовой отмене платежа - заказ был отменен.

Хотелось бы:
1 перевести его в повторную оплату или выбор оплаты, не знаю, что из них реализуемо.
2 И еще отправлять в этом случае письмо о несостоявшемся заказе на почту

По тексту сообщения нашел код на отмену заказа в includes/class-wc-form-handler, там есть это
* Place a previous order again.
*
* @deprecated 3.5.0 Logic moved to cart session handling.
*/
public static function order_again() {
wc_deprecated_function( 'WC_Form_Handler::eek:rder_again', '3.5', 'This method should not be called manually.' );
}

/**
* Cancel a pending order.
*/
public static function cancel_order() {
if (
isset( $_GET['cancel_order'] ) &&
isset( $_GET['order'] ) &&
isset( $_GET['order_id'] ) &&
( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( wp_unslash( $_GET['_wpnonce'] ), 'woocommerce-cancel_order' ) ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
) {
wc_nocache_headers();

$order_key = wp_unslash( $_GET['order'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$order_id = absint( $_GET['order_id'] );
$order = wc_get_order( $order_id );
$user_can_cancel = current_user_can( 'cancel_order', $order_id );
$order_can_cancel = $order->has_status( apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( 'pending', 'failed' ), $order ) );
$redirect = isset( $_GET['redirect'] ) ? wp_unslash( $_GET['redirect'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

if ( $user_can_cancel && $order_can_cancel && $order->get_id() === $order_id && hash_equals( $order->get_order_key(), $order_key ) ) {

// Cancel the order + restore stock.
WC()->session->set( 'order_awaiting_payment', false );
$order->update_status( 'cancelled', __( 'Order cancelled by customer.', 'woocommerce' ) );

wc_add_notice( apply_filters( 'woocommerce_order_cancelled_notice', __( 'Your order was cancelled.', 'woocommerce' ) ), apply_filters( 'woocommerce_order_cancelled_notice_type', 'notice' ) );

do_action( 'woocommerce_cancelled_order', $order->get_id() );

} elseif ( $user_can_cancel && ! $order_can_cancel ) {
wc_add_notice( __( 'Your order can no longer be cancelled. Please contact us if you need assistance.', 'woocommerce' ), 'error' );
} else {
wc_add_notice( __( 'Invalid order.', 'woocommerce' ), 'error' );
}

if ( $redirect ) {
wp_safe_redirect( $redirect );
exit;
}
}
}
 
Последнее редактирование:
Сверху Снизу