Woocommerce自定义支付网关回调功能无法正常工作

时间:2016-07-19 11:42:47

标签: php wordpress woocommerce payment-gateway checkout

我一直在努力解决这个问题。我几乎探索了所有谷歌回复等...

这是我的代码:

class WC_Gateway_mysolugion extends WC_Payment_Gateway {

public function __construct() {

    ...
    ...

    /* Hook IPN callback logic*/
    add_action( 'woocommerce_api_wc_gateway_mysolugion', array( $this, 'check_callback' ) );

  }

  ....

  function check_callback() {
     // other code
  }

问题是当controll从支付网关站点返回到站点时,函数 check_callback 永远不会被调用。

我做错了什么?

任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:2)

付款网关应该创建为附加到WooCommerce的插件。在插件内部,您需要在加载插件 之后创建一个类(或者在初始化时 ,如果在您的活动主题的function.php文件中,请参阅下文)

所以你的代码会看到这个:

// for a plugin (the better choice)
add_action( 'plugins_loaded', 'init_mysolugion_gateway' );

// OR for theme function.php file
// add_action( 'init', 'init_mysolugion_gateway' );

function init_mysolugion_gateway() {

    class WC_Gateway_mysolugion extends WC_Payment_Gateway {

        public function __construct() {

            // ...
            // ...

            /* Hook IPN callback logic*/
            add_action( 'woocommerce_api_wc_gateway_mysolugion', array( $this, 'check_callback' ) );

        }

    }

}

除了定义您的课程外,您还需要告诉WooCommerce(WC)它是否存在。通过过滤woocommerce_payment_gateways来执行此操作:

add_filter( 'woocommerce_payment_gateways', 'add_gateway_mysolugion' );
function add_gateway_mysolugion( $methods ) {
    $methods[] = 'WC_Gateway_mysolugion'; 
    return $methods;
}

然后你可以添加你的回调函数,现在应该可以了:

function check_callback() {
   // other code
}

参考文献:

答案 1 :(得分:0)

感谢@LoicTheAztec回复和帮助。但是,我找到了它不能为我工作的原因。

在我的情况下,我将回调函数移出邮件网关类,它开始工作。只需将它放在单独的类中,然后在主网关类的构造函数中启动该类。是的。

欢呼声,