Python微信公众号开发—小白篇(一)

自媒体运营教程 251 0

本文面向想通过Python学习公众号开发的同学。一站式解决新手开发微信公众号遇到的所有问题。

github仓库地址https://github.com/injetlee/Python/tree/master/wechat

本篇文章首先实现与公众号的对接,实现简单的回复文字、图片内容。下一篇会对接腾讯的AI平台,实现对照片的人脸检测与分析,分析年龄、性别、表情、魅力值等。

准备工作

首先要注册一个公众号,这个很简单,我们到微信公众平台注册就可以了,选择个人订阅号就可以。但是如果可以认证的,我建议选择认证订阅号,因为未认证的号很多功能权限都没有。好了,话不多说进入正题。

1. 配置公众号

打开公众号,在 开发->基本配置 页面填写内容。

Python微信公众号开发—小白篇(一)-第1张图片-90博客网


下面说下需要填的内容,第一个URL要填的就是我们的服务地址,这个地址必须是外网地址并且是80端口。我们要本地开发时可以用 ngrok 解决。在ngrok.com官网下载。解压后就是一个exe程序。在当前目录下输入.\ngrok.exe http 80即可启动。启动后如下图所示,图片中网址就是我们需要的

Python微信公众号开发—小白篇(一)-第2张图片-90博客网

相关影片资源迅雷下载推荐

做软件开发怎么样,有前途吗?

哈喽,大家好,我是一个互联行业从业者,从业十几年现在在一个跨境电商公司做技术总监。这么多年来身边总有很多亲戚朋友问我做软件开发或者说程序员这个行业有前(钱)途吗?互联网公司的程序员是不是都上班996下班I ...

软件开发,做软件开发怎么样,有前途吗?


然后我们复制红色方框里面的地址到微信的URL输入框中,比如我的就输入http://c9b15df5.ngrok.io/connect 后面这个connect是我自己的服务的地址。就是我们在程序开发中自己命名的一个请求路径,如果是新手的话建议按照我的来。不要改动,避免程序跑不起来。

第二个Token,自己想一个就行了,随便填,你可以当他为一个密码。

第三个自己生成就可以了。

最后一个消息加解密方式选择明文模式。配置到这里就结束了,我们先不要关闭这个页面,等我们Python程序验证部分写好以后点击页面下面的提交就可以了。现在点会报错的。

2.接口验证部分代码编写

查看官方文档,当我们点击配置页面的提交按钮时,微信后台会向我们配置的地址发送signature、timestamp、nonce、echostr四个信息,我们拿到这部分信息后通过哈希加密算法计算出(timestamp,nonce,token)的哈希值与微信发送的signature对比,如果相等则说明是微信后台的请求,然后把echostr返回,就表示验证成功。

这一步,我们使用三个库,wechatpy-微信的Python SDK,falcon一个非常微小的Python Web框架,Waitress-一个Python WSGI服务器,当然在Linux上可以使用gunicorn代替waitress。通过pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安装。代码如下,只需要把配置界面的token替换到代码里
import falconfrom falcon import urifrom wechatpy.utils import check_signaturefrom wechatpy.exceptions import InvalidSignatureExceptionclass Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split('&') b = {} for i in query_list: b[i.split('=')[0]] = i.split('=')[1] try: check_signature(token='这里填写配置界面你输入的token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce']) resp.body = (b['echostr']) except InvalidSignatureException: pass resp.status = falcon.HTTP_200APP = falcon.API()connect = Connect()app.add_route('/connect', connect)

代码写好以后,我们在命令行输入 waitress-serve --port=80 connect:app在80端口启动我们的程序。启动后如下图,代表启动成功,这时候我们到微信的配置页面点击提交,会弹出提交成功消息框,代表我们成功接入微信

Python微信公众号开发—小白篇(一)-第3张图片-90博客网


简单说明以下上面代码,on_get函数接收微信发来的get请求,并且通过query_string拿到微信发送的参数,之后通过wechatpy的check_signature函数来校验。校验成功后把echostr返回给微信。

3. 发送文本信息给用户

接入成功后,就可以回复用户的信息了。我们增加一个函数处理用户发送的消息,整体代码如下:
import falconfrom wechatpy.utils import check_signaturefrom wechatpy.exceptions import InvalidSignatureExceptionfrom wechatpy import parse_messagefrom wechatpy.replies import TextReply, ImageReplyclass Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split('&') b = {} for i in query_list: b[i.split('=')[0]] = i.split('=')[1] try: check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce']) resp.body = (b['echostr']) except InvalidSignatureException: pass resp.status = falcon.HTTP_200 def on_post(self, req, resp): xml = req.stream.read() msg = parse_message(xml) if msg.type == 'text': reply = TextReply(content=msg.content, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200app = falcon.API()connect = Connect()app.add_route('/connect', connect)

我们导出了parse_message,TextReply,ImageReply函数。当拿到用户消息时,判断是文本消息,就原样返回给用户。现在我们启动脚本后,向公众号发送文本消息就会收到自动回复了。

4. 发送图片信息给用户

我们简单修改下on_post函数,使其不仅能处理文本,也能处理图片信息。完整代码如下:
import falconfrom wechatpy.utils import check_signaturefrom wechatpy.exceptions import InvalidSignatureExceptionfrom wechatpy import parse_messagefrom wechatpy.replies import TextReply, ImageReplyclass Connect(object): def on_get(self, req, resp): query_string = req.query_string query_list = query_string.split('&') b = {} for i in query_list: b[i.split('=')[0]] = i.split('=')[1] try: check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce']) resp.body = (b['echostr']) except InvalidSignatureException: pass resp.status = falcon.HTTP_200 def on_post(self, req, resp): xml = req.stream.read() msg = parse_message(xml) if msg.type == 'text': reply = TextReply(content=msg.content, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200 elif msg.type == 'image': reply = ImageReply(media_id=msg.media_id, message=msg) xml = reply.render() resp.body = (xml) resp.status = falcon.HTTP_200app = falcon.API()connect = Connect()app.add_route('/connect', connect)

我们在代码中加入了图片处理逻辑,如果是图片类型的消息,则把图片返回给用户。我们把图片发送给微信后台后,会自动生成一个media_id,我们发送这个media_id就可以了。

效果图

Python微信公众号开发—小白篇(一)-第4张图片-90博客网


总结

以上就是第一部分的内容,我们首先做了接口认证,之后通过一个on_post函数处理了用户发送的文本和图片信息,不过目前就是原样返回。

下一篇我们接入腾讯AI平台,对照片进行人脸分析检测之后再返回给用户,不要走开哦。

相关影片资源迅雷下载推荐

张小龙:微信公众号正开发独立App,没想过做信息流模式

微信公众号要做信息流推荐吗?张小龙予以否认,但确定的是,微信很快会推出独立的微信公众号App。1月15日,腾讯集团高级执行副总裁兼微信事业群总裁张小龙在微信公开课Pro版上表示,微信已经在开发公众号的独立App, ...

公众号开发,张小龙:微信公众号正开发独立App,没想过做信息流模式

企业网站建设与开发最低只要299元起,包含域名服务器,需要的联系QQ345424724,电话15516990022,18530226930

标签: 公众号开发 Python微信公众号开发—小白篇(一)

抱歉,评论功能暂时关闭!