Curl php post: PHP, cURL, and HTTP POST example?
Создать новую строку заказа GetNewOrderDtl CURL PHP — ERP 10
Дрю
(Дрю Фучетола)
1
Здравствуйте, EpiUsers,
Справочная информация:
Я разрабатывал небольшой веб-перехватчик для ввода заказов для моей компании. Конечная цель — перехватывать новые заказы и автоматически вводить их в Epicor по мере их поступления. Пока у меня есть:
- Аутентифицировано с помощью Shopify и Epicor
- Получены и отформатированы данные shopify
- Создан новый заголовок SO из данных shopify с использованием: api/v1/Erp.BO.SalesOrderSvc/SalesOrders
Итак, прямо сейчас каждый заказ создает заголовок с информацией о доставке, и он полностью автоматизирован, и я горжусь своими достижениями новичка, и жизнь прекрасна! Следующим шагом будет добавление строк заказа в созданный мною заголовок. Я выделил OrderNum из возврата метода SalesOrders, чтобы использовать его при создании строк заказа.
Мне помогли на этом форуме, когда метод SalesOrders заработал: Rest PHP multi-company Создание заказа Компания B Erp.BO.SalesOrderSvc/SalesOrders
Недавняя тема
Недавно я пытался создать строки с помощью api/v1/Erp.BO.SalesOrderSvc/OrderD тлс. Ошибка возврата была странной, и после некоторой помощи с этого форума решил попробовать другой метод. Если вы хотите увидеть этот фон, ссылка: Rest API 1000 SO Limit SalesOrderSvc/OrderDtls
Текущая попытка
Вышеупомянутые потоки и этот журнал трассировки заставили меня попробовать новый метод с сайта swagger:
Мой новый вызов Rest для api/v1/Erp.BO.SalesOrderSvc/GetNewOrder Dtl выдает новые ошибки. Мне трудно правильно отформатировать поля сообщения. Я предполагаю, что у меня может быть ошибка, потому что я не понимаю заголовок «CallSettings» или просто неправильно форматирую json. Что-то связанное с массивом «ds» или «OrderHed».
Я перепробовал множество форматов, но безуспешно. Я опубликую 2 примера с ошибкой, которую я получаю.
Код тестирования Ответ
: BadRequest Исключение REST API Параметр ds не найден во входном объекте Epicor.RESTApi.ErrorHandling.ApiException
CURLOPT_POSTFIELDS => ‘{
«CustNum»: 3,
«OrderNum»: «’ . $OrdNum . ‘»,
«SellingQuantity»: «1»,
«PartNum»: «KYV100FBA»}’,
После получения вышеуказанного ответа от приведенного выше кода я посмотрел на формат swagger и увидел, что там было «ds»: {«OrderHed»: [{… перед обычными полями сообщения, с которыми я работал в предыдущих успехах. Я попытался обновить его с помощью приведенного ниже кода и получил ответ ниже.
ответ: BadRequest Исключение REST API Параметр orderNum не найден во входном объекте Epicor.RESTapi.ErrorHandling.ApiException
CURLOPT_POSTFIELDS => ‘{
«ds»: {
«OrderHed»: [{
«CustNum»: 3,
«OrderNum»: «’ . $OrdNum .’»,
«SellingQuantity»: «1»,
«PartNum»: «KYV 100FBA”}]}}’,CURLOPT_HTTPHEADER => массив( "Авторизация: Базовая" . $ авторизация, "Принять: приложение/атом+xml", "Кэш-Контроль: без кеша", "Тип контента: приложение/json", 'Настройки вызова: {"Компания":"25558B"}', "Верх: 1000" )
Расширение моего кода
Я попытался следовать формату в swagger и добавил в структуру правильную информацию… но независимо от того, что я получаю ответ «no orderNum found». Структура выглядит примерно так:
{ "дс": { "ЗаказХед": [ { "Компания": "25558Б", ... } ], "ОрдерХедАттч": [ { "Компания": "25558Б", ... } ], "OHOrderMsc": [ { "Компания": "25558Б", ...
Такой формат останется навсегда. Но в DMT для этого требуется всего 4 поля. Я уверен, что сейчас некоторые из вас видят миллион вопиющих ошибок. Пожалуйста, просветите меня.
Дрю
(Дрю Фучетола)
2
Обновление
Я решил проблему с форматированием. Я просто пропустил orderNum рядом с ds. Я до сих пор не уверен, что означает ds… или зачем мне нужен orderNum в этой части массива… но теперь я получаю гораздо лучшую отдачу! Это почти как ответ GET.
Это рабочий код:
curlopt_postfields => ‘{
« DS »: {
« Заказ »: [{
« Заказнум »:« ». «Продажа quantity»: «1»,
«Partnum»: «Kyv100fba»
}]
},
«OrderNum»: 1553
},
После небольшой проверки журнала трассировки я теперь экспериментирую с методом MasterUpdate: api/v1/Erp.BO.SalesOrderSvc/MasterUpdate
Я надеялся, что он действительно обновит строки, когда я отправил сообщение, но ничего не создается. Вывод показывает мои входы. Например, это ввод:
«lCheckForOrderChangedMsg»: true,
«lcheckForResponse»: true,
«cTableName»: «OrderDtls»,
«iCustNum»: 3,
«iOrderNum»: 1553,
«lweLicensed»: true, 9 0011 «ds»: {
«OrderHed»: [{
}],
«OrderHedAttch»: [{
}],
«OrderDtl»: [{
«CustNum»: 3,
«Компания»: «29558B»,
«Заказ Число»: «1553»,
«OrderLine»: 0,
«SellingQuantity»: «1»,
«PartNum»: «KYV100FBA»
}],
«OrderDtlAttch»: [{
}],
И он возвращает большой ответ, в основном с пустыми значениями. В разделе ответов посередине для orderdtl указаны введенные мной значения. это выглядит так (я использую … для представления кода выше и ниже):
«параметры»: {«lContinue»: true, «cResponseMsg»: «», «cCreditShipAction»: «»…
…
[{«VoidLine»: false, «OpenLine»: true, «Company»: «29558B», «OrderNum»: 1553, «OrderLine»: 0, «LineType»: «PART», «PartNum»: «KYV100FBA», «LineDesc»: «», «Reference»:
…
Мои возвраты по-прежнему выглядят как «получает» и не обновляют базу данных.