我一直在努力解决这个问题。我几乎探索了所有谷歌回复等...
这是我的代码:
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
永远不会被调用。
我做错了什么?
任何帮助将不胜感激。
感谢。
答案 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回复和帮助。但是,我找到了它不能为我工作的原因。
在我的情况下,我将回调函数移出邮件网关类,它开始工作。只需将它放在单独的类中,然后在主网关类的构造函数中启动该类。是的。
欢呼声,