Curl php post: PHP, cURL, and HTTP POST example?

Создать новую строку заказа GetNewOrderDtl CURL PHP — ERP 10

Дрю
(Дрю Фучетола)


1

Здравствуйте, EpiUsers,

Справочная информация:
Я разрабатывал небольшой веб-перехватчик для ввода заказов для моей компании. Конечная цель — перехватывать новые заказы и автоматически вводить их в Epicor по мере их поступления. Пока у меня есть:

  1. Аутентифицировано с помощью Shopify и Epicor
  2. Получены и отформатированы данные shopify
  3. Создан новый заголовок 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: Erp.Proxy.B2O.SalesOrderImpl — Pastebin.com

Мой новый вызов 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»:

Мои возвраты по-прежнему выглядят как «получает» и не обновляют базу данных.