Woocommerce Subscription 使用 API 从订单 id 获取 id

Posted

技术标签:

【中文标题】Woocommerce Subscription 使用 API 从订单 id 获取 id【英文标题】:Woocommerce Subscription get id from order id with API 【发布时间】:2021-07-19 02:16:31 【问题描述】:

是否可以通过 WooCommerce 的 API 从 Woocommerce 订单 ID 中获取订阅 ID? 我正在使用 php,通过它我可以获取所有订单数据,但不能获取订阅 ID:

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => "https://www.example.com/wp-json/wc/v3/orders/".$orderId,
    CURLOPT_USERPWD => 'code:code',
    CURLOPT_HTTPHEADER => array(
         "accept: application/json"
    )
]);
$woocommerceOrder = curl_exec($curl);

【问题讨论】:

你试过类似的 API 端点 www.example.com/wp-json/wc/v3/subscriptions 是的,但我需要该端点的订阅 ID...但我需要先从我拥有的 woocommerce 订单 ID 中获取订阅 ID 【参考方案1】:

我已经在 Wordpress 中的 functions.php 文件中解决了这段代码:

function prefix_wc_rest_prepare_order_object($response, $object, $request)
    // Get the subscription id
    $subscriptions_ids = wcs_get_subscriptions_for_order($object->get_id(), array('order_type' => 'any'));
    // We get all related subscriptions for this order
    foreach($subscriptions_ids as $subscription_id => $subscription_obj)
        if($subscription_obj->order->id == $object->get_id())
            break; // Stop the loop
        
    
    $response->data['subscription_id'] = $subscription_id;
    return $response;

add_filter('woocommerce_rest_prepare_shop_order_object', 'prefix_wc_rest_prepare_order_object', 10, 3);

感谢 mujuonly 提供参考和最初的 sn-p。

【讨论】:

【参考方案2】:
add_filter( 'woocommerce_api_order_response', 'add_woo_field_order_api_response', 20, 4 );

function add_woo_field_order_api_response( $order_data, $order, $fields, $server ) 

    // Get the subscription id
    $subscriptions_ids  = wcs_get_subscriptions_for_order( $order->get_id(), array( 'order_type' => 'any' ) );
    // We get all related subscriptions for this order
    foreach ( $subscriptions_ids as $subscription_id => $subscription_obj )
        if ( $subscription_obj->order->id == $order_id )
            break; // Stop the loop
    $order_data[ 'subscription_id' ] = $subscription_id;
    return $order_data;

在您的服务器活动主题function.php 中添加此代码sn-p。然后订单 API 响应将包含订阅 ID

【讨论】:

我已经尝试过这段代码,但在example.com/wp-json/wc/v3/orders/".$orderId endopoint 我没有看到任何元素subscription_id @DamianoFontana 检查代码是否在请求被触发时被执行。 我尝试添加一个测试参数,但在端点响应中看不到它... function add_woo_field_order_api_response( $order_data, $order, $fields, $server ) $order_data ['test-parameter'] = "测试测试测试"; dominykasgel.com/modify-woocommerce-api-orders-response 我应该使用 prefix_wc_rest_prepare_order_object 代替 add_woo_field_order_api_response 吗?

以上是关于Woocommerce Subscription 使用 API 从订单 id 获取 id的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce 订阅挂钩案例

woocommerce订阅切换操作不起作用

带有账户资金支付挂钩的 WooCommerce 订阅

在 WooCommerce 订阅中获取用户 ID

Woocommerce 订阅中的订阅频率和价格变化挂钩

WooCommerce订阅 - 续订时未触发动作挂钩