社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

太强了!基于公众号用 Python 开发一个抽奖程序

Python之禅 • 4 年前 • 567 次点击  

大家好

上周在公众号做了个抽象的活动,程序是自己临时写的,就是下面这种效果。回复指定关键字系统会自动给你分配一个抽奖号码


回复另一个关键字可以查看当前有没有中奖,功能可以说非常简单。


有些小伙伴拿到代码之后,问有没有详细的教程,光是看代码不知道怎么运行。

于是就有了这篇文章。

本文假设你已经有一个自己的公众号,还没有公众号的可以在平台注册一个,地址是: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交流群也有很多高手。

学编程关键在于动手,提高在于实践。

推荐:
  1. “痛苦地去死”,Linus再次怒喷Intel

  2. 再见,Navicat!这个Pycharm的兄弟真香!

  3. 说多了都是泪,一个项目上线的真实过程…

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/71811
 
567 次点击