web-dev-qa-db-ja.com

「支払い完了後」アクションのWooCommerceフック

WooCommerceとWordpressを使用しています。カスタムライセンスキージェネレーターがあり、誰かがWooCommerceからプラグインを正常に購入したときにライセンスキーを生成したいと思います。

それはかなり簡単なようです:

  1. ユーザーが私のサイトでチェックアウトを完了する
  2. ユーザーはPaypalにリダイレクトされ、支払い資格情報を入力します
  3. Paypalは私のサイトに支払いが完了したことを伝えます
  4. 何らかの「支払い完了」または「order_complete」WooCommerceアクションにフックして、ライセンスを生成します。

問題は次のとおりです。どのフックがこれにうまく機能するかはわかりません。 Woocommerceのサイトには フックのコレクション全体 がリストされていますが、実質的にどのドキュメントが何に適しているかについてのドキュメントはありません。

フック名だけに基づいて、woocommerce_payment_completeは、使用するのに適したアクションです。残念ながら、まったく発射されていないようです。私が読んだいくつかの場所は、それが解雇されたことがないと言っています.

Paypal IPNについても読みましたが、そこからの通知にフックする方法がわかりません(Woocommerceフックに接続しますか?)

要するに、支払いが確認され次第、ライセンスキーを生成したいと思います。これを達成するために何にフックしますか?

32
Pete

さて、私はいくつかの可能な解決策を考え出しました。

支払いの検証を扱う

WooCommerceのPaypal標準ゲートウェイは、実際にはPaypalのIPNサービスをサポートしています。選択した「フック」ルートに関係なく、それを使用する必要があります。

Paypal IPNの設定方法

Paypal IPNは、お金の受取人であるアカウントに接続されます。たとえば、myemail @ gmail.comで支払いを受ける場合は、そのアカウントでIPNを設定する必要があります。すべてのIPNは、Paypalが「Payment Complete!」を送信しています。 (任意の)選択したURLへの通知。 Paypalから通知を送信するURLを選択するには、次の手順を実行する必要があります。

  1. Paypalにログイン
  2. 右上の小さな顔アイコンをクリックします
  3. [プロファイルと設定]をクリックします
  4. 左側のサイドバーにある[販売ツール]をクリックします
  5. 「即時支払い通知」を見つけて、「更新」をクリックします
  6. それらを有効にしてURLを設定します。 WooCommerce Paypal Payments StandardゲートウェイURLは http://yoursite.com/?wc-api=WC_Gateway_Paypal (WooCommerceの Paypal Standardドキュメント に記載されています)。
  7. 設定を保存する

支払いが完了すると、WooCommerceのインストールにPaypalから連絡があります。ああ、ところで、次のことを確認してください。

  • Paypal設定の「受信者の電子メール」が正しい
  • サーバーでfsockopenが有効になっている(WooCommerceの設定でこの「システムステータス」を確認できます)

フックで作業を始めましょう

オプション1:支払いを完了し、woocommerce_order_status_completed特別なアクション/機能用

確認済みの支払い時に製品を自動完了させるには、Mirko Grewingのすばらしい WooCommerce Autocomplete Order プラグインをインストールするだけです。必ず正しい設定を設定してください(WooCommerce設定の[Woo Extra Options]タブの下に表示されます)。

支払いが確認されたときに注文が自動完了されるようになったので、特別な機能のために完了フック `woocommerce_order_status_completed 'にフックするだけです。

この方法の利点は、手動で完了したか、自動的に完了したかどうかに関係なく、完了した任意の順序でフックできる場合です。言い換えれば、それは非常に汎用性があります。

オプション2:woocommerce_payment_complete_order_statusフィルター。支払いが成功したことを示します。

私はそれがかなり一目瞭然だと思います。この方法の利点は、プロセス全体のほとんどの最初のステップであり、上記の完了フックの前に行われることです(優先順位が適切に設定されている場合)。

一方が他方より優れているかどうかはわかりませんが、どちらも私の目標を達成しているようです。支払いが確認された後にアクションを実行します。

27
Pete

woocommerce_payment_complete_order_statusは、支払いがキャンセルされたときにも発生します。 Woocommerce 3.1.2のゲートウェイとしてPaypalを使用してテストしました。

アクション woocommerce_payment_completeは、支払いが成功した場合にのみ発生するようです。

14
Daniel T