调用WooCommerce Rest Api创建订单未返回checkout url问题求助
WooCommerce 调用REST API创建订单无checkout URL问题解决方案
问题根因
mailchimp_woocommerce_landing_site 是Mailchimp for WooCommerce插件的自定义字段,只有用户通过前端页面触发结账流程时,插件才会自动将当前落地的结账地址写入该meta字段。直接调用REST API创建订单不会触发前端页面相关的插件钩子,因此该字段默认值为空。
可用解决方案
方案1:直接按规则拼接结账URL(最稳定,无需修改站点代码)
WooCommerce订单结账支付URL有固定拼接规则,调用创建订单接口成功后,直接用返回的两个核心参数拼接即可,无需依赖第三方插件的meta字段:
- 拼接规则:
[你的站点域名]/checkout/order-pay/[订单ID]/?key=[订单key] - 接口返回参数说明:
- 订单ID:创建订单成功后返回的顶层
id字段值 - 订单key:创建订单成功后返回的顶层
order_key字段值
- 订单ID:创建订单成功后返回的顶层
- 示例:若订单ID为443614,订单key为
wc_order_o9LVuBKCMnKP6,拼接后的完整URL为https://firewallforce.se/checkout/order-pay/443614/?key=wc_order_o9LVuBKCMnKP6,和你手动生成订单拿到的地址完全一致。
方案2:添加钩子自动填充meta字段(适用于必须保留该meta字段值的场景)
如果业务要求必须在mailchimp_woocommerce_landing_site字段中存储结账地址,可在站点主题的functions.php文件中添加如下钩子代码,监听REST API创建订单的动作,自动写入对应值:
add_action('woocommerce_rest_insert_shop_order', function($order, $request, $creating) { // 仅处理新建订单的场景 if ($creating) { // 调用WooCommerce原生方法获取结账支付URL $payment_url = $order->get_checkout_payment_url(); // 写入对应meta字段 $order->update_meta_data('mailchimp_woocommerce_landing_site', $payment_url); $order->save_meta_data(); } }, 10, 3);
添加代码后再调用创建订单API,返回结果中对应meta字段的value就会自动填充正确的结账URL。
内容的提问来源于stack exchange,提问作者Prince Hamza
相关产品推荐
相关产品推荐

