时间:2021-05-22
我用的是python3+,而官网给的例子是python2的写法。问题就在python版本不同。
下面是截取官方的实例代码的一部分
list = [token, timestamp, nonce]list.sort()sha1 = hashlib.sha1()map(sha1.update, list)hashcode = sha1.hexdigest()我就直接告诉你这一段错了。也是在我对比微信验证时发送的信息后才得出的结论。以下是在网上找到的加密原理,可以选择性看看。
当我们点击了提交后,微信服务器会向我们所填写的那个URL发起一个GET请求,并携带以下几个参数:timestamp, nonce, echostr, signature。
其中timestamp是一个时间戳,nonce是一个随机数,echostr也是随机数,这几个都很普通,重点在于signature,它的生成方式是将nonce、timestamp和token(也就是我们在网页中配置的TOKNE)三个字符串按照字典序排序后,对排序后得到的字符串数组使用哈希加密算法得到。
我们的服务器在收到这个GET请求后,提取对应的参数,并按照前面说的方式生成hashcode,如果这个值与参数中的signature相同,那么我们就将echostr返回给微信服务器,否则返回空值。
微信服务器收到这个echostr之后,验证这个值与它发送的echostr值是否相同,如果相同,说明这个值的确是由我们的服务器返回的,从而完成验证,今后所有的信息就都可以发送到这个服务器地址上。
这里面涉及到了一些安全认证的相关知识,有兴趣的朋友可以去查阅更详细的资料。总的来说,就是让通信的双方都能够确认对方的真实身份。
token验证失败的原因在于map函数。应该是python的2和3不一样吧。map函数第一个参数是一个函数,第二个参数是一个列表。作用是把第一个函数依次作用于列表中的每个元素。
这里我又学到了hashlib的一些东西。update是防止数据过大,所以可以用update依次添加要加密的数据。
所以综上可以看出,微信的加密就是现将list排序,然后依次将排序后的列表的每个元素用update合并成总的要加密的数据。贴一段代码帮助理解
import hashlibsha1 = hashlib.sha1() sha1.update('a'.encode('utf-8')) sha1.update('b'.encode('utf-8')) sha1.update('c'.encode('utf-8')) 等同于: sha1.update('abc'.encode('utf-8'))hashcode = sha1.hexdigest() #获取加密串所以在python3下,加密的算法要改成如下
list = [token, timestamp, nonce]list.sort()sha1 = hashlib.sha1()sha1.update(list[0].encode('utf-8'))sha1.update(list[1].encode('utf-8'))sha1.update(list[2].encode('utf-8'))hashcode = sha1.hexdigest()经过一通折腾,终于解决问题了。忍不住吐槽,python3都这么长时间了,为什么开发文档还不更新。而且还有好多程序都还是在python2下。唉,又是python一大诟病。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
怎么抄做微信商城?可以选袭择开发微信商城系统。【Mcmore微信商城系统】,打造功能强大的微信商城,将与公众号无缝接通,还可制定全面的微信电商解决方案,微信营销
很多朋友问怎么给微信公众推送图文添加链接的经验,今天给大家介绍一下原因和解决办法。1、其实微信官方也已经在公众号的下方给出了解决方案,可能朋友们没有去认真查看,
微信公众号有大部分都是失败的,真正获得成功的微信公众号其实只是很少的一部分。那么微信公众号的失败是什么原因导致的呢?今天淘发客小编为大家总结了微信公众号失败的原
要怎么写商品公众号运营计划方案?商品公众号运营计划方案內容。在做微信公众平台经营时,一般必须给微信公众号写商品公众号运营计划方案,仅有商品公众号运营计划方案写好
1月23日消息,据新浪美股报道,根据腾讯的声明,微信支付和BHVMarais致力于智能商店解决方案。 微信将利用公众号、小程序和朋友圈广告的渠道帮助盖上B