类似微信红包的超时自动返还功能

我是特种兵 发布于 2016/11/14 17:46
阅读 1K+
收藏 0

    有一个需求,用户通过链接分享自己的积分,分享时会扣除此用户的积分数,积分数是固定的,链接有效期是固定时间,不超时时其他人可以正常打开链接领取,超时以后点击会提示超时,已过期。并且不管有没有用户去点击,超时时间是固定的,比如1个小时,并且到1个小时后分享时扣除的用户积分要返还。

    和微信红包超时退回是一样的场景。

    现在能用到的只有php、mysql、redis、Linux服务器,请问大神们怎样才能做一个和微信红包超时退回类似的功能呢?

    感谢!

加载中
0
Tuesday
Tuesday
一个token就可以搞定的事, 
我是特种兵
我是特种兵
请问怎样用一个token判断是否已经超时,自动判断,没有用户去点击。
0
我不说话
我不说话
分享时,写入超时时间点。专门一个定时器,每几秒查询小于当前时间的数据,然后返还积分,over;还有你这个积分分享的逻辑也没讲清楚
我是特种兵
我是特种兵
积分分享逻辑可以理解成和微信固定金额红包一样,领一次就不能再领取了,没领的话就超时自动退回。 我也想过定时任务执行,但是数据量大的话,肯定会出现资源占用过大的问题,有没有好的办法解决。
0
IdleMan
IdleMan
增加一个超时时间字段,减积分时根据该字段确认是否超时:超时则不减积分并提示超时,否则balbala
我是特种兵
我是特种兵
怎样自动判断是否超时?
0
首席撸出血
首席撸出血

超时时间是固定的,你创建的时候给个token,token对应数据库里面某个表里的字段,字段对应的数据有超时时间,用户领取的时候你通过token判断当前时间是否大于超时时间,是的话,就提示用户不可以领取



另外后台弄一个定时任务,判断是否已经超时,是的话,就把积分退还给用户!



0
Tuesday
Tuesday

引用来自“首席雅诗兰黛”的评论

超时时间是固定的,你创建的时候给个token,token对应数据库里面某个表里的字段,字段对应的数据有超时时间,用户领取的时候你通过token判断当前时间是否大于超时时间,是的话,就提示用户不可以领取



另外后台弄一个定时任务,判断是否已经超时,是的话,就把积分退还给用户!



积分都没发放呢, 何来的退还? 

讲点逻辑思维行不行. 

Ambitor
Ambitor
朋友,涉及这种积分、钱的变更都是会预扣/冻结的。然后如果要还回来就会重新生成一条流水的。。你微信发红包的时候 如果 发出去红包没有被领,都会再生成一条加钱流水 补回来的,这是涉及到钱系统的最根本,不然后期根本没法做审核 和报表的。也不能根据这些流水数据影响运营的决策权。
Tuesday
Tuesday
回复 @我是特种兵 : 你都不知道事务.. 扣除的积分是假像.
我是特种兵
我是特种兵
"分享时会扣除此用户的积分数",所以超时没人领取之后要自动退回。
0
滔哥
滔哥
别想复杂了。像@Tuesday 说的,一个token,还有个你要说明白,比如有效期是60分钟,A在40分钟的时候分享给我了,我打开了30分钟,在这打开的过程中,我不刷新,只是停留在页面上,当文章的创始时间+有效期60分钟到的时候 ,我这边自动提示超时吗? 还是刷新的时候再提示。
0
我是特种兵
我是特种兵

引用来自“滔哥”的评论

别想复杂了。像@Tuesday 说的,一个token,还有个你要说明白,比如有效期是60分钟,A在40分钟的时候分享给我了,我打开了30分钟,在这打开的过程中,我不刷新,只是停留在页面上,当文章的创始时间+有效期60分钟到的时候 ,我这边自动提示超时吗? 还是刷新的时候再提示。
链接超时页面可以不自动刷新(如果有需求我可以用webscoket),现在的问题是数据库里面的这条分享已经超时了,怎样判断是否已经超时,就像微信红包,是怎样在24小时的时候判断到期的。
我是特种兵
我是特种兵
关键是当时间到24小时,没有人打开这个链接时,怎样自动退回。
滔哥
滔哥
至于你说的扣分、退回积分,这个应该就不难了吧。。。
滔哥
滔哥
最简单的想法,将文章的id与发布时间,自己写个加密函数,生成为一个token,打开例如 http://www.lvtao.net/view?vid=ldsfj234824alkjflasjf932 用户打开的时候,将这个vid反解出id和时间,判断时间,没超时则根据id读出内容
0
太黑_thj
太黑_thj
你这个分享逻辑就有问题  应该是限时分享,然后有人领取就直接从账户内扣除积分,领多少扣多少,或者可以设个分享上限,然后设个超时时间,时间过了就不能继续领取   也就省了一步积分回退,还容易实现一些
0
n
nzlong

利用Redis可以对key设置ttl的特性。
分享链接被点击时:检查key是否过期,过期则返还积分,否则扣除积分。

0
红酒花生
红酒花生
分享的时候,绝对只能扣除积分,不然怕拿着积分用其他的用途,就像微信红包,发出去的钱,就是发出去了。我觉得也不要想得太复杂了。新建一个表,字段包含 分享时间,分享积分数值,状态(1 待领取 2 领取 3 过期),领取时间 ...(需要其他的字段另外加),另外弄一个定时任务,查询这个表状态为待领取状态的,看看时间是否已经过期,如果过期,更改状态为3 过期,返还积分,就不需要做其他的事情,也不会有什么消耗,这些操作一定要开启事务,因为涉及到多个表。还有个安全性的问题,如果只有指定用户可以领取的话,就加上一个字段,指定用户的用户名,领取的时候,根据登录态,做指定用户判断,根据领取的状态,做对应操作(1 待领取 2 领取 3 过期)。
返回顶部
顶部