如何在支付网关插件上触发wordpress / woocommerce电子邮件?

时间:2016-03-23 12:50:51

标签: php wordpress email woocommerce payment-gateway

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

  

PHP致命错误:调用成员函数get_order_number()   布尔值   ...... /可湿性粉剂内容/插件/ woocommerce /包括/电子邮件/类-WC-电子邮件客户处理,order.php   在第58行

我尝试在init上创建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调用处理此类的提供程序内容?

1 个答案:

答案 0 :(得分:0)

您正在接触错误的操作,我建议您挂钩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