如何用JS编码

时间:2018-10-08 16:05:10

标签: javascript utf-8 encode

我正在尝试为第三方API生成一些签名,但出现以下错误:未授权合作伙伴。这意味着我没有对搜索词进行编码或创建签名。

签名是时间戳,访问密钥和查询词的编码哈希值。

以下是我的代码:

const timestamp = Date.now();
const searchTerm = encodeURI(this.state.searchText);
const signature = sha1(timestamp + searchTerm);

第三 为了确保网页安全,在将查询词呈现到页面之前,应对其进行JavaScript编码。这是一个例子: queryTermEncoded ='@ HttpUtility.JavaScriptStringEncode(queryTerm)';

如何从上面对时间戳和签名进行编码,似乎encodeURI无法正常工作并且我无法编码? 我需要某种方式来编码时间戳和searchTerm。

以下是一些用Java,Ruby等编写的示例。

http://www.infospace.com/partners/sdk/csr/signingSample.html

1 个答案:

答案 0 :(得分:0)

基于C#示例,我认为问题在于日期和encodeURI,请尝试以下操作:

// now UTC
var date = new Date(Date.now());
// add 30 seconds like the examples
date.setSeconds(date.getSeconds() + 30);
// format to "yyyyMMddHHmm"
const timestamp = date.toISOString().replace(/[^0-9]/g, '').substr(0, 12);

// dont need to encode
const searchTerm = this.state.searchText; 

// hash timestamp + token + searchTerm
const signature = sha1(timestamp + token + searchTerm);