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

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

公众号在开发的时候会要求你完成一个签名认证的功能,确保公众号对应的微信后台系统是你的服务器而不是一个路边摊.首先你要提供一个后台访问地址给微信端,这个在登录微信测试平台之后就能看到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地址.

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值