作为一个 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 python3pip 也会同时安装,使用时记得加上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)相关影片资源迅雷下载推荐
微信小程序开发—带你快速上手
微信小程序是小程序的一种,英文名Wechat Mini Program,一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。微信小程序是一种不用下载就能使用的应用,也是一项 ...
小程序开发,微信小程序开发—带你快速上手
需要修改为:
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 处理后自动批改,返回一张批改后的图片。
就是如上图这样(令人捉急的正确率)。
处理的逻辑是:
具体代码在:
说了这么多,各位,来谈谈心体验一下吧!
企业网站建设与开发最低只要299元起,包含域名服务器,需要的联系QQ345424724,电话15516990022,18530226930相关影片资源迅雷下载推荐
网站建设的流程是什么?
网站对于任何一家公司来说都是必不可少的,那么该怎么去搭建网站呢?网站建设的基本流程又是什么呢?今天小编就给大伙安排上具体的流程:网站建设公司一、购买注册域名域名的选择可以分为国内和国外域名。但不管是国 ...
网站建设,网站建设的流程是什么?
标签: 公众号开发 Python 微信公众号开发从0开始避坑指南