1

Estoy trabajando con un proyecto en prestashop y a su vez consumiendo informacion desde el webservice, el problema que tengo es que no logro acceder al dato, tengo mi codigo asi:

public function getAllOrders()
    {
        $orderNumber = PrestashopOrder::all();

        foreach($orderNumber as $number) {
            try {
                $webService = new PrestaShopWebservice('https://mitienda.com/', 'API_KEY', false);
                // call to retrieve all customers
                $xml = $webService->get([
                    'resource' => 'orders',
                    'id' => $number->order_number,
                ]);                
                $json = json_encode($xml);
                $array = json_decode($json, true);
                //dd($array);                
                $resourceRF = $array;
                //dd($resourceRF);
                foreach($array as $resource) {
                    //Aqui como acceso al valor ID
                    $resourceId = $resource["order"]['id'];
                    $neworder = PrestashopOrder::updateOrCreate(
                        ['order_number' => $resourceId],
                        ['order_number' => $resourceId,
                        'reference' => $resourceRF]
                    );
                }
            
            } catch (PrestaShopWebserviceException $ex) {
                // Shows a message related to the error
                echo 'Other error: <br />' . $ex->getMessage();
            }

        }
    }

La duda es como acceder a este dato , intento de esta forma pero siempre me retorna el array completo.

//Aqui como acceso al valor ID
$resourceId = $resource["order"]['id'];

la data me esta retornando de esta forma

introducir la descripción de la imagen aquí

1
  • order, según se aprecia en la captura de pantalla (habría sido mejor que pongas el texto con una parte del array), es una array con 49 elementos. ¿A cuál de esos 49 elementos quieres acceder? Si quieres acceder al primero, sería algo como esto: $resourceId = $resource["order"][0]['id'];. Como quiera, hay que no cuadra aquí, ¿por qué tienes varios elementos si sólo necesitas uno? Debería haber formas de traer un solo elemento.
    – A. Cedano
    Commented el 30 sept. 2022 a las 10:34

1 respuesta 1

1

Creo que la consulta al servicio sólo te devuelve un pedido (el correspondiente al id que le pasas). Por eso no sé porqué haces un foreach, no lo necesitas. En cualquier caso, haciendo el foreach, $resource ya es el elemento 'order', de forma que sería:

$resourceId = $resource['id'];

Pero lo suyo sería prescindir del foreach, en cuyo caso:

$resourceId = $array['order']['id'];

Aparte, podrías considerar comprobar si el servicio te ha devuelto lo que esperas, para controlar posibles errores. Por lo menos tienes un try catch.

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.