@BarneyGumble

Почему в Postman запрос к API работает, а через PHP-cURL — нет?

Работаю с API МойСклад, стоит задача получить расходную накладную от них

Сделал в Postman запрос, всё отлично приходит:
kHlTbQ1d.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2014-06-2021%2001:29:53.jpg

Но мне надо получить эту накладную в моём php файле для дальнейшей работы. На скриншоте выше справа есть блок с php/curl кодом, который я копирую и добавляю в свой php файл. Единственное добавляю туда ещё 2 строки для http авторизации:
CURLOPT_USERPWD => 'mylogin:mypassword',
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,


В итоге мой код выглядит так:
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://online.moysklad.ru/api/remap/1.2/entity/demand/fdc8dbab-acd6-11eb-0a80-09cb004a2c1a/export/',
  CURLOPT_USERPWD => 'mylogin:mypassword',
  CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "template": {
        "meta": {
            "href": "https://online.moysklad.ru/api/remap/1.2/entity/demand/metadata/embeddedtemplate/29a9b716-8664-4b13-baae-a78db1710bdb",
            "type": "embeddedtemplate",
            "mediaType": "application/json"
        }
    },
    "extension": "xls"
}',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Basic ==my-custom-token==',
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;


В итоге, запускаю свой php файл в браузере получаю:
{
  "errors" : [ {
    "error" : "Ошибка формирования печатной формы: отсутствует ссылка на шаблон для печати",
    "code" : 33003,
    "moreInfo" : "https://dev.moysklad.ru/doc/api/remap/1.2/#error_33003"
  } ]
}


Сначала думал, что ошибка в body запроса...но где там ошибаться, если в Postman всё работает, а при копирования кода для php нет. Начал в Postman отключать галочки в Headers, и, отключив галку "Content-Length" получил ту же ошибку, что и получаю в браузере:
ZYlAWkmF.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2014-06-2021%2001:31:08.jpg

Я было обрадовался, думаю, надо просто дополнить CURLOPT_HTTPHEADER, чтобы было так:
CURLOPT_HTTPHEADER => array(
  'Authorization: Basic ==my-custom-token==',
  'Content-Type: application/json',
  'Content-Length: 278',
),


К слову, Content-Length достал добавив в свой код вывод $info = curl_getinfo($curl)

Но, это не помогло, ошибка та же. Застопорился, куда копать дальше?
  • Вопрос задан
  • 962 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Timpo
Можно копать wiresharkом, сравнить два пакета которые отправляются и увидеть разницу
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы