微便捷实现(二):公众号签名认证

时间:2024-05-22 19:20:37

上一篇就已经算是基本完成了微信开发的一个前期准备,然后现在的话才算是正式进入微信公众号的开发.

公众号在开发的时候会要求你完成一个签名认证的功能,确保公众号对应的微信后台系统是你的服务器而不是一个路边摊.首先你要提供一个后台访问地址给微信端,这个在登录微信测试平台之后就能看到URL的地址,这个就是你的服务器地址,微信端的这个URL地址默认好像是支持80端口和443端口的,但是我在上一篇文章中也讲了,我设置成8080端口的时候好像也能成功访问.目前这个原因不明,暂且不谈.除了URL我们还需要提供一个自己约定好的token字符串,这个token是用来验证你的微信服务器的,跟上文中提出的NATAPP的token不一样,这个是用来验证你的微信后台的

微便捷实现(二):公众号签名认证

 引用图片再结合文字理解一下.

但是需要注意,这个时候你点击配置按钮是失败的,因为需要完成一个验证功能,当你点击配置的时候,测试平台会根据你提供的URL,发起一个请求到你的后台,这个时候你就需要注意,在后台对参数进行认证,然后根据验证结果返回echostr(这个操作是微信端对你的要求,你不进行验证直接返回echostr,也可以完成配置,但是这样就没有安全性可言,相当于你闯了一个没有摄像头监控的红路灯,不扣分不扣钱但是下次闯的灯就不知道扣不扣了.),这个配置验证的请求的参数有:

signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数;

timestamp:时间戳,nonce:随机数,echostr:随即字符串,这个验证功能真正要做得就是将处理后的数据和signature进行比对,相同则返回echostr,反之可以返回null(代表失败);

其中在验证的时候需要注意,signature的数值是根据timestamp,nonce和协定好的token进行一个字典排列之后进行sha1加密得出的一个数值,这个数值和signature比对成功后就可以返回echostr表示认证通过.

需要注意的地方是字典排序和sha1加密还有原样返回echostr还有token要自己手动加入,是这个验证需要注意的地方.

具体的实现你可以创建一个方法来进行比对操作,将token,timestamp,nonce加入到一个list中然后调用排序方法完成字典排序,排序之后将三个元素进行组合,然后进行sha1加密,紧接着就是比对,返回boolean.

在controller层则是直接调用这个方法根据返回结果来决定是否返回echostr.这样就可以在测试平台进行配置了,点击配置之后一般都会显示成功.

微便捷实现(二):公众号签名认证

以上就是一个接入权限认证的功能,可能有一部分朋友会说怎么这次没有截图,其实是因为我觉得这种东西自己去摸索过,记忆会更深刻一点,把这个当成我的一个需求文档,而你负责去实现我提出的功能当然这个文档有点太详细了.

PS:sha1加密的实现,可以自己去百度,百度上都有代码直接复制使用即可.还有可能会有朋友需要理解一下字典排序,字典排序在集合的工具类中是有提供方法的:Collections.sort(strings);还有每次启动NATAPP的时候穿透地址是会改变的,所以每次关闭之后重新打开自己的测试平台,需要去修改URL地址.

后续的实现有时间会慢慢补上.