签名算法
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。 示例:
• noncestr=Wm3WZYTPz0wzccnW
• jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
• timestamp=1414587457
• url=http://mp.weixin.qq.com
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com
步骤2. 对string1进行sha1签名,得到signature:
f4d90daf4b3bca3078ab155816175ba34c443a7b
注意事项
1. 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2. 签名用的url必须是调用JS接口页面的完整URL。
3. 出于安全考虑,开发者必须在服务器端实现签名的逻辑。
附录2-所有JS接口列表
• onMenuShareTimeline
• onMenuShareAppMessage
• onMenuShareQQ
• onMenuShareWeibo
• startRecord
• stopRecord
• onVoiceRecordEnd
• playVoice
• pauseVoice
• stopVoice
• onVoicePlayEnd
• uploadVoice
• downloadVoice
• chooseImage
• previewImage
• uploadImage
• downloadImage
• translateVoice
• getNetworkType
• openLocation
• getLocation
• hideOptionMenu
• showOptionMenu
• hideMenuItems
• showMenuItems
• hideAllNonBaseMenuItem
• showAllNonBaseMenuItem
• closeWindow
• scanQRCode
• chooseWXPay
• getLatestAddress
• editAddress
• openProductSpecificView
• addCard
• chooseCard
• openCard
附录3-所有按钮列表
基本类
• 举报: "menuItem:exposeArticle"
• 调整字体: "menuItem:setFont"
• 日间模式: "menuItem:dayMode"
• 夜间模式: "menuItem:nightMode"
• 刷新: "menuItem:refresh"
• 查看公众号(已添加): "menuItem:profile"
• 查看公众号(未添加): "menuItem:addContact"
传播类
• 发送给朋友: "menuItem:share:appMessage"
• 分享到朋友圈: "menuItem:share:timeline"
• 分享到QQ: "menuItem:share:qq"
• 分享到Weibo: "menuItem:share:weiboApp"
• 收藏: "menuItem:favorite"
• 分享到FB: "menuItem:share:facebook"
保护类
• 调试: "menuItem:jsDebug"
• 编辑标签: "menuItem:editTag"
• 删除: "menuItem:delete"
• 复制链接: "menuItem:copyUrl"
• 原网页: "menuItem:originPage"
• 阅读模式: "menuItem:readMode"
• 在QQ浏览器中打开: "menuItem:openWithQQBrowser"
• 在Safari中打开: "menuItem:openWithSafari"
• 邮件: "menuItem:share:email"
• 一些特殊公众号: "menuItem:share:brand"
附录4-位置与地址签名生成算法
addrSign的生成规则与JSSDK权限验证的签名生成规则相同(参考附录1),只是参与签名参数有所不同。参与addrSign的签名参数有:appId、url(当前网页url)、timestamp、noncestr、accesstoken(用户授权凭证,请参照oauth2.0 协议获取)。
附录5-支付扩展字段及签名生成算法
订单详情(package)扩展字符串定义
在商户调起JS API 时,商户需要此时确定该笔订单详情,并将该订单详情通过一定的方式进行组合放入package。JS API 调用后,微信将通过package 的内容生成预支付单。下 面将定义package 的所需字段列表以及签名方法。 接口需要注意:所有传入参数都是字符串类型!
本文已被整理到了《JavaScript微信开发技巧汇总》,欢迎大家学习阅读。