从NetSuite客户端调用CanadaPost

时间:2016-06-28 19:06:25

标签: javascript netsuite suitescript

我正在尝试直接从NetSuite客户端调用Canada Post API以获取运费。

这是开发的测试代码:

<?xml version="1.0" encoding="UTF-8"?>
<messages xmlns="http://www.canadapost.ca/ws/messages">
<message>
<code>400</code>
<description>Backend Bad Request</description></message></messages>

说明非常清楚,XML格式似乎是正确的,但我一直得到相同的回复:

<?xml version="1.0" encoding="UTF-8"?>
<messages xmlns="http://www.canadapost.ca/ws/messages">
<message>
<code>415</code>
<description>Backend Unsupported Media Type</description></message></messages>

有任何线索吗?

参考: https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/rating/getrates/default.jsf

*编辑:我也尝试使用'Content-Type':'application / vnd.cpc.ship.rate-v3 + xml',我收到以下错误:

ng-if="moment.utc(x.DateTime).isSame(todaysDate, 'day')"

1 个答案:

答案 0 :(得分:3)

第一个问题是您的Content-Type标头错误。你实际上不能混合这样的内容类型。 CP网站表明它想要

Content-Type: "application/vnd.cpc.ship.rate-v3+xml" 

您的问题将是NS明确声明他们只会尊重某些内容类型值:

  

另请注意,如果您调用nlapiRequestURL,并使用内容类型传入标头,NetSuite会遵循以下类型:
  
  所有文本媒体类型(以“text /”开头的类型)
  “应用程序/ JSON”
  “应用程序/ vnd.maxmind.com国+ JSON”
  “应用程序/ xml” 的
  “应用程序/肥皂+ xml” 的
  “应用程序/ XHTML + xml” 的
  “应用程序/原子+ xml” 的
  否则,NetSuite将使用我们的默认类型覆盖内容类型,就像未指定类型一样。 NetSuite的默认类型是:
  
  “text / xml; charset = UTF-8”
  “application / x-www-form-urlencoded; charset = UTF-8”

我会做的是测试CP是否允许您使用Content-Type:“text / xml”或“application / xml”

如果不是,我会同时提交CP和NS的案例,希望CP允许更通用的类型,或NS允许特定类型。不要屏住呼吸。

我实际上为解决这类问题所做的是通过我控制的系统代理请求。编写一个可以接收请求的小应用程序非常容易;正确重置标头并转发请求。