如何触发woocommerce回调函数?

Posted

技术标签:

【中文标题】如何触发woocommerce回调函数?【英文标题】:How to trigger woocommerce callback function? 【发布时间】:2019-06-01 03:16:14 【问题描述】:

我正在尝试通过访问浏览器中的回调 URL http://localhost:90/wordpress-payment-demo/wc-api/callback_handler/ 来测试我的回调函数是否有效,但我一直得到 -1。这是我的回调函数。

$this->id = 'paymentplugin';

add_action( 'woocommerce_api_wc_' . $this->id , array( $this, 'callback_handler' ) );

function callback_handler()  
    header( 'HTTP/1.1 200 OK' );
    echo "callback";
    die();

我还尝试使用 Postman 发布到 URL,但我收到了 400 bad request 的状态代码。

【问题讨论】:

【参考方案1】:

这看起来像是自定义 WooCommerce 支付网关的 webhook。在这种情况下,您可能不需要 add_action 函数中的 _wc_

例子:

$this->id = 'paymentplugin';

add_action( 'woocommerce_api_' . $this->id , array( $this, 'webhook' ) );

function webhook()  
    header( 'HTTP/1.1 200 OK' );
    echo "callback";
    die();

您还不需要结束执行,因为这是由 WooCommerce 完成的,因此您可能想要删除 die() 函数:

$this->id = 'paymentplugin';

add_action( 'woocommerce_api_' . $this->id , array( $this, 'webhook' ) );

function webhook()  
    header( 'HTTP/1.1 200 OK' );
    echo "callback";

要考虑的另一件事是标题。我不知道是否需要发送它们,但我最近创建了一个自定义网关,该网关在 webhook 中只有此代码,并且运行良好:

function webhook() 
  $order_id = isset($_GET['order_id']) ? $_GET['order_id'] : null;
  $order = wc_get_order( $order_id );
  $order->payment_complete();
  wc_reduce_stock_levels($order_id);

支付提供商基本上会发送一个包含我之前发送的订单 ID 的 IPN,因此我可以确认订单已付款。

这是我最近创建的自定义网关的链接,希望对您有所帮助:

https://github.com/usainicola/weldpay-woocommerce

【讨论】:

非常感谢!这工作 webhook/callback 函数似乎总是返回-1。但是,它运行成功。另一个问题是我使用了错误的 URL,它不应该是函数的名称,而是这个示例中的 id "paymentplugin"。 @nicola 如果我不放 die() 它出于某种原因返回 -1。如果我说它,它可以正常工作并回显一个字符串。知道为什么吗?

以上是关于如何触发woocommerce回调函数?的主要内容,如果未能解决你的问题,请参考以下文章

如果回调函数没处理完,又产生了触发该回调函数的事件,怎么处理?

核心蓝牙的 didUpdateValueFor 回调函数不触发

如果应用了 css 过渡,为啥动画回调函数会立即触发?

async.times 函数不会触发回调

JQuery Plugin - 通过回调触发内部函数

哪个事件触发了回调函数