La suscripción de Woocommerce obtiene la identificación de la identificación del pedido con API

2 minutos de lectura

Avatar de usuario de Damiano Fontana
damiano fontana

¿Es posible obtener la identificación de suscripción de la identificación de pedido de Woocommerce con la API de WooCommerce? Estoy usando PHP y con esto puedo obtener todos los datos del pedido, pero no la identificación de la suscripción:

$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);

  • ¿Ha probado un punto final de API similar? www.example.com/wp-json/wc/v3/subscriptions

    – muy solo

    25 abr 2021 a las 23:34

  • Sí, pero necesito la identificación de suscripción para ese punto final… pero primero necesito obtener la identificación de suscripción de la identificación de pedido de woocommerce que tengo

    – Damián Fontana

    26 de abril de 2021 a las 12:24

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

Agregue este fragmento de código en el tema activo de su servidor function.php. Luego, la respuesta de la API del pedido contendrá el id_suscripción

  • He probado este código, pero en ejemplo.com/wp-json/wc/v3/orders/”.$orderId endopoint no veo ningún elemento subscribe_id

    – Damián Fontana

    28 de abril de 2021 a las 14:24

  • @DamianoFontana Verifique si el código se ejecuta cuando se activa la solicitud.

    – muy solo

    28 de abril de 2021 a las 14:47

  • Intenté agregar un parámetro de prueba, pero no puedo verlo en la respuesta del punto final… function add_woo_field_order_api_response ($order_data, $order, $fields, $server) { $order_data[‘test-parameter’] = “Prueba prueba prueba”;

    – Damián Fontana

    28 de abril de 2021 a las 14:54

  • dominykasgel.com/modify-woocommerce-api-orders-response

    – muy solo

    28 de abril de 2021 a las 15:02

  • ¿Debo usar prefix_wc_rest_prepare_order_object en lugar de add_woo_field_order_api_response?

    – Damián Fontana

    28 de abril de 2021 a las 16:43

Lo he resuelto con este código en mi archivo functions.php en WordPress:

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);

Gracias a mujuonly por la referencia y por el fragmento inicial.

¿Ha sido útil esta solución?