2016-03-23 10 views
1

私はワードプレスのプラグインを作った。それはクレジットカードで新しい支払いゲートウェイを処理します。成功した取引の後、私は注文を締め切りますが、電子メールは送信できません。私はすべてを試みた。私は、initにメーラーを呼び出そうとしましたが、それはerror.logファイルに失敗します。支払いゲートウェイのプラグインでwordpress/woocommerceの電子メールを起動するには?

PHP Fatal error: Call to a member function get_order_number() on boolean in ....../wp-content/plugins/woocommerce/includes/emails/class-wc-email-customer-processing-order.php on line 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呼び出しを使用して、このクラスでプロバイダ鮫を扱うことができますか?

答えて

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

+0

ありがとう。問題は、プロバイダーがhttp://domain.com/?REFNOEXT=samevalue で私たちのサイトに電話をかけ、支払いが完了したときにのみフックが起動することです。私は注文を締め切り、支払い後に電話をするときにメールを送る必要があります。それはバックグラウンドで起こります。 – MCS

+0

それで、あなたは確認ページでそれをしたいですか?または任意のページで? – Skatox

+0

任意のページです。私はプロバイダの管理者にこのURLを設定する必要があります。その後、トランザクションが完了すると、ポストデータでこのURLを呼び出すことができます。ユーザーがサイトで支払いをした後、1分ほどで発生します。 – MCS

関連する問題