在Ebay中为订单创建发货时出错

时间:2020-05-08 19:52:03

标签: ruby ebay-api

此错误使我困扰了大约一个星期……我正在尝试在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时会出现500错误。这没有任何意义。

更新

根据评论中的建议,我尝试将params哈希更改为:

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 个答案:

答案 0 :(得分:1)

在请求内容中:

param (
    [string]$DatabaseServer = "COREP02P.centiv.com",
    [string]$SFTPPath = "/home/cdibrm02/",
    [string]$SFTPServer = "test-externalftp.prudential.com",
    [string]$SFTPCredential = "PrudentiaReport-SFTP-Test",
    [string]$JamsServerName = "jams01d.brandmuscle.local"
)

Import-Module JAMS

$localDataDirectory = "C:\temp\$(New-Guid)"
New-Item $localDataDirectory -itemType directory

$Prudential_EmailCampaignReport = "$localDataDirectory\Prudential_EmailCampaignReport.txt"
$Prudential_EmailCampaignReportFile = "$localDataDirectory\Prudential_EmailCampaignReportFile.txt"

# run reports
sqlcmd -S $Databaseserver -E -d "CentivPos" -Q "Exec [dbo].[Prudential_EmailCampaignReport]" -o $Prudential_EmailCampaignReport -W -s "," -h -1

(get-content $Prudential_EmailCampaignReport | select -Skip 1) | select-string -pattern "Warning" -notmatch |  select-string -pattern "affected" -notmatch  | select-string -pattern "--------" -notmatch  | set-content $Prudential_EmailCampaignReport

$Data = Get-Content $Prudential_EmailCampaignReport -Raw
$Cleanup = $Data.Replace("`n`r`n","").Replace("`n`n","").Replace("`r","")
$Cleanup = $Cleanup | Set-Content $Prudential_EmailCampaignReport -Force

#get filename
$filename = (Get-Content $Prudential_EmailCampaignReport -First 1).Substring(44, 45)

我突然发现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"} 出现了两次。

在irb中运行了一些示例之后,看来content-type库适用于字符串,而不适用于符号。通过在您的net/http定义中使用:,按键将被解释为符号。

引用Ruby documentation

哈希

使用@header{之间的键值对创建哈希:

}

键和值都可以是任何对象。

您可以使用以下语法使用符号键创建哈希:

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

相同的语法用于方法的关键字参数。

就像Symbol文字一样,您可以引用符号键。

{ a: 1, b: 2 }

等于

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

有关可用于哈希的方法,请参见Hash

要使用字符串键,请使用{ :"a 1" => 1, :"b 2" => 2 } 而不是=>

对您而言,这意味着更改:

:

进入:

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