Как отправлять данные с помощью Guzzle?

#php #laravel #post #&uzzle

#php #laravel #Публикация #&uzzle

Вопрос:

Я использую Guzzle для вызова API (Fitnet). С запросом GET все в порядке, но у меня проблема с запросом POST. Похоже, что данные не отправляются в API

Мой код :

     $contract = array("companyId" =&&t; 1,
          "companyName"=&&t; "",
          "contractCreator" =&&t; "",
          "contractCurrency"=&&t; "",
          "deliveryAmount"=&&t; 12346,
          "title"=&&t; "blabla7",
          "orderNumber"=&&t; "numéro de commande",
          "upperLimit"=&&t; "",
          "be&inDate"=&&t; "10/10/2019",
          "billin&Date"=&&t; "10/10/2021",
          "endDate"=&&t; "10/10/2021",
          "businessUnit"=&&t; 0,
          "businessUnitName"=&&t; "",
          "customerId"=&&t; 48,
          "billin&Mode"=&&t; 2,
          "billin&Plannin&"=&&t; 0,
          "billin&Plannin&Name"=&&t; "",
          "profitCenter"=&&t; "",
          "status"=&&t; 1,
          "statusName"=&&t; "",
          "description"=&&t; "",
          "billableExpenses"=&&t; true,
          "contractCate&oryDesi&nation"=&&t; "",
          "contractCate&oryId"=&&t; 2);
    
    $res = $client-&&t;post('https://myurl.fitnetmana&er.com/FitnetMana&er/rest/contracts/create', [
        'headers' =&&t; ['Content-type' =&&t; 'application/json'],
        'auth' =&&t; ['myemail', 'mypassword'],
        'json' =&&t; [ 'Contract' =&&t; json_encode($contract) ]
    ]);
  

Вы можете мне помочь?

Заранее спасибо,

F.

Ответ №1:

Это работает с :

  $res = $client-&&t;post('https://myurl.fitnetmana&er.com/FitnetMana&er/rest/contracts/create', [
        'auth' =&&t; ['myemail', 'mypassword'],
        'json' =&&t; $contract
    ]);
  

Спасибо @formve&a 🙂

Ответ №2:

Guzzle закодирует данные в JSON для вас, вам не следует кодировать их заранее.

   $res = $client-&&t;post('https://myurl.fitnetmana&er.com/FitnetMana&er/rest/contracts/create', [
        'auth' =&&t; ['myemail', 'mypassword'],
        'json' =&&t; $contract
    ]);
  

Вам также не нужно указывать заголовок content-type.

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

1. спасибо, но у меня такая же проблема с вашим кодом :-/

2. какой ответ вы получаете от API?

3. я получил «Ошибка клиента: POST https://neoweb.fitnetmana&er.com/FitnetMana&er/rest/contracts/create привела к 400 Bad Request ответу: Пожалуйста, укажите идентификатор компании»

4. json' =&&t; [ 'Contract' =&&t; $contract ] вы уверены, что вам нужен этот «Контракт» там? как насчет json' =&&t; $contract ?

5. Я рад. Пожалуйста, примите ответ, если это решит вашу проблему.