一,概述
为了让微信接口的调用更加安全,微信服务器要对支付接口和JS-SDK接口进行加密和校验。因此开发调取微信支付和JS-SKD接口,必须了解微信签名的规则。
确定参与签名的分段,例如ncencestr,timestamp等。
对所有待用签名参数遵循分段名的ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1 = value1&key2 = value2 ...)拼成字符串。这里需要注意的是所有参数名册小写字符。
接下来对拼接好的字符串作sha1加密,分区名和分段值都采用原始值,不进行URL转义。即signature = sha1(string1)。
通过上面的三步,就可以拿到签名的结果签名。
在node中,通过下面的算法,可以得到签名结果。
getSign (signParams ) {
varkeys = Object 。键(signParams );
键 = 键。排序();
varnewArgs = { } ;
键。forEach (函数 (val ) {
if (signParams [ val ] ) {
newArgs [ val ] = signParams [ val ] ;
}
} )
varstring = queryString 。stringify (newArgs );
返回 加密货币。createHash ('sha1' )。更新(的queryString 。UNESCAPE (串), 'utf-8' )。 摘要(“十六进制” );}
上诉算法可以将一个单独的集合按照签名规则计算出签名结果,参数为一个对象,对象中包含了所有分段,示例如下所示:
1{ 2 jsapi_ticket:jsapi_ticket ,3 timestamp:timestamp ,4 noncestr:nonceStr ,5url:“ http://www.eduwork.cn/phone” 6}
本章讲解了微信签名的目标和方法,了解了签名,我们便可以在后续的章节中调用JS-SDK和微信支付接口了。
网友评论