成功付款后 woocommerce_thankyou 挂钩不起作用

Posted

技术标签:

【中文标题】成功付款后 woocommerce_thankyou 挂钩不起作用【英文标题】:woocommerce_thankyou hook is not working after successful payment 【发布时间】:2017-10-10 10:42:02 【问题描述】:

我正在为 woocommerce 创建支付网关,但我遇到了一个问题,即在成功支付后我重定向到感谢页面并且我的订单状态没有更新为“处理中”或“已完成”。

我在我的插件主文件中使用了 woocommerce_thankyou 钩子。

add_action( 'woocommerce_thankyou_epg', 'my_change_status_function', 10, 1 );

    function my_change_status_function( $order_id ) 

        $order = new WC_Order( $order_id );
        $order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );

    

其实在这个函数更新状态之前我想发送一个API调用来检查支付状态,然后根据响应我想更新订单状态。

谁能帮我解决这个问题。

【问题讨论】:

【参考方案1】:

把钩子改成:

add_action( 'woocommerce_thankyou', 'my_change_status_function', 20, 1 );

    function my_change_status_function( $order_id ) 

        $order = new WC_Order( $order_id );
        $order_pay_method = get_post_meta( $order->id, '_payment_method', true );
        if($order_pay_method == 'epg')
        $order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );
        
    

修正了钩子。

【讨论】:

我认为 woocommerce_thankyou_$payment_method 和 woocommerce_thankyou 挂钩是相同的,只是第一个挂钩适用于特定的付款方式。我都试过了,但都没有。【参考方案2】:
add_action( 'woocommerce_thankyou', 'my_change_status_function', 10, 1 );

function my_change_status_function( $order_id ) 

    $order = new WC_Order( $order_id );
    $order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );


【讨论】:

我认为 woocommerce_thankyou_$payment_method 和 woocommerce_thankyou 挂钩是相同的,除了第一个挂钩适用于特定的付款方式。我都试过了,但都没有。 @Max 你是否覆盖了模板文件? 不,我没有覆盖任何文件。只需将此代码放在我的插件主文件中即可。 你能在你的 woocommerce/templates/checkout/thankyou.php 中签入吗 do_action('woocommerce_thankyou', $order->id );在那里放一个骰子,检查执行是否到达那里! 是的,我检查了,不幸的是,执行没有到达钩子,因为 $order_id 没有进入感谢页面,所以如果条件为假。仍在寻找为什么 order_id 没有出现在感谢页面。

以上是关于成功付款后 woocommerce_thankyou 挂钩不起作用的主要内容,如果未能解决你的问题,请参考以下文章

成功支付宝付款后无法重定向商家网站

初次成功付款后,条带计费订阅不收取“后续费用”

在django中付款成功后如何将订单存储在我的数据库中

付款成功后迅速获取条带费用ID

成功付款后 woocommerce_thankyou 挂钩不起作用

使用 IPN 方法的 Paypal 付款在付款后未重定向