公众号网页授权问题 - FannieFannie/wechatweb GitHub Wiki
##今天编码出现了签名授权一直不成功的情况
1. 在校对了所有的步骤后,发现前端并没有什么问题,最后发现是后台的问题。
后台获得签名的步骤是,通过微信提供的接口获得access_token,再获得jsapi后,缓存这两个值得到最后的签名signature。以下分别为需要调用的接口:
- 获取access_token:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
- 获取jsticket:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
- 利用jsticket生成signature: signature=sha1(sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3- SlHhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value)
2. 问题最后就出在获取jsticket这一步上。
-
获取jsticket需要两个参数,一个是access_token,一个是type。type有两种:jsapi(调用微信内网页调用微信原生功能的JS-SDK接口须使用的签名票据)和wx_card(调用微信卡券接口时签名的临时票据)。
-
后端开发选择了获取wx_card类型来获取前端用于调用微信JS接口的临时票据,导致计算出错误的签名(signature)。在前端注入权限验证配置时总是验证失败,错误信息是invalid signature。
-
但是不知道为什么能成功调用地理位置接口wx.getLocation()得到经纬度。经过对比,jsapi注入权限验证的签名无效,不影响在有权限的域名下调用成功。 #结尾 如果有机会的话还是要前后台都要做,这样才能更快地找到问题。后台开发不看错误日志,也不暴露错误信息,美其名曰,错误信息应该封装好给前端。前端真的是哑巴吃黄连,有苦说不出。