我用的是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合并成总的要加密的数据。贴一段代码帮助理解

importhashlib

sha1=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一大诟病。

不说了,折腾了一个这东西,饿死了。吃饭去了。

参考文章:

公众号获取token失败_微信公众号token验证失败相关推荐

  1. 公众号获取用户手机号_微信公众号模板消息软件怎么指定用户发送?

    使用公众平台模板消息功能,仅支持添加模板和更改所在行业,如果想要实现更多功能效果,可以通过微号帮平台的模板消息群发功能实现,也可以自己根据公众平台的开发接口编程实现功能,均能实现微信公众号模板消息指定 ...

  2. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...

  3. 分享公众号抽奖的作用_微信公众号抽奖活动怎么弄

    公众号线上抽奖相比于现场抽奖有很多好处,除了成本更低,宣传范围更广,能够吸引更多的参与,还有一大好处就是,线上抽奖比线下更容易挖掘潜在客户.抽奖活动可以手机客户的手机号,年龄,消费信息等.对流量转化和 ...

  4. python 公众号 关注者位置_微信公众号获取用户地理位置

    很久没搞微信的js-sdk了, 搞了一下午, 刷新页面老是失败, 没想到结合经验给大家展示下获取用户地理位置 第一步:登录微信公众号https://mp.weixin.qq.com 首先先设置最基本的 ...

  5. 不关注公众号可以获取openid吗_微信公众号粉丝迁移

    目录 [toc] 微信公众号迁移 正常的公众号迁移直接通过微信操作就可以,如下图.但是因为udb数据里面存的是迁移前公众号的openid以及unionid,需要自行获取新旧openid以及unioni ...

  6. jssdk信息验证失败_微信公众号开发——微信JSSDK使用

    微信JSSDK介绍 官方文档地址: 概述 | 微信开放文档​links.jianshu.com 因为微信公众号的开通对于大部分开发人员来说还是一个稍高的门槛,所以,微信搞了一个微信测试号,开发人员使用 ...

  7. 公众号h5获取手机号权限_微信公众号h5获取用户openId的方法和步骤

    微信h5静大享上.是发了概开程态间些告人屏果会区.默.非静默授权获取用户openId的方法和步骤微和二第说,班.都年很过过事发工开宗定据发指互数个遍前互就: 一.openId是什么? openId享. ...

  8. 公众号h5获取手机号权限_微信公众号开发之网页授权(获取用户信息)

    这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究. 昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇.实现本篇涉及的 功能,还需要完成一些基础. ...

  9. python 公众号爬虫_python_爬虫_微信公众号抓取

    importrequests,pymysqlimportjson,jsonpath,random,re,time,datetime,os,imghdrfrom lxml importetreefrom ...

最新文章

  1. 使用 Flash Builder 的 Apple iOS 开发过程
  2. php如何定时执行任务
  3. 从零开始实现一个简易的Java MVC框架(六)--加强AOP功能
  4. CentOS关机大法之shutdown应用实例
  5. html打印日志_SpringBoot 2.X Kotlin系列之AOP统一打印日志
  6. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear
  7. 前端:CSS/12/display属性,overflow属性,cursor光标类型,CSS定位,综合案例:今日闪价
  8. C++queue队列与stack栈
  9. oracle数据库中sql语句性能提升之to_char改造
  10. 网站项目建设流程概述
  11. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
  12. 宗成庆《统计自然语言处理》 目录的思维导图
  13. eclipse字体大小怎么设置
  14. ads s参数拟合_在ADS仿真或者查看S参数的方法
  15. Share:思科模拟器 路由配置(默认、静态、动态RIP)
  16. 软考-系统分析师知识大纲及分数
  17. 工业相机和镜头参数简析
  18. 《阿里铁军》的读书笔记和读后感范文2600字
  19. java 兑换码生成_java生成兑换码礼包码--工具类
  20. 用scrapy+selenium+Firefox爬取腾讯新闻

热门文章

  1. Request Respone
  2. html中如何使图片自动旋转90度,css实现图片旋转90度的方法
  3. SPSS 操作(一)数据选取 :个案选取和字符变量的筛选
  4. C++贪心实现汽车加油问题
  5. Java基础:Java代码加载顺序
  6. 博客搬家 - 记第四次搬家(hugo建站推送到谷歌云存储)
  7. 好玩的linux命令
  8. VS2019 打包生成报请插入“Microsoft Visual Studio 2010 Shell (Integrated) - CHS”
  9. 在vscode中调用dosbox来运行tasm汇编程序(tasks.json code runner)
  10. JAVA毕业设计高校多媒体设备运维管理系统服务端计算机源码+lw文档+系统+调试部署+数据库