web-dev-qa-db-ja.com

Woocommerce支払い完了フック

長い検索の後、私はこの投稿を見つけました:

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

woocommerceでWebhookを作成してスクリプトに通知することについて話しています...何か...何でも構いません。

また、私はwoocommerce docsで見つけることができるすべてを読みました。

しかし、反対側で実際にハンドラーを作成するための何らかのドキュメントまたはガイダンスが必要です。

私の目標は、支払い完了通知を受信し、購入後にユーザーを別のリスト(見込み客リストではなく顧客リスト)に移動することです。PHPlistをリストマネージャーとして社内で使用しています。リスナーを動かせば、その部分に対処できると確信しています...

しかし、.. Webフックが何を送信するのか、必要なデータを送信するためにどのように取得するのか、リスナーをどうするのかはわかりません。

私もこれを見つけました:

https://wordpress.org/support/topic/plugin-woocommerce-excelling-ecommerce-order-id-for-payment-notification-to-external-webservice?replies=4

どれ-役立つかもしれない?私はまだリスナーからどこから始めるべきかわからない、またはこの投稿がまだ有効かどうか、それが数年前だから...

ありがとう!

- アーロン

19
Aaron Trumm

woocommerce_payment_complete 支払いが完了するとフックが起動します。渡される変数は注文IDだけですが、そこから注文オブジェクト、そして最終的にはユーザーを取得できます。

add_action( 'woocommerce_payment_complete', 'so_payment_complete' );
function so_payment_complete( $order_id ){
    $order = wc_get_order( $order_id );
    $user = $order->get_user();
    if( $user ){
        // do something with the user
    }
}
26
helgatheviking

@helgathevikingと@Scriptonomyの助けを借りて、woocommerce-> settings-> api-> webhooksでwebhookを有効にせずに、このコードに決めました。

add_action( 'woocommerce_payment_complete', 'so_payment_complete' );
function so_payment_complete( $order_id ){  
  $order = wc_get_order( $order_id );
  $billingEmail = $order->billing_email;
  $products = $order->get_items();

foreach($products as $prod){
  $items[$prod['product_id']] = $prod['name'];
}

$url = 'http://requestb.in/15gbo981';
// post to the request somehow
wp_remote_post( $url, array(
 'method' => 'POST',
 'timeout' => 45,
 'redirection' => 5,
 'httpversion' => '1.0',
 'blocking' => true,
 'headers' => array(),
 'body' => array( 'billingemail' => $billingEmail, 'items' => $items ),
 'cookies' => array()
 )
);

今、私はただリスナーを書く必要があります:)これは送信されるリクエストのボディです(requestb.inで見ることができます):

billingemail=%22aaron-buyer%40thirdoptionmusic.com%22&items%5B78%5D=Cult+Of+Nice&items%5B126%5D=Still&items%5B125%5D=The+Monkey+Set
7
Aaron Trumm

Webフックリクエストメイクを調べたい場合は、requestb.inに移動してビンをセットアップすることをお勧めします。したがって、リクエストを検査し、アクションハンドラを作成できます。

ヒント:webhookリクエストは、リクエストの本文にある相対情報をJSON形式のデータとして送信します。ボディをデコードすると、簡単にボディをトラバースして必要な情報を抽出できます。

答えの別の部分では、@ helgathevikingの答えを示し、woocommerce_payment_completeフックを使用します。フック内に入ると、curl POST=リクエストを発行し、リクエストハンドラーの依存関係を本文に挿入します。これらの依存関係を$order_idから抽出します。

1
Scriptonomy