一种基于邮箱的用户付费系统构想

7 小时 11 分钟前
 OneLiteCore

最近在鼓捣国内的付费系统,但是觉得传统的用户注册流程过于繁琐,对于小体量的小项目来说开发和维护一套这样的系统得不偿失。因此构想了一个基于邮箱的用户注册付费流程,大家帮忙看看有什么问题没有。

流程

  1. APP 用户本地生成 UUID 并填写他的邮箱地址

  2. 后台用邮箱地址和 UUID 计算出 MD5 ,并用后台私钥签名 MD5 ,然后发送给用户邮箱

  3. 用户从邮箱中复制数据并回填到 APP 中

  4. APP 本地计算出 MD5 然后和用户从邮箱复制过来的数据验签

  5. 如果验证通过则说明用户确实持有这个邮箱地址,并将这个邮箱地址加密保存到 APP 本地,否则让用户重复上面的流程。

  6. 后台检查数据库是否已存在邮箱对应的购买记录,不存在则生成订单信息并标记邮箱地址

  7. APP 收到订单信息发起支付

  8. 支付成功后,后台收到回调,将该邮箱的购买记录存入数据库

  9. 后台以邮箱、UUID 、时间戳和设备等信息记录已付费邮箱的激活记录

  10. 用户用本地认证的邮箱和 UUID 询问后台,如果激活记录小于 2 条则记录并允许激活

  11. 如果激活记录 >= 2 则阻止激活,除非让旧设备注销,如果旧设备丢失可以以邮箱发送邮件申请人工注销。

可能存在的问题

1180 次点击
所在节点    程序员
28 条回复
OneLiteCore
3 小时 21 分钟前
@sampeng 这个经验很有价值,感谢提点!
SenLief
2 小时 46 分钟前
@OneLiteCore 用支付凭证就可以了
yuhaofe
2 小时 21 分钟前
另外 1~5 的流程是验证邮箱所有权,类似忘记密码,主要逻辑就是发送一封邮件,只有持有邮箱的人能够知道邮件内容
目前绝大部分 app 应该都是发送短的随机验证码或者带着随机码的链接,不太确定 lz 这样做的目的在哪里,无状态不占缓存吗,还是会更安全
OneLiteCore
1 小时 57 分钟前
@yuhaofe 为了规避发送短信所需要的成本,短信显然不是免费的,同时也为了规避自己搭建一套账号系统,是出于运行和开发成本的考量。但是按照上面的讨论得出的结果就是,直接上微信登录似乎是一个更好的选择,或者不在乎用户二次交易的话直接用激活码更合适一些。
yueji
1 小时 49 分钟前
在本地抓包可以把 smtp server / 账号 / 密码 明文抓包出来。
yuhaofe
1 小时 48 分钟前
@OneLiteCore 哦哦,这个我明白,主要不清楚的还是为什么用邮箱地址和 UUID 算 MD5 再签名而不是直接后端生成临时随机码放缓存里,邮件里发随机码不是用户输入更方便吗
OneLiteCore
39 分钟前
@yueji 是后台通过 smtp 发送邮件到用户的邮箱,抓包没办法抓服务器的包的吧,用户在这个过程中能够看到的是后台用私钥签名的值。这样客户端本地也持有邮箱和 UUID 可以直接算 MD5 并验证签名。
OneLiteCore
33 分钟前
@yuhaofe 发送随机验证码的话,客户端拿到验证码还是需要去询问后台是不是这个验证码,直接用在客户端用后台的公钥去验证签名可以省略一步。不过看了上面老哥的讨论,觉得要么直接用微信登录,要么就直接激活码更合适点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1097019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX