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

自媒体运营教程 产品运营 4

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

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

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

1. 微信公众号申请

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


2. 云服务器准备

2.1 云服务器选择

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

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

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

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

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


Python 微信公众号开发从0开始避坑指南-第1张图片-90博客网

欢迎加入云开发大军。


2.2 云服务器配置

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

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

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

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


Python 微信公众号开发从0开始避坑指南-第2张图片-90博客网

Python 微信公众号开发从0开始避坑指南-第3张图片-90博客网

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 ""

上述代码中的这一句:

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

微信小程序开发—带你快速上手

微信小程序是小程序的一种,英文名Wechat Mini Program,一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。微信小程序是一种不用下载就能使用的应用,也是一项 ...

小程序开发,微信小程序开发—带你快速上手

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 如何获取呢?不用获取。直接利用微信公众号接口调试工具来调试。


Python 微信公众号开发从0开始避坑指南-第4张图片-90博客网

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

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)的效果。


Python 微信公众号开发从0开始避坑指南-第5张图片-90博客网

这里的一个巨坑是关于临时图片素材的处理。这里的关键是上传图片后,获取 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 处理后自动批改,返回一张批改后的图片。

Python 微信公众号开发从0开始避坑指南-第6张图片-90博客网

Python 微信公众号开发从0开始避坑指南-第7张图片-90博客网

就是如上图这样(令人捉急的正确率)。

处理的逻辑是:


Python 微信公众号开发从0开始避坑指南-第8张图片-90博客网

具体代码在:

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


Python 微信公众号开发从0开始避坑指南-第9张图片-90博客网

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

网站建设的流程是什么?

网站对于任何一家公司来说都是必不可少的,那么该怎么去搭建网站呢?网站建设的基本流程又是什么呢?今天小编就给大伙安排上具体的流程:网站建设公司一、购买注册域名域名的选择可以分为国内和国外域名。但不管是国 ...

网站建设,网站建设的流程是什么?

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

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

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