我正在为一个客户建立一个运输成本最小化。我有一个来自不同供应商(美国邮政,UPS)的运输选项列表,除了UPS SurePost,我都有工作。客户确实为帐户设置了SurePost。有一个线程here,有人把XML示例。我也有补充文档。
有没有人成功地以JSON格式为SurePost Get Rates获取API调用?我尝试了更改工作UPS Ground调用(如下所示)并以JSON格式复制补充文档中的示例XML调用。两者都不起作用,事实上,我从UPS得到的响应甚至不是一些XML样式的错误消息,而是乱码(如下所示)。
请参阅我的示例API数据包。请注意,当Service '03' 'Ground'未注解时,这是一个经过验证的工作API调用。当我将其更改为'93'(适用于SurePost 1 lb或更大)和描述'Parcel Select'(来自补充文档)时,我得到一个响应代码400和一个乱码。
let data = JSON.stringify({
"RateRequest":{
"Request":{
"SubVersion":"1703",
"TransactionReference":{
"CustomerContext":" "
}
},
"Shipment":{
"ShipmentRatingOptions":{
"UserLevelDiscountIndicator":"TRUE"
},
"Shipper":{
"Name":"Billy Blanks",
"ShipperNumber":" ",
"Address":{
"AddressLine":"366 Robin LN SE",
"City":"Marietta",
"StateProvinceCode":"GA",
"PostalCode":"30067",
"CountryCode":"US"
}
},
"ShipTo":{
"Name":"Sarita Lynn",
"Address":{
"AddressLine":"355 West San Fernando Street",
"City":"San Jose",
"StateProvinceCode":"CA",
"PostalCode":"95113",
"CountryCode":"US"
}
},
"ShipFrom":{
"Name":"Billy Blanks",
"Address":{
"AddressLine":"366 Robin LN SE",
"City":"Marietta",
"StateProvinceCode":"GA",
"PostalCode":"30067",
"CountryCode":"US"
}
},
"Service":{
// Uncomment the desired service
//"Code" : "03",
//"Description" : "Ground"
"Code":"93",
"Description" : "Parcel Select"
},
"Package":{
"PackagingType":{
"Code":"02",
"Description":"Package"
},
"Dimensions":{
"UnitOfMeasurement":{
"Code":"IN"
},
"Length":"7",
"Width":"7",
"Height":"6"
},
"PackageWeight":{
"UnitOfMeasurement":{
"Code":"LBS"
},
"Weight":"7"
}
}
}
}
});
let headers = {
'AccessLicenseNumber' : 'MYLICENSENUM',
'Password' : 'MYPASSWORD',
'Content-Type' : 'application/json',
'Content-Length' : data.length,
'transID' : 'Trans' + Date.now().toString(),
'transactionSrc' : 'node',
'Username' : 'MYUSERNAME',
'Accept' : '*/*'
};
let options = {
'hostname' : 'wwwcie.ups.com',
'path' : '/ship/v1/rating/Rate',
'method' : 'POST',
'headers' : headers
};
字符串
请求作为这些options
的节点https.request
发送。
对于一个SurePost调用,响应代码是400,消息是乱码,正如我所说的。请看这张图片,其中包括一个toString('hex')
显式写入返回的字节值,以及一个普通的toSting()
尝试人类可读的打印。
的数据
有没有人对此错误有任何输入,什么可能是畸形的?所有的补充文档说,需要的是服务代码93(或92为小于1磅)。所以,由于这适用于服务代码03 UPS地面,我希望这工作,至少足够好,给予我一个有效的错误信息,解释任何其他需要。
2条答案
按热度按时间lkaoscv71#
我能够让它工作。首先,我从不相关的问题here中发现有一个/json/路由,所以我猜(正确地)我可以使用/json/Rate。此外,为了参与SurePost,我不能使用示例示例中的假Shipper数据,因为帐户必须设置SurePost。完整(消毒)解决方案如下:
字符串
编辑:作为最后一个'gotcha',当做SurePost小于1磅(代码'92'),一定要使用“代码”:“OZS”为'PackageWeight'.'UnitOfMeasurement'.请注意,'OZ'将 * 不 * 工作和错误消息不 * 指示您使用'OGS'.对我来说,当使用'LBS'它只是说测量单位是错误的,当使用'OZ'它说只使用'LBS'或'KGS'!文档和错误消息,留下了很多需要.
gpnt7bae2#
请求的这一部分确实有效。如果你得到“.一个计量单位”的错误,这是92/93服务代码。92为OZS和.1 - 15.99盎司。93为1磅及以上。
字符串