我用的是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 hashlib

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

python token验证失败百分百解决_微信公众号token验证失败解决方案相关推荐

  1. python token验证失败百分百解决_微信token验证失败的解决方法

    一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...

  2. 公众号获取token失败_微信公众号token验证失败

    我用的是python3+,而官网给的例子是python2的写法.问题就在python版本不同. 下面是截取官方的实例代码的一部分 list =[token, timestamp, nonce] lis ...

  3. nodejs+express解决微信公众号token验证失败

    nodejs+express解决微信公众号token验证失败 问题描述 下面是服务端代码 问题原因 解决方案 重新运行服务器问题解决 结语 问题描述 这里是测试号的状态,如果是公众号的话上边应该显示t ...

  4. php 公众号 验证失败,微信公众号Token验证失败的几种情况及解决办法

    微信公众号Token验证失败的几种情况及解决办法 1. 思路看验证的文件,编码是否是:utf-8 无bom头的 2. thinkphp框架,要关闭调试模式,开启调试模式容易有错误代码出现,导致验证失败 ...

  5. php开发微信公众号token验证失败,Thinkphp5 微信公众号token验证不成功的原因

    微信是中国最流行的社交软件之一,随着微信生态系统的建立,很多人也致力于公众号 相关的文章">微信公众号和微信小程序的开发,那么Thinkphp5 微信公众号token验证不成功的原因及 ...

  6. php微信公众号测试号token配置失败,微信公众号Token配置失败解决办法

    前言 今天生病在家,由于我的微信公众号被投诉了,因此影视站接口被迫关闭,于是就想着给大家分享 APP,于是就用了下微信的自动回复, 想着能否把这个自动回复对接到 MIPCMS 上,于是就开干.但是微信 ...

  7. Java微信公众号配置验证Token

    Java微信公众号服务器配置-验证Token 一.填写服务器配置 首先我们需要在微信公众平台上填写服务器配置 重点内容 服务器地址URL(一定要外网能访问的到)         在我们提交配置的时候, ...

  8. 微信公众号TOKEN认证失败处理

    微信公众号TOKEN认证失败处理 公众号基本配置 点击修改配置 后端代码 公众号基本配置 点击修改配置 填写校验url.token.encodingAESKey,选择消息加解密方式,点击提交. 具体配 ...

  9. “errcode“:40164,“errmsg“:“invalid ip ...微信公众号开发调用失败的解决办法

    问题概述 关于这个问题,博主是在进行微信公众号平台开发的过程中遇到的, 微信公众号平台的前后端代码开发完成后,在联调接口调用: " https://api.weixin.qq.com/cgi ...

  10. python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

最新文章

  1. 芯片IP,SOC,FPGA智能卡
  2. 数据结构与算法之选择排序
  3. 跟我一起学Redis之Redis持久化必知必会
  4. ❤️一分钟学会MySQL数据库的使用❤️
  5. 最新小额借贷系统完整源码+附教程文档
  6. 中国移动短信中心服务中心号码一览表
  7. android generated java files,Android protobuf-javalite 实践
  8. macOS SwiftUI 进度指示器组件规范之 02 确定进度指标 Determinate Progress Indicators
  9. AH8652,AH8100,非隔离5V,供电替代阻容降压方案
  10. 学习笔记——VLSI测试方法学和可测性设计
  11. 计算机视觉应用之(四) -眼球跟踪
  12. 概率统计笔记:共轭分布
  13. 校招c语言笔试题数组,华为校园招聘考试C语言C笔试题
  14. perl 常用模块使用例子
  15. mac系统-安装虚拟无人机px4及其简单操作教程
  16. java 影院售票系统_java电影院售票系统
  17. 用Java调用中国网建提供的SMS短信平台接口实现向移动端发送短信
  18. 40 岁的中年失业人怎么活下去?
  19. 超声加工技术的研究现状及其发展趋势
  20. 流体力学深度学习建模技术研究进展

热门文章

  1. 自适应的设置字体的方式
  2. 服务器环境配置nginx / php / php-fpm(二)
  3. C++ 入门5 ---- 类和动态内存分配(一)
  4. 解决服务器上的水晶报表工具栏无法正常显示
  5. C#WINFORM控件之ComboBox
  6. spring源码-bean加载整体流程
  7. Redis支持的数据类型及其使用场景
  8. 当纺织遇上阿里云,数学博士钻进车间要让企业更高效
  9. CentOS 5.11下Oracle 11G R2 Dataguard搭建
  10. 数据结构1——堆栈和队列