如何重新启动 woocommerce webhook

How to re-fire a woocommerce webhook

我们有一些 'action' 类型的 webhook 设置,但有时我们想重新发送最初通过 webhook 发送的数据。例如 webhook 启动了一个自动化进程,但是失败了,我们需要重新启动 ti。为此,我向管理元框添加了自定义订单操作,但现在我需要它们来实际(重新)触发 webhook。

function pwk_wc_add_order_meta_box_action( $actions ) {
    global $theorder;

    // continue if the order completed, processing or refunded
    if ( $theorder->has_status('processing') || $theorder->has_status('completed') || $theorder->has_status('refunded')  ) {
        
        $actions['wc_resend_order_webhook'] = __( 'Refire this order webhook', 'text-domain' );
        
        return $actions;
        
    } else {
        return $actions;
    }
}

我的 webhook 是这样设置的:

Name action.woocommerce_payment_complete
Status Active
Topic Action
Action event woocommerce_payment_complete

我可以对 运行 网络钩子调用什么操作?我不希望只发送 webhook 来触发订单电子邮件。在我的情况下,它是“woocommerce_payment_complete”,但实际上如何为任何操作或主题重新触发 webhook?

编辑 1:所以我使用 Action 事件创建了一个新的 webhook woocommerce_order_action_wc_resend_order_webhook,然后向函数添加了一些内容:

function pwk_process_resend_order_webhook_meta_box_action( $order ) {
    
     // add the order note
    $message = sprintf( __( 'Order resent to integromat.', 'text-domain' ));
    $order->add_order_note( $message );
    $arg = $order->get_order_number();
    return $arg;
}
add_action( 'woocommerce_order_action_wc_resend_order_webhook', 'pwk_process_resend_order_webhook_meta_box_action' );

虽然这确实触发了一个 webhook,但看起来它是一个数组而不是简单的订单 ID:

{
  "action": "woocommerce_order_action_wc_resend_order_webhook",
  "arg": []
}

一个解决方案是利用 woocommerce_order_action,因为它允许新的操作,然后 运行 一个 do_action 创建一个操作,其唯一目的是触发 webhook。动作名称woocommerce_order_action_fire_webhook_order组成 即 <woocommerce_order_action_>anything_you_want 也有效

function pwk_process_resend_order_webhook_meta_box_action( $order ) {
    
    $message = sprintf( __( 'Order details resent via webhook.', 'text-domain' ));
    $order->add_order_note( $message );
    
    do_action( 'woocommerce_order_action_fire_webhook_order', $order->get_order_number() );
}
add_action( 'woocommerce_order_action_wc_resend_order_webhook', 'pwk_process_resend_order_webhook_meta_box_action' );

然后还为事件 woocommerce_order_action_fire_webhook_order

创建一个 action 类型的 webhook

老实说,我不完全确定为什么会这样,所以欢迎任何评论或修改。