2016-07-19 10 views
0

私はしばらくの間これを苦労してきました。私はほとんどすべてのGoogleはここで...などWoocommerceカスタム支払いゲートウェイのコールバック機能が動作しない

を返信私のコードです探求:

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います。

私は間違っていますか?

ご協力いただければ幸いです。

ありがとうございました。

答えて

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 
} 

参考文献:

+0

お返事ありがとうございます。それは有り難いです。私はこれをすべて知っており、既に実装しています。私はこれのためのプラグインを作成しました。上のすべてのコード(元の質問)は、インライン化クラスの中にラップされています。私はここに私のコードの単純化されたバージョンを置く。私は考えることができるすべてのオプションを試しました。 –

+0

@A.Ali親切にも、より一貫したコードへのリンクを作る方が良いでしょう。より詳細な説明と詳細、あなたが試した参考文献、働いているもの、そうでないものを与えてください。あなたの "貧しい"質問のいくつかの詳細と一緒に。 – LoicTheAztec

0

ありがとう@LoicTheAztec、返信と助けのために。しかし、それが私のために働いていない理由を見つけました。

私のケースでは、メールゲートウェイクラスからコールバック関数を移動して作業を開始しました。単に別のクラスに配置し、メインゲートウェイクラスのコンストラクタでそのクラスを開始します。それでおしまい。

乾杯、

+0

あなたの質問に残した情報とコードを推測することは不可能です... – LoicTheAztec

+0

まあ、私は法的義務を負っていましたので、私は完全な脚本を表示できませんでした。しかし、私が元の質問で書いたコードから、ゲートウェイクラス内にコールバック関数を置いていることは明らかです。D –

+0

@LoicTheAztecはそれほど深刻で私の答えは受け入れられませんか?もしそうなら、私はそのチックボタンをクリックしますが、正直なところあなたの答えは(それは真実かもしれませんが)私の問題を解決しませんでした。 –

関連する問題