我正在尝试为第三方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
答案 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);