作者 |   月小水长

本文经授权转载自月小水长(ID:inspureri)

创作灵感

昨天在朋友圈看到这样一则分享:

好奇心驱使着我扫了图中的二维码(已打码),发现是引导关注公众号的,我一点关注后,会话界面就出来了这个 预测 2020 会发生在被扫码者身上的几件事 的小游戏的链接:

我继续点击这个链接,然后就生成了属于我自己的预测图:

然后我又可以分享出去,让我的朋友圈好友去扫,他们又分享,这样一传十、一传百,不知不觉又被隔了一波韭菜:

创作笔法

微信公众号的两种开发模式

你可能会有一个疑惑?我为什么要用小号做测试呢?其实微信公众号开发分两种模式:

编辑模式:主要针对非编程人员及信息发布类公众帐号使用。开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。

开发模式:主要针对具备开发能力的人使用。开启该模式后,能够使用微信公众平台开放的接口,通过编程方式实现自定义菜单的创建、用户消息的接收/处理/响应。这种模式更加灵活,建议有开发能力的公司或个人都采用该模式。

简单来说,就是不用写代码直接在微信公众号网页上配置自定义菜单或者自动回复,这叫编辑模式;需要写代码实现自动回复或者更高级的逻辑,这叫开发模式;并且这两种模式是互斥的,就是说,一旦开启了开发模式,编辑模式就失效了,之前配置的自定义菜单和自动回复全部失效,这对我现在这个公众号是不可接受的,因为在编辑模式里配置太多了,迁移到开发者模式一来多耗了时间成本,二来还不稳定,所以我想起了我尘封已久的小号。

创作原料

在正式开发前,你需要有以下“纸”或者“笔”:

  1. 一台服务器(最好 location 华中华南华北华东华西)

  2. 一个最好备案好的域名

服务器接入微信公众号

然后呢,其实在微信公众号开发过程中,微信公众号后台就像是一台代理服务器,微信公众号消息先由微信公众号后台处理,再转发给我们自己的服务器处理,这过程就必须要遵循微信公众号的开发规范了;那么,怎么让微信公众号和我们自己的服务器对接呢?接入微信公众平台开发,开发者需要按照如下步骤完成:

填写服务器配置:填写 URL(只支持 80(http) 和 443(https) 端口,开发者文档说是服务器域名,准确来说不是你的服务器域名,而是你服务器上处理微信公众号转发消息的根路由)、Token(可随便填) 和 EncodingAESKey(可自动生成),这两个参数只在接入时可能有用,是为了安全性起见而采用 sha1 加密的几个参数之二,无需过多关心,这一步主要是注意 URL 的正确性。

验证服务器地址的有效性:点一下验证按钮即可,网页上会出现 Token 验证成功或者失败的提示。

依据接口文档实现业务逻辑:这个就是我们大展身手写代码的部分了。

应用逻辑

有个坑需要填一下,个人微信公众号不能够获取用户的基本信息:昵称和头像等等

需要认证才能获得这个权限,但是认证需要 take money,但是我满脸都写着穷

回到我们的创作初衷,涉及个性化预测海报,个性化部分我就简单处理,直接随机字符串,如果深挖的话需要个性化推荐,但是没有用户信息,难道要写几个逻辑让用户自己输兴趣爱好并返回?这已经脱离本次创作的初衷了,下次补上。

至于制作海报,我用的的 PIL 库中的 ImageDraw 对象,直接在预设的海报上填充字符串即可。

PIL 库的安装姿势是 pip install pillow 而不是 pip install PIL

然后应用服务器采用的是 Flask 框架(Flask 是应用框架,nginx 是 web 服务器,他们都属于软件,Flask 自带的生产环境服务器不足以支持实际应用,需要 uwsgi 应用服务器,nginx 直接处理静态资源请求,逻辑请求转发给 uwsgi ;阿里云服务器是虚拟化的 PC,包括软件和硬件;有关服务器具体知识可以参考我之前发过的一篇文章:扫码考勤小程序正式上线)

回到主题,假设我们的根路由是

https://doamin/wechat/

我们可以给这个路由绑定一个视图函数,my_view(),并同时开启处理 post 请求开关(默认只处理 get),我们所有的逻辑都可以由这一个视图函数实现,接入公众号开发时 Token 验证公众号是通过 get 方式请求到我们的服务器的,验证通过后的转发消息都是通过 post 方式,那么,我们就可以通过请求方式区分是验证还是转发了。

if request.method == 'GET':    signature = request.args['signature']    timestamp = request.args['timestamp']    echostr = request.args['echostr']    nonce = request.args['nonce']    token = '好想爱这个世界'    tempList = [token, timestamp, nonce]    # 字典序排序    tempList.sort()    # 转成字符串    tempStr = ''.join(tempList)    # sha1 加密    tempStr = hashlib.sha1(tempStr.encode('utf-8')).hexdigest()    if tempStr == signature:    print('token verify succes')        return echostr    else:    #可以发现,前面的验证代码其实无关紧要,只要返回了 echostr ,就算验证成功        return echostrelif request.method == 'POST':    print('在这里写业务逻辑')

我们还需要在自己的服务器上调用微信的接口,比如海报制作完成后,通过微信转发给用户,不能直接返回图片的二进制数据,事实上这是微信公众号做的,我们需要上传该海报至微信公众号素材库,获得这个海报的 id,然后封装成 xml 数据返回给微信公众号(吐槽一下还没有升级到 json 交换数据),这样用户就收到我们的海报了。

那么问题来了,上传该海报至微信公众号素材库,在公众号文章编辑界面呆久了,我还以为要手动上传,还好找到了接口 1,我们可以在服务器上调用这个接口 1,为了防止滥用这个接口 1, 必须提供 access_token , 但是 access_token 哪里来呢?需要通过调用另一个接口 2,接口 2 需要提供 AppId 和 AppSecret 参数,如果不自己修改,这两个是长期有效的,可以直接获取。

接口 1:POST https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

接口 2:GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

还有一个坑就是,这个 access_token 有效期只有 2 个小时,所以我们需要不断更新它,所以需要给我们的 Flask 引入循环任务配置

# 定时任务配置class Config(object):  # 创建配置    # 任务列表    JOBS = [        {            'id': '1',            'func': '__main__:refreshToken',  # 定时执行的方法名            'trigger': 'interval',  # interval表示循环任务            'hours': 2, # 每两个小时的执行一次        }    ]app.config.from_object(Config())  # 为实例化的flask引入配置热 文 推 荐
☞劳荣枝潜逃 23 年落网,多亏了它!
☞漫画:三种 “奇葩” 的排序算法
☞华为鸿蒙 OS 2020 计划曝光!手机仍然优先用安卓
☞用象棋的思维趣说 IT 人的职业发展和钱途
☞那些打着AI万金油旗号的产品欺骗大众,如何识别?
☞详谈4大主流CPU处理器技术架构
你点的每个“在看”,我都认真当成了喜欢

如何开发实操公众号小游戏的裂变?相关推荐

  1. 章节十五:项目实操:PK小游戏(3)

    章节十五:项目实操:PK小游戏(3) 目录 章节十五:项目实操:PK小游戏(3) 1. 明确项目目标 2. 分析过程,拆解项目 3. 代码实现,逐步执行 3.1 定义Book类 3.2 类BookMa ...

  2. Web前端开发实训 -- 弹球王小游戏

    1. 作品展示 2. 代码(全) 链接:https://pan.baidu.com/s/1Mxdz8rR18uM_7yuY-eTwbQ  提取码:6666 以下是项目目录及部分代码. ① 项目目录 ② ...

  3. 题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:2021年焊工(初级)考试资料为正在备考焊工(初级)操作证的学员准备的理论考试专题,每个月更新的焊工(初级)免费试题祝您顺利通过

    题库来源:安全生产模拟考试一点通公众号小程序 化工自动化控制仪表报名考试根据新化工自动化控制仪表考试大纲要求,安全生产模拟考试一点通将化工自动化控制仪表模拟考试试题进行汇编,组成一套化工自动化控制仪表 ...

  4. C语言实训——经点小游戏马里奥开发day2

    C语言实训--经点小游戏马里奥开发day2 角色移动相关 一.直接改变坐标 在制作了卷轴式的地图后,为了发挥卷轴式地图的优越性,马里奥能自由移动是必须的,为了实现马里奥的移动,最开始我尝试的是当用户按 ...

  5. .NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?

    前言 获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性. 官方的解释:如果开 ...

  6. 外卖返利系统/美团/饿了么外卖CPS联盟返利公众号小程序核心源码

    我们都知道,目前两家巨头饿了么和美团点外卖都可以获得返现,其中饿了么是返利6%,美团是返利3-5%,具体要根据活动来. 也就是说按正常一个人用户点餐,你可以获得每笔外卖的CPS返利佣金,而且外卖的用户 ...

  7. 题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试试卷是安全生产模拟考试一点通生成的,熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2021年P气瓶充装考试内容为正在备考P气瓶充装操作证的学员准备的理论考试专题,每个月更新的P气瓶充装模拟考试题祝您顺利通过P气瓶充装考试. 1.[多选题 ...

  8. 最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码

    最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码 管理界面 独家长期更新日志(欢迎反馈BUG) 1.添加手机端前后台声音提示 2.添加后台客户管理显示在线离线 3.添加清空当前对 ...

  9. 微信,支付宝支付,微信公众号小程序授权等

    微信,支付宝支付,微信公众号小程序授权等 前言 微信支付 微信授权 maven依赖(更新) 前言 最近在公司也做了很多移动端项目,如今微信公众号,小程序又特别火爆,免不了要接触支付,授权这类的业务需求 ...

最新文章

  1. GO Negotiation流程分析
  2. hibernate annotation多对多中间表添加其他字段的第三种方法
  3. Python中文分词 jieba 十五分钟入门与进阶
  4. h5课件制作_Articulate storyline交互H5视频课件制作技巧
  5. Baidu_Location_SDK
  6. jquery实现增删改(伪)-老男孩作业day13
  7. [Leedcode][JAVA][第914题][最大公约数]
  8. 小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
  9. 不重启修改计算机名称,批处理不重启快速修改计算机名
  10. linux中检测用户信息的命令是,Linux中系统状态检测命令
  11. Apache配置文件httpd.conf详解
  12. 判断Object对象属性的类型
  13. RedisTemplate和StringRedisTemplate在项目中应用
  14. 锐捷自动定时启动,开机自动认证校园网 教程
  15. 沙盘模拟软件_三连冠!我校学子连续三年蝉联全国大学生沙盘模拟经营大赛福建省决赛一等奖...
  16. IDEA如何设置背景色?
  17. 经济机器是怎样运行的 -- Ray Dalio
  18. ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册
  19. Talk | 清华大学陈晓宇苏黎世联邦理工黄嘉伟 :基于实际应用的强化学习
  20. 什么是真正的转运?常见的五种转运方法

热门文章

  1. 什么是CLI和CLR
  2. Android - UI 控件
  3. 倍福TwinCAT(贝福Beckhoff)应用教程12.1 TwinCAT控制松下伺服 连接和试运行
  4. windows 定时关机小脚本
  5. wx.setStorage、wx.getStorage和wx.getStorageSync
  6. Five Basic Principle 五项基本原则
  7. 软件人员kpi制定模板_数据化时代的 KPI 模板
  8. 使用SqlConnection命令链接数据库
  9. vba复制整个sheet内容_Excel VBA解读(74):移动或复制工作表——Move方法和Copy方法...
  10. 来自TechCrunch Disrupt Europe 2014的4大创意