Laravel исправляет внешний API

#laravel #api #external

#laravel #API #внешний

Вопрос:

Я получаю данные из внешнего источника API.

Я использую это для получения моих заказов

 $data = Http::get(
    $this->URL .'orders?language=nl_NLamp;limit=100amp;format=jsonamp;status_changed_start_date='
       . $last_poll
       . 'amp;ordering=ascamp;partner_token='.$this->PARTNERKEY.'amp;token='.$this->MERCHANTTOKEN.''
)->json();
 

следуя руководству на сайте партнера, я должен использовать этот формат для обновления определенной записи.

 curl -X PATCH $this->URL ."orders/2?language=nl_NLamp;format=jsonamp;override_minimum=falseamp;override_stock=falseamp;mutate_stock=trueamp;partner_token='.$this->PARTNERKEY.'amp;token='.$this->MERCHANTTOKEN.'" 
     -H  "accept: application/json" 
     -H  "Content-Type: application/json" 
     -d "{"status":2,"archived":true,"comments":{"internal":"Owner's commentary"}}"
 

Как мне реализовать это в контроллере Laravel?

Ответ №1:

Используйте HTTP-клиент, предоставляемый Laravel:

 use IlluminateSupportFacadesHttp;
use IlluminateHttpRequest;

class MyController
{
    public function update (Request $request)
    {
        // Maybe use from $request?
        $id = 2;

        Http::patch($this->url . "/orders/" . $id, [
            'version' => 1,
            'order_number' => 2,
            'language' => 'nl_NL',
            'format' => 'json',
            'override_minimum' => false,
            // .. put here the other parameters
        ]);
    }   
}

 

Комментарии:

1. Я обновил свой код с учетом ваших предложений, но мой API не принимает это. Может ли это быть из-за этих параметров? : -H «accept: application / json» -H «Content-Type: application / json» Параметры URL запроса, которые я могу настроить, но это больше связано с частью данных: -d «{«статус»: 2, «архивировано»: true,»комментарии»: {«внутренние»: «Комментарий владельца»}}» URL-адрес руководства по API: connect.myonlinestore.com/swagger-docs . Он находится в разделе Заказ -> Исправление.

2. Какую ошибку возвращает API? Я обновил свой ответ. Пожалуйста, покажите свой полный код.

3. Я получил ошибку 5000, обратитесь в службу поддержки 🙂

4. Это то, что у меня есть сейчас. $responsePatch = Http::patch ($this->URL . ‘/заказать/’ . $item[‘число’] .’?language=nl_NLamp;format=jsonamp;override_minimum=falseamp;override_stock=falseamp;mutate_stock=trueamp;partner_token=’.$this->PARTNERKEY.’amp;token=’.$this->MERCHANTTOKEN , [‘статус’ => ‘2’, ‘archived’ => true,//, ‘comments’ => [ ‘internal’ => $this-> escaperoomcodes ], ] );

5. Спасибо за вашу помощь!

Ответ №2:

Привет, вот мой окончательный код.

кажется, это работает так, как мне было нужно

 $client = new Client([
                // Base URI is used with relative requests
                'base_uri' => $this->URL,
            ]);
              
            $response = $client->request('PATCH', 'orders/' . $item['number'] .'?language=nl_NLamp;format=jsonamp;override_minimum=falseamp;override_stock=falseamp;mutate_stock=trueamp;partner_token='.$this->PARTNERKEY.'amp;token='.$this->MERCHANTTOKEN, [
                'json' => [
                    'status' => 2,
                    'archived' => true,
                    'comments' => ['internal' => $comment]],
            ]);