简介:
2015年大约1月多微信发布JS-SDK,功能强大,当然BUG也有不少
背景说明:
一:问题背景
笔者在做微信分享页面内容功能,即微信页面右上角的分享按钮时遇到错误,流程如下点击微信公众平台菜单某按钮,进入share分享的页面,右上角分享此share页面,报错:invalid signature
二:名词说明
controller :为WEB中控制器层,每一个controller用来响应一次请求,返回一个页面,主要用于页面跳转,例如struts,springmvc
三:invalid signature错误
没看过官方文档的请先看官方文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
在通过config接口注入权限验证配置步骤,生成签名需要的url属性错误,易导致invalid signature报错
解决方案一:
具体方法:
url填写的类型错误,如果url填写的是jsp的静态路径如:http://www.123.com/hhhh/share.jsp,需要把url修改为跳转到share.jsp页面的控制器controller路径。修改以后,一部分用户可解决此错误,如仍不能解决,请看下面方案是否适合你
解决方案二:
说明:
还有一部分用户url为controller路径仍会出错,请先确认你的分享页面跳转来源为微信公众平台的菜单,即点击微信公众平台菜单某按钮,就进入要分享的页面,此方案只适合满足该条件者。
分析流程:
点击微信公众平台菜单时,请求微信服务器,微信服务器回调controller路径,微信公众平台返回share.jsp页面到客户端并显示。
出错原因:
url值已经设置为controller的值,如http://www.123.com/hhhh/toshare
微信服务器在相应菜单点击事件时,在回调的路径上会加上一些参数如openid等,如此会把http://www.123.com/hhhh/toshare调整为另一个url,此url可以通俗理解为“已加工的url”,如此导致签名所需url和微信当前页面url不同,大家可以在share页面右上角点击复制链接,把连接粘贴出来查看,会发现其url确实和自己本地项目的controller路径不同。
解决方法:
在后台再建立一个中转的控制器controller方法C2,在微信回调请求的controller方法C1中,调C2方法,通过C2跳转至分享页面。说白了,就是多建立一个controller中转一次跳转请求。
此时C2的controller路径为“未加工的路径”,保证页面上签名的url值和此"未加工的路径"相同即可
作者:墨菲:
日期 :2015.1.16
微信号:twilight_2046
QQ :361918593