Публикация

подписчиков: 3 Подписаться
0
Avatar

не отрабатывает PUT overhead на отгрузках

Добрый день. Борюсь с проблемой уже не первый день, никак не могу понять откуда она возникает. Есть сервис, который по хуку проверяет заказы покупателей. Одно из действий — установить накладные расходы отгрузки равными значению допполя в заказе.

Соответственно, генерирую запрос:

// Ссылка на отгрузку
    $link = 'https://online.moysklad.ru/api/remap/1.1/entity/demand/87f6f907-a4dd-11e7-7a34-5acf0001fd7d';

// Данные для входа
    $userName = 'userName';
    $userPassword = 'userPassword';

// Массив для записи
    $put_data = array();
    $put_data['overhead']['sum'] = 100;

// Курлык
    $curl = curl_init();

    curl_setopt($curl, CURLOPT_USERPWD, "$userName:$userPassword");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, $link);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($put_data));
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen(json_encode($put_data)),
        'X-Lognex-WebHook-Disable: true'
    ));

    $response = curl_exec($curl);
    var_dump($response);

Возвращается ответ, без ошибок, в нём JSON отгрузки.
Поля overhead нет (не изменился),
поле updated осталось старым (PUT не отработал, отгрузка не обновилась)

Ошибка всплывает примерно один раз в 50 заказах, при этом остальные случаи попытки сменить накладные расходы работают нормально...

Дмитрий

Войдите в службу, чтобы оставить комментарий.

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

0
Avatar

Дмитрий, здравствуйте. 

Повторная отправка такого же запроса изменяет накладные расходы?

Михаил 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Да, заказ состоит из товаров, не услуг. В ручную всё меняется нормально.
В этом коде заменяю id одной отгрузки на другую и всё работает, обновляет каждый раз на нужную сумму

Дмитрий 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Обернул только что в функцию, прогнал тестом 10 повторов, на одной отгрузке 100% success, на другой 100% fail

Дмитрий 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Я сейчас сделаю тикет. Можете дать идентификатор отгрузки, по которой всё успешно проходит? 

Михаил 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Сравнил две отгрузки (из представление из АПИ), у не поддающейся изменению (1) и нормально работающей на изменение (2), отличия следующие:

f6ee1b4e-b002-11e7-7a69-8f55000412a4
// не работает PUT
{
    "contract": {...},
    "attributes": [...],
    "vatEnabled": true,
    "vatIncluded": true,
    "vatSum": 111111,
    "factureOut": {...}
}
a1ca5f25-aa62-11e7-7a31-d0fd00021091
// Работает PUT
{
    "vatEnabled": false,
    "overhead": {
        "sum": 111,
        "distribution": "price"
    },
}

Остальные отличия касаются имени, ссылок на связанные сущности и т.д.

Дмитрий 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

А там не договор комиссии? С договором комисии накладные расходы не работают. Ошибка не кидается. Поправим документацию, как минимум. Либо появится спец ошибка

Михаил 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Да, действительно, договор комиссии! При этом вручную всё нормально проставляется...
Накладные не работают в принципе, или через АПИ? Я не силён в договорах =)
Напишите, пожалуйста в эту ветку, если появится решение проблемы или будут сделаны соответствующие изменения в документации. Спасибо.

Дмитрий 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Здравствуйте. Проблема редактирования накладных расходов для отгрузок по комиссионному договору была исправлена

Михаил 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Вот немного схожий вопрос. при кастомном методе к PUT и DELETE в ответ идет висняк и вылет скрипта на ошибке пустого ответа, создается такое впечатление что с php 7+ через курл не передается метод... может быть дадите рабочий пример именно обращения к сервису через курл?

Сергей 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Сергей, здравствуйте.

Рекомендую использовать готовую библиотеку, а не на "голом" cURL, если с ним возникают проблемы. Например, http://docs.guzzlephp.org/en/stable/ Либо посмотрите, как реализовывали запросы в php-библиотеке для взаимодействия с API - https://github.com/Tooyz/moysklad

Либо искать, как правильно использовать curl - не думаю, что в 7+ что-то сильно меняли - вот на stackoverflow вопрос, например - https://stackoverflow.com/questions/21271140/curl-and-php-how-can-i-pass-a-json-through-curl-by-put-post-get

Михаил 0 проголосовали
Действия с комментариями Постоянная ссылка