【问题标题】:How to trigger wordpress / woocommerce email on payment gateway plugin?如何在支付网关插件上触发 wordpress / woocommerce 电子邮件?
【发布时间】:2016-03-23 12:50:50
【问题描述】:

我制作了一个 wordpress 插件。它使用信用卡处理新的支付网关。交易成功后,我关闭了订单,但无法发送电子邮件。我什么都试过了。我尝试在初始化时调用邮件程序,但在 error.log 上失败:

PHP 致命错误:调用成员函数 get_order_number() on 布尔输入 ....../wp-content/plugins/woocommerce/includes/emails/class-wc-email-customer-processing-order.php 第 58 行

我试图在初始化时创建一个new WC_simplepay();,它失败了,找不到类。

我尝试使用新函数在类中发送相同的邮件,并使用 $this->functionname(); 从构造函数中调用它它可以工作,邮件已发送,但支付提供商(或我)无法从 url 调用它(这就是为什么我检查请求参数),因为该类仅在您处于结帐页面时加载。

我尝试了全局 $woocommerce ... 等解决方案,但在 init 部分也没有工作,只在类内工作。

插件代码的开始:

    add_action('plugins_loaded', 'woocommerce_simplepay_init', 0);

    function woocommerce_simplepay_init(){
        if(!class_exists('WC_Payment_Gateway')) return;

        if ($_REQUEST['REFNOEXT']!='')
        {
            /* .... here are some code regarding the gateway provider ,logging, etc... fully working */
            $order_id = explode('_',$_REQUEST['REFNOEXT']);
            $order = new WC_Order($order_id[0]);
            $order->update_status('processing');
            WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger($order_id[0]); // this is generating the error
        }

    class WC_simplepay extends WC_Payment_Gateway{

        public function __construct(){
...

那么基本上我如何才能关闭订单,向客户发送电子邮件并使用远程 URL 调用处理此类提供者的事情?

【问题讨论】:

    标签: php wordpress email woocommerce payment-gateway


    【解决方案1】:

    你挂错了,我建议你挂上init,因为它是在所有插件(包括woocommerce)加载后执行的。

    add_action('init', 'woocommerce_simplepay_init');
    
    function woocommerce_simplepay_init(){
        if(!class_exists('WC_Payment_Gateway')) return;
    
        if ($_REQUEST['REFNOEXT']!='')
        {
            $order_id = explode('_',$_REQUEST['REFNOEXT']);
            $order = new WC_Order($order_id[0]);
            $order->update_status('processing');
            WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger($order_id[0]); // this is generating the error
        }
    

    但由于您使用的是类,我认为最好将此函数包含在类中。

    Init hook reference

    【讨论】:

    • 谢谢。问题是提供商使用domain.com/?REFNOEXT=samevalue 调用我们的网站,并且挂钩仅在付款完成时触发。当他们在付款后打电话给我时,我需要关闭订单并发送邮件。它发生在后台。
    • 那么,您想在确认页面中进行操作吗?或在任何页面中?
    • 在任何页面中。我必须在提供程序管理员上设置此 url。然后他们可以在事务完成时使用发布数据调用此 url。它发生在用户在网站上付款后大约一分钟内。
    • 钩子被触发,但失败。 PHP 致命错误:在第 58 行的 .../plugins/woocommerce/includes/emails/class-wc-email-customer-processing-order.php 中以布尔值调用成员函数 get_order_number()
    • 检查更新的答案,我已经改变了钩子和解释。这应该适合你。
    猜你喜欢
    • 2014-03-10
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2012-06-30
    • 1970-01-01
    • 2014-03-31
    • 2014-05-30
    相关资源
    最近更新 更多