前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初尝微信云托管

初尝微信云托管

作者头像
Python研究所
发布2022-06-17 08:16:47
2.8K0
发布2022-06-17 08:16:47
举报
文章被收录于专栏:大飞的部落阁大飞的部落阁

前言

最近微信给我派发了 10000 个微信红包封面,但是由于我的操作失误,派发方式选择了唯一链接,所以微信直接给我生成了 10000 个红包封面链接,对,就是 10000 个。

给我 10000 个红包封面没有问题,问题是我怎么把这些发给别人呢?

最初的想法

因为我有一台 1C1G 的云服务器,我就想着是不是可以写个分发服务,将链接存到一个列表中,在用户请求链接的时候从中拿出一个返回,同时将其从列表中删除,但是这样会存在很多问题,比如单个用户多次调用就有可能将列表清空,而且无法让每个用户只获取一次,而且 10000 个数据存到列表中也是太 low

灵光一现

因为我曾很多次尝试想对公众号做二次开发,想着做一个自己的服务端来接管公众号的用户消息。但是由于工作太忙(自己太懒),一直没能开始。接着这次 10000 个红包封面的问题,我又蠢蠢欲动,可惜做这样一个服务端没有几天半个月是不可能做完的(我是菜鸡,做的慢)。无意间,我在公众号的开发者工具页找到了微信云托管这个产品,声称和微信用户体系天然打通,这岂不是正如了我的意。

我计划选择使用微信云托管来实现一个红包链接分发服务,而且微信云托管自带数据库,支持多种后端框架,支持公网域名访问,因为我的公众号是未经认证的,所以无法使用微信用户体系,只能选择公网域名这种方式。

几个难点

如何保存封面链接

通过上面的介绍,我们知道微信云托管为我们提供数据库服务,我们可以直接使用自带的数据库来保存我们的封面链接。

在导入数据之前,我们要创建表和初始化表结构。本次我们直接使用主键 ID,封面链接,封面状态三个字段即可。

我们选择使用 csv 文件进行导入。

csv导入数据库
csv导入数据库

如何让被领取的封面不再被领

上面初始化表的时候,我们已经设置了封面链接的状态,做法就是当链接被领取后直接在视图中调用 dao 方法将封面链接的状态改为已领取即可。(PS:用户请求的时候,dao 只会去处查询未被领取的封面链接)

已经被领取的封面
已经被领取的封面

如何让每个用户都只能领一次

这个问题算是这其中耗费我时间最多的一个问题了,从起初的计划用 Remote_Ip(只能拿到云托管内网 IP),源 IPheaders 的属性 X-Real-IpX-Forwarded-For)来唯一确定领取者身份,但是同一个人的多次访问可能存在出口 IP 变化的情况,所以用这个办法也是不行的。

最后,我还是选择了最简单的 cookie 来做唯一检查,原理就是当用户来获取封面链接的时候,我会给客户端下发一个 cookie,然后在收到请求的最开始去判断客户端是否携带了 cookie,如果携带则直接返回“请勿重复领取!”

用户第一次来请求的时候是不带 cookie 的,第二次就会自动携带。

如何让用户一步领到封面

这个问题相对比较简单,公众号支持 html 内嵌,所以直接将我服务器的域名内嵌到一个 a 标签中,然后根据关键词返回这个 a 标签(可点击的文字)即可。

这个方案存在的问题

当然对于大多数的用户都是没问题的,怕就怕个别同学好奇心泛滥。简单的对比第一和第二次的请求头就能发现问题,通过删除客户端的 cookie 就能够实现多次获取封面链接,从而起到破解的目的。但是同一个封面一个人只能领取一次,多了也没意义。

谨以此文记录我的 10000 封红包分发过程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 最初的想法
  • 灵光一现
  • 几个难点
    • 如何保存封面链接
      • 如何让被领取的封面不再被领
        • 如何让每个用户都只能领一次
          • 如何让用户一步领到封面
          • 这个方案存在的问题
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档