太强了!基于公众号用 Python 开发一个抽奖程序
大家好
上周在公众号做了个抽象的活动,程序是自己临时写的,就是下面这种效果。回复指定关键字系统会自动给你分配一个抽奖号码
回复另一个关键字可以查看当前有没有中奖,功能可以说非常简单。
有些小伙伴拿到代码之后,问有没有详细的教程,光是看代码不知道怎么运行。
于是就有了这篇文章。
本文假设你已经有一个自己的公众号,还没有公众号的可以在平台注册一个,地址是:http://mp.weixin.qq.com 。
首先登录公众号平台,填写服务器配置
URL 不能乱填,这个是你的服务器地址, 比如:http://123.33.44.55/wx ,IP 地址是服务器的公网IP,所以前提你还得有一台服务器。
你可以选择国内的虚拟主机服务商,比如阿里云、腾讯云或者Ucloud(三位厂商记得给我广告费啊)都可以
填写完直接提交会验证失败的,因为服务器还没接入进来。
所以要先验证服务器地址的有效性。
验证服务器地址的有效性就是下面的处理逻辑,我这里是用的flask框架。
微信服务器请求URL的时候,会传4个参数给你,分别是
所谓验证服务器地址的有效性,就是要确认请求是否来自微信服务器,因为发起请求的也有可能是某个黑客。我们可以通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
将代码部署到自己服务器之后,这时候再去提交,会提示你提交成功。验证成功后,就可以开始实现业务逻辑了。
实现抽奖逻辑
当用户在公众号发送消息时,微信会以POST请求的方式将消息转发给业务服务器(就是我们自己处理业务逻辑的程序),然后我们根据用户发送的内容进行相应的逻辑处理。
微信会通过POST请求,以xml的格式发送给我们业务服务器,里面的内容包括发送的消息内容、时间、还有open_id, open_id 唯一对应用户。虽然你不知道用户的昵称,但是只要知道open_id 就可以唯一确定是哪个用户。
定义数据模型
实现抽奖系统,我们首先定义了数据模型
只要三个字段就够了,number 是抽奖号码,open_id 表示谁获得了该抽奖号码, 初始为空, valid 表示该号码是否为中奖号码。初始化系统时,我们会随机给一些数据设置valid有True, 比如你想抽3个奖品,就随机弄3条数据为True。
模型建立完成后,接下来就可以处理具体的业务逻辑了。当用户发送抽奖关键字时,我们要做3件事。
1、判断当前用户是否还有抽奖资格
2、生成抽奖号码
3、查询剩余抽奖次数
回复另一个关键字查询是否中奖时,我们只需要判断它的抽奖号码里面有没有匹配的valid为True的数据即可。我都这些逻辑都封装在models里面,所以看起来也没几行代码。
以上就是整个抽奖小程序的全部思路。剩下的事情就是把代码部署到服务器,就能实现文章开头的效果了。
是不是超级简单。源代码获取请回复“公众号”
如果你正想实现一个类似的小程序,例如做个天气预报查询等有趣味的程序,如果编程过程中总是遇到各种问题卡壳,可以加我微信 "yueryounali",好的问题胜过无数个好答案。我们的python交流群也有很多高手。
学编程关键在于动手,提高在于实践。
推荐: