Ошибка при создании отгрузки для заказа на Ebay - PullRequest
0 голосов
/ 08 мая 2020

Эта ошибка мучает меня вот уже около недели ... Я пытаюсь создать отгрузку на Ebay, но в ответе появляется код ошибки 500. Вот ссылка на документацию https://developer.ebay.com/api-docs/sell/fulfillment/resources/order/shipping_fulfillment/methods/createShippingFulfillment

Я запускаю этот код в производственной среде:

  @header = {
    'Content-Type': 'application/json',
    'Authorization': "Bearer #{@token}"
  }

  uri = URI.parse("https://api.ebay.com/sell/fulfillment/v1/order/#{order.order_number}/shipping_fulfillment")

  # Create the HTTP objects
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  items = []
  order.items.each do |i|
    items << {"lineItemId": i[:id]}
  end
  params = {
    "lineItems": items,
    "shippedDate": Time.parse(date).strftime("%Y-%m-%dT%H:%M:%S.000Z"),
    "shippingCarrierCode": "USPS",
    "trackingNumber": tracking_number
  }

  request = Net::HTTP::Post.new(uri.request_uri, @header)


  request.body = params.to_json
  response = http.request(request)
  puts response.code #prints 500

Моя ошибка:

{"errors": [{
"errorId": 2003,
"domain": "ACCESS",
"category": "APPLICATION",
"message": "Internal error",
"longMessage": "There was a problem with an eBay internal system or process. Contact eBay developer support for assistance",
"parameters": [{
    "name": "reason",
    "value": "Failed to transform underlying error response, see logs."
}]
}]}

Я заплатил за премиальную поддержку разработчика, но до сих пор не получил ответа. Любая помощь будет принята с благодарностью. Я пробовал отправить тот же запрос с пустым телом, но это не меняет ответа. Я также пробовал изменить заголовки. Если я добавлю 'Accept': 'application/json', то получу ошибку 500 с пустым телом. В этом нет никакого смысла.

ОБНОВЛЕНИЕ

Из предложений в комментариях я попытался изменить параметры ha sh на:

params = {
    "lineItems": "[{\"lineItemId\":10025031700524,\"quantity\":1}]",
    "shippedDate": "2020-05-01T08:05:00.000Z",
    "shippingCarrierCode": "USPS",
    "trackingNumber": "9400111899562795104724"
  }

У меня также есть пробовал выполнять последующие запросы. Я также попытался отправить в теле следующее JSON:

request.body = {
    "lineItems": [
      {
        "lineItemId": "10025031700524",
        "quantity": "1"
      }
    ],
    "shippedDate": "2020-05-01T08:05:00.000Z",
    "shippingCarrierCode": "USPS",
    "trackingNumber": "9400111899562795104724"
  }.to_json

Каждая из этих попыток приводит к той же ошибке, что и раньше. Я также пробовал изменить количество на целое число и строку.

ОБНОВЛЕНИЕ 2

Вот содержание моего запроса:

POST /sell/fulfillment/v1/order/24-04954-08727/shipping_fulfillment
content-type: application/json
authorization: Bearer v#i^1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
user-agent: Ruby
connection: close
host: api.ebay.com
content-length: 159
content-type: application/x-www-form-urlencoded
{"lineItems":[{"lineItemId":"10025031700524"}],"shippedDate":"2020-05- 01T08:05:00.000Z","shippingCarrierCode":"USPS","trackingNumber":"9400111899562795104724"}

1 Ответ

1 голос
/ 19 мая 2020

В содержимом запроса:

POST /sell/fulfillment/v1/order/24-04954-08727/shipping_fulfillment
content-type: application/json
authorization: Bearer v#i^1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
user-agent: Ruby
connection: close
host: api.ebay.com
content-length: 159
content-type: application/x-www-form-urlencoded
{"lineItems":[{"lineItemId":"10025031700524"}],"shippedDate":"2020-05- 01T08:05:00.000Z","shippingCarrierCode":"USPS","trackingNumber":"9400111899562795104724"}

Мне пришло в голову, что content-type присутствует дважды.

После запуска некоторых образцов в irb кажется, что библиотека net/http работает со строками, а не с символами. При наличии : в вашем определении @header ключи интерпретируются как символы.

Процитируем Ruby документацию :

Хэши

ha sh создается с использованием пар ключ-значение от { до }:

{ "a" => 1, "b" => 2 }

И ключ, и значение могут быть любым объектом.

Вы можете создать ha sh, используя символьные ключи со следующим синтаксисом:

{ a: 1, b: 2 }

Этот же синтаксис используется для аргументов ключевого слова для метода.

Like Symbol литералы, вы можете заключать в кавычки символьные ключи.

{ "a 1": 1, "b #{1 + 1}": 2 }

равно

{ :"a 1" => 1, :"b 2" => 2 }

См. Ha sh о методах, которые вы можете использовать с ha sh.

Чтобы использовать строковые ключи, используйте => вместо :.

Для вас это означает изменение:

@header = {
  'Content-Type': 'application/json',
  'Authorization': "Bearer #{@token}"
}

В:

@header = {
  'Content-Type' => 'application/json',
  'Authorization' => "Bearer #{@token}"
}
...