javascript - 从 NetSuite 客户端调用 CanadaPost

标签 javascript netsuite suitescript

我正在尝试直接从 NetSuite 客户端调用加拿大邮政 API 以获取运费。

这是开发的测试代码:

var url = 'https://ct.soa-gw.canadapost.ca/rs/ship/price';
var auth = 'Basic BASE64ENCODEDUSERNAMEANDPASSWORD';
var xml = '' +
'<?xml version="1.0" encoding="utf-8"?>' +
'<mailing-scenario xmlns="http://www.canadapost.ca/ws/ship/rate-v3">' +
'<customer-number>1234567</customer-number>' +
'<parcel-characteristics><weight>1.0</weight></parcel-characteristics>' +
'<services><service-code>DOM.XP</service-code></services>' +
'<origin-postal-code>K2B8J6</origin-postal-code>' +
'<destination><domestic><postal-code>J0E1X0</postal-code></domestic></destination>' +
'</mailing-scenario>';

var header = {
    'Authorization': auth,
    'Content-Type': 'application/soap+xml;application/vnd.cpc.ship.rate-v3+xml',
    'Accept-language': 'en-CA',
    'Accept': 'application/vnd.cpc.ship.rate-v3+xml'
};

var r = nlapiRequestURL(url, xml, header, null, 'POST');

console.log(r.code[0]);
console.log(r.body);

说明很清楚,XML 格式似乎是正确的,但我一直得到相同的响应:

<?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>

有什么线索吗?

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

*编辑:我也尝试过使用 'Content-Type': 'application/vnd.cpc.ship.rate-v3+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>

最佳答案

第一个问题是您的 Content-Type header 错误。您实际上不能像那样混合内容类型。 CP网站表示要

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

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

Also note that if you call nlapiRequestURL, passing in the header with a content type, NetSuite respects the following types:

all text media types (types starting with "text/")
"application/json"
"application/vnd.maxmind.com-country+json"
"application/xml"
"application/soap+xml"
"application/xhtml+xml"
"application/atom+xml"
Otherwise, NetSuite will overwrite the content type with our default type as if the type had not been specified. NetSuite default types are:

"text/xml; charset=UTF-8"
"application/x-www-form-urlencoded; charset=UTF-8"

我要做的是测试 CP 是否能让您摆脱 Content-Type:“text/xml”或“application/xml”

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

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

关于javascript - 从 NetSuite 客户端调用 CanadaPost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38084348/

相关文章:

php - NetSuite - SuiteTalk - PHP - 安装

javascript - 如果存在 UI 错误,则禁止或提交记录 Netsuite Suitescript

javascript - jQuery Mobile Ajax 导航功能和 CSS 样式

javascript - 格式化无序列表,使其不像段落那样缩进

javascript - 仅部分 AJAX 响应出现延迟

javascript - 如何暂停JavaScript中的主循环处理,直到按下某个键?

javascript - 如何在 SuiteScript 2.0 版本中创建搜索

html - NetSuite Advanced PDF 模板是否支持绝对定位?

javascript - 有条件地在 freemarker 模板中显示行

Netsuite 安排保存的搜索和 HTTP POST?