前言

公众号后台使用Python Flask进行快速开发,核心代码不到100行。因此,开源这个应用的目的也只是为了将其作为一个微信公众号自动回复的HelloWorld项目,给感兴趣的同学提供一点参考。

微信API

微信API是微信公众平台为有开发能力的用户提供的工具和接口,开发的介绍可以参考微信的开发者文档。开发公众号后台需要一个公网的服务器,用户在对公众号进行关注、发送消息时,微信后台会将对应的事件和信息以结构化数据(XML)的方式发送到我们配置的公网服务器上,根据文档中定义的格式封装响应就可以事件自定义的自动回复了。

微信的API除了包括公众号后端的消息接口,还包括客户端的jsapi,后者我们暂时不会涉及到。

签名

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。理论上直接解析也可以,但实际上请求还带有请求数据的签名。一方面是防止上传数据被中间篡改,更重要的另一方面是验证消息来源的真实性,确保消息都是来自合法的微信的服务器。

在官网中给了一个PHP的示例,这里看下python的例子:

def verify_request(request):

signature = request.args.get('signature', '')

timestamp = request.args.get('timestamp', '')

nonce = request.args.get('nonce', '')

echostr = request.args.get('echostr', '')

data = [MP_TOKEN, timestamp, nonce]

data.sort()

calc_sig = hashlib.sha1(''.join(data).encode()).hexdigest()

if calc_sig == signature:

return echostr

else:

print('Invalid message: signature error!')

return None

其中MP_TOKEN就是公众号开发者后台的token。上面代码很简单,就是将token、时间戳和随机数组合进行SHA1哈希,并与请求的哈希进行比对。

自动回复

在开发者文档中接收普通消息一节介绍了微信服务器发送的用户发送消息所呈现的格式,示例XML请求数据如下:

1348831860

1234567890123456

使用Python自带的lxml等模块提取所需要的内容,进行处理,并构建对应的返回即可实现自动回复。响应同样是XML格式,示例响应如下:

12345678

上面的响应给发送消息的用户回复文本消息“你好”,对应其他类型的消息,如图片、语音、视频、图文消息等,可以参考文档中的被动回复用户消息部分。

The Code

在报价机器人公众号中,我将用户发送的消息通过API请求的方式到电子货币交易网站上查询对应的电子货币价格、涨幅、交易量信息,并以文本消息的方式返回给用户。这里值得一提的是,并不是每个用户请求我都会进行在线查询,而是设置一定的时间窗口,在此期间的用户请求直接返回缓存数据,这样可以减轻各方服务器的压力。

最终的完整代码见Gitee,运行前需要修改data/token.txt文件,内容是微信公众平台后台中自行定义的token。最终实现效果如下:

感兴趣的小伙伴也可以微信扫码体验:

后记

之前我测试用的公众号名为“报价机器人”,主要用来查询电子货币价格。本想新建一个账号用于更新文章,但由于微信要求一个身份只能注册一个订阅号,所以就只能将其占用了。因此把报价机器人的代码也公开,方便有需要的小伙伴自行搭建。

未来公众号会改个名字,并不定时更新一些关于网络安全的杂谈。而比较专业的技术文章视情况还是会放到博客上,毕竟手机还是不太适合作为严肃学习研究的工具。

python 报价机器人_100行代码实现报价机器人公众号后台相关推荐

  1. 微信公众号支付php demo,200行代码实现微信支付-公众号支付,不再踩坑,附:demo...

    开发微信支付需要认证服务号并且已经开通微信支付,获得微信支付商ID,设置apikey了的. 官方给了公众号支付的php源码SDK 但是这个SDK文件非常多,源码乱七八糟的,真的一开始接触的人拿着官方的 ...

  2. 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

    这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...

  3. python小游戏-16行代码实现3D撞球小游戏!-源码下载

    python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...

  4. Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

    Python爬虫利用18行代码爬取虎牙上百张小姐姐图片 下面开始上代码 需要用到的库 import request #页面请求 import time #用于时间延迟 import re #正则表达式 ...

  5. Wechaty Plugin|实现一个微信机器人几行代码即可

    写在前面 晚到几个月的帖子,这几个月有些忙,没顾上,关于为什么要开发微信机器人.技术选型.Token申请.一期简单的开发可以看我4个月之前发布的文章 Wechaty|NodeJS基于iPad协议手撸一 ...

  6. python实现微信hook_GitHub - gemgin/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  7. python实现微信hook_GitHub - redtips/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  8. python实现微信hook_GitHub - zhouxionger/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  9. python hook微信_GitHub - 15993248973/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

最新文章

  1. iOS9应用隐私控制-外部调用
  2. 前端vue框架的跨域处理方法
  3. 系统工具源码设计页面
  4. 天池 在线编程 最大子树(自底向上)
  5. HTMLCSSJavaScript个人入门自学笔记
  6. ARM CORTEX M0 程序镜像和启动逻辑
  7. Android自定义view之measure、layout、draw三大流程
  8. Daily Scrum 9.26
  9. dnf服务器不维修,dnf无法修理装备
  10. 五年技术工作的一点点感悟
  11. IFIX组态----安全与权限配置
  12. input/output is not in graph tf.layers.conv2d在name命名时会自动在其后添加Conv2D
  13. 菜鸟官网下载爱装apache
  14. myeclipse17创建Web、Maven项目
  15. python下载夏目友人帳
  16. 四舍五入VS银行家舍入
  17. 计算机毕业设计Java中医保健网站(源码+系统+mysql数据库+Lw文档)
  18. Hyperion与Tagetik的产品使用比较
  19. ctf流量分析练习一
  20. C#编程:元素法求解定积分/定积分定义求解定积分

热门文章

  1. html5 css3在线工具,HTML5/CSS3开发辅助工具(TopStyle)
  2. 微信公众号三方平台开发【代微信公众号接收消息事件并响应】
  3. 问题 F: 寻找预言家
  4. 湖州智慧社保显示服务器繁忙,湖州智慧社保
  5. 微信吸粉技巧:微信群怎么玩?
  6. 每日一例,练就编程高手
  7. 不会用苹果电脑(mac)的渣渣
  8. 生活随记-剪纸与父子
  9. 【转】怎样评价寒武纪的芯片1P 1M和MLU100?能够叫板英伟达吗?
  10. 浅谈软件可视化分析内存消耗综述中的识别方法