WooCommerce 中的支付完成时触发的 Hooks

在 WooCommerce 中,用户支付完成后,会触发一些 Hooks,我们可以把对订单的自定义处理函数挂载到这些 Hooks 上面,来实现我们需要的自定义功能。

用户付款完成后,有三种不同的 WooCommerce 钩子。

  • woocommerce_pre_payment_complete
  • woocommerce_payment_complete
  • woocommerce_payment_complete_order_status_$status

所有这些钩子都会在订单已付款或不需要付款(例如货到付款)时触发,它们也适用于自定义支付网关

woocommerce_pre_payment_complete

第一个钩子(woocommerce_pre_payment_complete)在开始支付时使用,不依赖于订单状态。

add_action( 'woocommerce_pre_payment_complete', 'wprs_pre_complete' );

function wprs_pre_complete( $order_id ) {
	
	$order = wc_get_order( $order_id );

	// 获取订单数据以进行后续处理
	
}
  • 本文中的所有代码片段都可以插入到当前主题的functions.php文件中,或者插入插件中合适的文件中。
  • 我们可以从$order对象中获取大量订单信息,如$order->get_items()用于获取订单项目,或$order->get_payment_method()用于获取付款方式的标题,或$order->get_user_id()用于获取客户 ID。

woocommerce_payment_complete

woocommerce_payment_complete只有在订单处于以下状态之一时才会被触发:on-holdpendingfailedcancelled,但请记住,该状态列表也可通过woocommerce_valid_order_statuses_for_payment_complete 进行过滤。

但在钩子应用之前,WooCommerce 会将订单状态更改为处理中maybe已完成,这也可以使用 woocommerce_payment_complete_order_status 进行过滤。

add_action( 'woocommerce_payment_complete', 'wprs_complete' );

function wprs_complete( $order_id ) {
	
	$order = wc_get_order( $order_id );

	// 执行后续操作
	
}

woocommerce_payment_complete_order_status_$status

最后,woocommerce_payment_complete_order_status_$status将触发其余订单状态。

add_action( 'woocommerce_payment_complete_order_status_processing', 'wprs_complete_for_status' );
add_action( 'woocommerce_payment_complete_order_status_completed', 'wprs_complete_for_status' );

function wprs_complete_for_status( $order_id ){
    $order = wc_get_order( $order_id );

	// 执行后续操作
}

需要注意的一点是,支付完成并不代表支付成功,我们在挂载的 Hook 中的函数中,还需要进一步检查订单状态,甚至,如果需要更谨慎一点,我们还可以通过支付网关确认支付金额来检查用户是否真的已经支付成功,才能进行支付成功的处理。

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *