Php Woocommerce自定义支付网关回调函数不工作

Php Woocommerce自定义支付网关回调函数不工作,php,wordpress,woocommerce,payment-gateway,checkout,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, 'c

我已经为此挣扎了一段时间了。我几乎浏览了所有谷歌回复等

这是我的密码:

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函数

我做错了什么

任何帮助都将不胜感激


谢谢。

支付网关应该作为附加插件创建,以连接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)它的存在。通过过滤商业\支付\网关实现此目的:

add_filter( 'woocommerce_payment_gateways', 'add_gateway_mysolugion' );
function add_gateway_mysolugion( $methods ) {
    $methods[] = 'WC_Gateway_mysolugion'; 
    return $methods;
}
然后,您可以添加回调函数,现在应该可以工作了:

function check_callback() {
   // other code
}
参考资料:


支付网关应作为附加插件创建,以连接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)它的存在。通过过滤商业\支付\网关实现此目的:

add_filter( 'woocommerce_payment_gateways', 'add_gateway_mysolugion' );
function add_gateway_mysolugion( $methods ) {
    $methods[] = 'WC_Gateway_mysolugion'; 
    return $methods;
}
然后,您可以添加回调函数,现在应该可以工作了:

function check_callback() {
   // other code
}
参考资料:


    • 感谢@LoicTheAztec的回复和帮助。然而,我找到了它不适合我的原因

      在我的例子中,我将回调函数移出邮件网关类,它开始工作。只需将其放在单独的类中,并在主网关类的构造函数中启动该类。就这样


      干杯,

      谢谢@LoicTheAztec的回复和帮助。然而,我找到了它不适合我的原因

      在我的例子中,我将回调函数移出邮件网关类,它开始工作。只需将其放在单独的类中,并在主网关类的构造函数中启动该类。就这样


      干杯,

      感谢您的快速回复。我很感激。我知道所有这些,并且已经实施了。我为此创建了一个插件。以上所有代码(在原始问题中)都封装在初始化类中。我在这里只放了我的代码的一个简化版本。我尝试了所有我能想到的选项。@A.Ali,最好是链接到一个更一致的代码,有更好的解释和更多的细节,提供太多你尝试过的参考,什么是有效的,什么是无效的…因为不可能只在你的“糟糕”问题的几个细节上提供真正的帮助。谢谢你的快速回复。我很感激。我知道所有这些,并且已经实施了。我为此创建了一个插件。以上所有代码(在原始问题中)都封装在初始化类中。我在这里只放了我的代码的一个简化版本。我尝试了所有我能想到的选项。@A.Ali,最好是链接到一个更一致的代码,有更好的解释和更多的细节,提供太多你尝试过的参考,什么有效,什么无效…因为不可能只在你的“穷人”的少数细节上提供真正的帮助问题。不可能猜到你在问题中留下的信息和代码……嗯,我有法律义务,所以我不能展示完整的脚本。但是,从我在原始问题中编写的代码来看,很明显,我将回调函数放在gateway类中:D@LoicTheAztec让我接受你的回答是认真的吗?如果是这样的话,我会点击那个勾号按钮,但老实说,你的回答(虽然可能是真的)并没有解决我的问题。我仍然投票支持你的回答,尽管我没有接受。根据你在问题中留下的信息和代码,我猜不到这一点……嗯,我有法律义务,所以我不能展示完整的脚本。但是,从我在原始问题中编写的代码来看,很明显,我将回调函数放在gateway类中:D@LoicTheAztec让我接受你的回答是认真的吗?如果是这样的话,我会点击那个勾选按钮,但老实说,你的回答(尽管可能是真的)并没有解决我的问题。我仍然投票支持你的回答,尽管我没有接受。