diff --git a/docs/misc/sign/wbi.md b/docs/misc/sign/wbi.md index aa11a05..98df0c0 100644 --- a/docs/misc/sign/wbi.md +++ b/docs/misc/sign/wbi.md @@ -43,7 +43,7 @@ 72136226c6a73669787ee4fd02a74c27 ``` -3. 将欲签名的请求参数排序后编码 +3. 为参数中添加`wts`时间戳 若下方内容为欲签名的请求参数(以 js obj 为例) @@ -51,14 +51,29 @@ { foo: '114', bar: '514', - baz: 1919810 + zab: 1919810 } ``` - 那么按照 Key 排序并进行 url query 编码后的结果应为: + `wts`字段的值应为以秒为单位的 Unix TimeStamp,如`1684746387` + + 将`wts`参数添加在参数列表中,即: + + ```javascript + { + foo: '114', + bar: '514', + zab: 1919810, + wts: 1684746387 + } + ``` + +4. 将欲签名的请求参数排序后编码 + + 按照 Key 升序排序并进行 url query 编码后的结果应为: ``` - bar=514&baz=1919810&foo=114 + bar=514&foo=114&wts=1684746387&zab=1919810 ``` 请注意,如果参数值为中文或特殊字符,则进行 url query 编码后的字符串中参数值对应的字母必须是**大写字母** (部分库会编码为小写字母) @@ -78,34 +93,24 @@ bar=%E4%BA%94%E4%B8%80%E5%9B%9B&baz=1919810&foo=one%20one%20four ``` -4. 为参数中添加`wts`时间戳 - - `wts`字段的值应为以秒为单位的 Unix TimeStamp,如`1684746387` - - 将`wts`参数添加在参数列表最后,即: - - ``` - bar=514&baz=1919810&foo=114&wts=1684746387 - ``` - 5. 计算`w_rid`并添加在其后 在上一步得出的 url query 字符串后拼接第 2 步计算得出的`mixin_key`(作为盐) ``` - bar=514&baz=1919810&foo=114&wts=168474638772136226c6a73669787ee4fd02a74c27 + bar=514&foo=114&wts=1684746387&zab=191981072136226c6a73669787ee4fd02a74c27 ``` 对这个整体进行 **md5 Hash 运算**(32-bit 字符小写),得到的值便是 Wbi Sign,也就是参数`w_rid` ``` - d3cbd2a2316089117134038bf4caf442 + 90efcab09403023875b8516f07e9f9de ``` 最后一步,把这个计算出的值作为参数`w_rid`添加在原始参数列表后,也就完成了一次 Wbi Sign,可以调用 REST API 进行请求了 ``` - bar=514&baz=1919810&foo=114&wts=1684746387&w_rid=d3cbd2a2316089117134038bf4caf442 + bar=514&foo=114&wts=1684746387&zab=1919810&w_rid=90efcab09403023875b8516f07e9f9de ``` ## Wbi签名算法实现Demo