WooCommerce 支付完成挂钩

问题描述 投票:0回答:3

经过长时间的搜索,我找到了这篇文章:

用于“付款完成后”操作的 WooCommerce 挂钩

其中讨论了在 WooCommerce 中创建 Web 挂钩以通知脚本执行...某事...并不重要。

我还阅读了 WooCommerce 文档中可以找到的所有内容。

但我需要某种文档或指导来实际在另一端编写处理程序。

我的目标是接收付款完成通知,然后在购买后将用户移动到不同的列表(客户列表而不是潜在客户列表) - 我在内部使用 PHPlist 作为我的列表管理器。 很确定我可以处理这部分,如果我能让听众继续......

但是..我不知道网络钩子发送什么,如何让它发送我想要的数据,以及如何处理监听器。

我也发现了这个:

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

哪个 - 可能有帮助? 我仍然不确定从听众那里开始,或者这篇文章是否仍然有效,因为它已经有几年了......

woocommerce webhooks
3个回答
84
投票

支付完成后,会触发

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
    }
}

17
投票

在 @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

2
投票

如果您想检查网络挂钩请求构成,我建议您前往 requestb.in 并设置一个垃圾箱。从而允许您检查请求并制定操作处理程序。

提示:webhook 请求在请求正文中以 JSON 格式的数据发送相关信息。一旦解码了正文,就可以轻松遍历它并提取所需的信息。

在答案的另一部分,我向您指出@helgatheviking 答案并使用

woocommerce_payment_complete
钩子。进入钩子后,触发curl POST 请求并在正文中插入任何请求处理程序依赖项。您将从
$order_id
.

中提取这些依赖项
© www.soinside.com 2019 - 2024. All rights reserved.