佛山网站建站,佛山建站专家,手机免费制图软件,php网站建设素材web#xff1a;1、引入JS文件#xff1a;http://res.wx.qq.com/open/js/jweixin-1.4.0.js(支持https)http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)2、获取签名等参数wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来…web1、引入JS文件http://res.wx.qq.com/open/js/jweixin-1.4.0.js(支持https)http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)2、获取签名等参数wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出仅在pc端时才会打印。appId: , // 必填公众号的唯一标识timestamp: , // 必填生成签名的时间戳nonceStr: , // 必填生成签名的随机串signature: ,// 必填签名jsApiList: [] // 必填需要使用的JS接口列表});service:1、注册微信公众号然后获取对应的appId和AppSecret添加IP白名单和JS安全域名2、获取access_tokenhttps请求方式: GEThttps://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappidAPPIDsecretAPPSECRET返回参数:{access_token:ACCESS_TOKEN,expires_in:7200}7200秒access_token过期所以记得一定缓存你的access_token3、根据access_token获取jsapi_tickethttps://api.weixin.qq.com/cgi-bin/ticket/getticket?access_tokenACCESS_TOKENtypejsapi返回参数{errcode:0,errmsg:ok,ticket:bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA,expires_in:7200}同样7200秒jsapi_ticket过期所以记得一定缓存你的jsapi_ticketjsapi_ticket和access_token一定要是同时有效的不然会出错4、签名算法签名生成规则如下参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后使用URL键值对的格式(即key1value1key2value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密字段名和字段值都采用原始值不进行URL 转义。随机字符串.join(random.choice(string.ascii_letters string.digits)for _in range(15))时间戳:int(time.time())URL:当前网页的完整URL确保你获取用来签名的url是动态获取的如果是html的静态页面在前端通过ajax将url传到后台签名前端需要用js获取当前页面除去#hash部分的链接(可用location.href.split(#)[0]获取,而且需要encodeURIComponent)因为页面一旦分享微信客户端会在你的链接末尾加入其它参数如果不是动态获取当前链接将导致分享后的页面签名失败加上jsapi_ticket生成string1:ret {nonceStrWm3WZYTPz0wzccnWjsapi_ticketsM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qgtimestamp1414587457urlhttp://mp.weixin.qq.com?paramsvalue}对所有待签名参数按照字段名的ASCII 码从小到大排序:string .join([%s%s % (key.lower(), ret[key])for key in sorted(ret)])签名(Python需要编码一次):signature hashlib.sha1(string.encode(utf8)).hexdigest()这里就得到最终结果了可用微信提供的工具进行校验5、错误排查1.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。2.确认url是页面完整的url(请在当前页面alert(location.href.split(#)[0])确认)包括http(s)://部分以及后面的GET参数部分,但不包括#hash后面的部分。3.确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。4.确保一定缓存access_token和jsapi_ticket。5.确保你获取用来签名的url是动态获取的动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名前端需要用js获取当前页面除去#hash部分的链接(可用location.href.split(#)[0]获取,而且需要encodeURIComponent)因为页面一旦分享微信客户端会在你的链接末尾加入其它参数如果不是动态获取当前链接将导致分享后的页面签名失败。Tip大多数invalid signature是因为前段网页的URL和后端签名的URL不一样导致的按照上文第5点进行确认