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

2023-10-21 01:40

本文主要是介绍太强了!基于公众号用 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交流群也有很多高手。

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

推荐:
“痛苦地去死”,Linus再次怒喷Intel再见,Navicat!这个Pycharm的兄弟真香!说多了都是泪,一个项目上线的真实过程…

这篇关于太强了!基于公众号用 Python 开发一个抽奖程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/251067

相关文章

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl