15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > Python 微信公众号开发从0开始避坑指南

Python 微信公众号开发从0开始避坑指南

时间:2023-05-21 14:48:01 | 来源:网站运营

时间:2023-05-21 14:48:01 来源:网站运营

Python 微信公众号开发从0开始避坑指南: 作为一个 Python 爱好者,不把 Python 代码和微信结合起来玩一玩,只能说是自绝于时代。但自从腾讯对基于网页版微信的微信自动化狠下杀手后,我们就只能把眼光投向微信公众号了。

从实践上说,微信公众号的开发不过是一个应用层面的苦力活,但实际操作时,你会发现无数的深坑,尤其是那 print 后面还不带 () 的古董级开发文档,简直令人发指。

希望这篇文章能够帮助各位 hobbyist coder 节约宝贵的生命。

1. 微信公众号申请

这部分省略。大约15分钟,可以弄出一个无认证的个人订阅号。够了。




2. 云服务器准备

2.1 云服务器选择

你的云服务器需要具备两个条件:

(1)能跑 python,虚拟服务器一般就不行

(2)独立 IP, 也就是说要具备公网带宽

经过一番比较,考虑到最关键的一个因素—— 穷,最后我购买了阿里云的乞丐版。一年大概90多块钱。

云服务器的系统软件配置,如果你选择困难,建议操作系统选 CentOS,版本选 8。




欢迎加入云开发大军。




2.2 云服务器配置

服务器选择 SSH 加证书的连接方式。根据网站的教程,准备好软件:

(1)Putty 用于 SSH 远程链接你的云服务器

(2)FileZilla 用于与你的云服务器下载上传文件,相信我,这是最方便的选择

配置好你的服务器,15分钟后,服务器链接成功。







2.3 下载 Python3

非常简单:

sudo dnf install python3 pip 也会同时安装,使用时记得加上3,像 python3,pip3 install 这样。

几个基本的库,web.py lxml python requests pillow等等,也要记得装好,公众号开发文档中有提到。




3. 连接微信公众号与云服务器

3.0 文件传输确认

在编辑文件前,首先确认你的 FileZilla 的 SSH 文件传送是否OK,进入站点管理器做好设置。

当然,如果你觉得直接在远程连接的客户端上直接使用 Vim 编辑代码毫无压力可以忽略这一步。




3.1 云服务器上搭建简易网站应用

[root@xxxxxxxxx~]# python3 main.py 80从开发文档中开始抄代码 main.py ,上传至云服务器。在 Putty 中输入上面的命令。其中的 “80” 指的是端口 80。执行命令后,根据文档指引,在浏览器打开你的网址,可以看到:

hello, this is handle view确认你的网站应用搭建成功。




3.2 通过 Token 验证云服务器

仔细的阅读开发文档,稍微修改 main.py,记得删除 main.py 中的 Handle 类(这是一个小坑)。

然后创建、编辑 handle.py 这时你会迎来第一个巨坑。

list = [token, timestamp, nonce] list.sort() sha1 = hashlib.sha1() map(sha1.update, list) # <-- 巨坑1号 hashcode = sha1.hexdigest() print "handle/GET func: hashcode, signature: ", hashcode, signature if hashcode == signature: return echostr else: return ""上述代码中的这一句:

map(sha1.update, list)需要修改为:

sha1.update(list[0].encode('utf-8')) sha1.update(list[1].encode('utf-8')) sha1.update(list[2].encode('utf-8'))运行:

[root@xxxxxxxxx~]# python3 main.py 80在公众号的配置页面点“提交”,然后点击“启动”。




这里值得注意的是,此处的 Token 和后面要用到的 Access Token 不是一回事。新手不要搞混了。这里的 Token 只是用于验证你的开发(云)服务器。




4. 代码开发的几个心得

4.1 注意各种 python2 与 python3 的区别

一个一个错误的修正,保持耐心、好奇和搜索的畅通




4.2 确保 IP 白名单

在实际的调试中,必须要确保你的 IP 在白名单中。这里的 IP 包括你自己本地 IP —— 如果你移动着,那么这个 IP 可能有很多个,还包括你的云服务器 IP。虽然这是废话,但是也会成为一个坑。

IP 如何获取呢?不用获取。直接利用微信公众号接口调试工具来调试。

如果不在白名单里,它会提示你 :

IP (xxx.xxx.xxx.xxx) is not in the whitelist这时把它提醒你的 IP 添加至白名单即可。




4.3 确保云服务器上程序的后台运行

每次通过以下的命令:

[root@xxxxxxxxx~]# python3 main.py 80启动你心爱的程序后,一旦 Putty 关闭,远程连接断开后,程序就会自动停止。你说这不是坑爹吗?如果本地一直要开着窗口,那还叫什么价值一百元的云计算?

所以在你确定程序已经能够顺利运行时,你需要这样一个处理:

[root@xxxxxxxxx~]# nohup python3 main.py 80 &运行后,可以看到:

appending output to nohup.out表示你的程序已经成功运行在云服务器的后台。如果日后你需要停止程序则需要使用:

ps -aux来查找到 python3 main.py 80 的 PID ,然后使用 kill PID 来删除。关于 Linux 这一块的操作,可以参考这篇文章来学习。




5. 处理消息

5.0 未认证订阅号可以处理临时(即临时上传)素材吗?

答案是可以,这也几乎是未认证订阅号的处理极限了。除此以外,群发消息,自定义菜单,素材库调用都不行。




5.1 图片消息处理

终于迎来了具体的开发。文本的处理非常简单,基本上照着开发文档码字就可以了。配合网上一些免费的 API 可以实现一些有(wu)趣(liao)的效果。







这里的一个巨坑是关于临时图片素材的处理。这里的关键是上传图片后,获取 Media_Id。这个上传操作需要通过

request.post 来实现。具体的操作可以参考以下过程

def get_id(img): #img is bytes-data _token = gt.get_token() _url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' + _token + '&type=image' #print('url=', _url) payload = { 'file':('upload.jpg', img, 'image/jpg') } m = MultipartEncoder(payload) headers = { 'Content-Type':m.content_type, 'other-keys':'other-values' } _id = requests.post(_url, headers=headers, data=m).json() print('post request returns:', _id) _id = _id['media_id'] #print(_id) return _id最后让我们来一个综合应用。

【需求】用户发送一张图片给公众号,例如拍摄的一页数学作业,后台通过 OCR 处理后自动批改,返回一张批改后的图片。
就是如上图这样(令人捉急的正确率)。

处理的逻辑是:

具体代码在:

说了这么多,各位,来谈谈心体验一下吧!








关键词:指南,公众

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭