TP5 实现链接分享/帮助,限制每个用户每天一次帮忙
1、實現思想
1.1、分享人角度
- 用戶需要將對應生成的鏈接發送給其他用戶
- 鏈接中必須包含所需要的 當前用戶ID 和 相關ID(例如:視頻ID/商品ID)
- 用戶需要登錄才能分享,如果沒有登錄則不傳 用戶ID 和 相關ID
- 分享成功后需要獲得對應的報酬或分享成功的展示
1.2、幫助人角度
- 用戶需要點擊分享人的鏈接并且需要登錄,否則不算分享成功。
- 幫助人點擊一次算一次,多次點擊也只算一次
前端在分享前需要調用接口,告訴后端 某某用戶 分享的 相關ID(例如:視頻ID/商品ID)
前端在用戶點擊的鏈接需要去判斷是否帶有分享參數,如果有則需要調取 幫助分享的接口
后端需要將 幫助分享的接口 改成需要登錄狀態的,這樣才可以讓用戶去登錄后調取該接口。
2、實現代碼
2.1、分享前調用接口
/*** @ApiTitle (分享前調用接口)* @ApiMethod (GET)* @ApiHeaders (name=Authorization, type=string, required=true, description="用戶Token")* @ApiParams (name="id", type="integer", description="呆滯料id")* @ApiReturn ()*/ public function shareBusiness() {$id = input('id', 0);if (!$id) $this->error('參數錯誤!');//存入redis$redis = RedisService::connect();//先刪除后更新$key = RedisService::SU_MATERIAL_BUSINESS_SHARE . $this->auth->uid;$redis->zrem($key, $id);$redis->zadd($key, [$id => time()]);$this->success('成功!'); }1、其中 RedisService 是我自己建立的服務類,主要存redis健和相關操作
2、$this->auth->uid 這個是當前用戶的ID,我這里用的是有序集合,其實是有無序集合也是可以的,只是考慮到之后可能要看用戶分享的記錄,這里的score存的是時間。
3、其中值里面的value存的是 相關ID(例如:視頻ID/商品ID),以便對應操作
2.2、分享后調用接口
/*** @ApiTitle (點擊分享鏈接)* @ApiMethod (GET)* @ApiHeaders (name=Authorization, type=string, required=true, description="用戶Token")* @ApiParams (name="id", type="integer", description="相關id")* @ApiParams (name="share_user_id", type="integer", description="分享人ID")* @ApiReturn ()*/ public function clickShareLink() {$id = input('id', 0); //相關ID$shareUserId = input('share_user_id', 0); //分享人ID$userId = $this->auth->uid; //當前用戶IDif (!$id || !$shareUserId) $this->error('參數錯誤!');$key = RedisService::SU_MATERIAL_BUSINESS_SHARE . $shareUserId;$key2 = RedisService::SU_MATERIAL_BUSINESS_SHARE_SUCCESS . $shareUserId . ':' . $id;$redis = RedisService::connect();//判斷用戶是否分享過if ($redis->zscore($key, $id)) {//判斷該用戶是否點擊過if (!$redis->zscore($key2, $userId)) {//記錄保存至當天$redis->zadd($key2, [$userId => time()]);$expire = strtotime(date('Y-m-d 23:59:59', time())) - time();$redis->expire($key2, $expire);//執行相關的獎勵操作// ....$this->success('分享成功!');}}$this->success('分享失敗!'); }1、RedisService::SU_MATERIAL_BUSINESS_SHARE 這個鍵值主要存分享人ID和相關ID,用于判斷該分享鏈接是否有用
2、RedisService::SU_MATERIAL_BUSINESS_SHARE_SUCCESS 這個健主要存分享人ID、幫助人ID和相關ID,用于限制幫助人只能幫助一次。
3、 這里需要設置幫助成功鍵的有效期,主要是用于讓幫助人第二天還能幫助一次,如果限制永久只能幫助一次的話,這段$expire = strtotime(date('Y-m-d 23:59:59', time())) - time(); 和 $redis->expire($key2, $expire); 都注釋掉。
- 這樣就達到了分享相關,另外還有一種是根據二維碼和邀請碼的幫助,等下一次我再發布一篇,歡迎有什么問題都可以發布評論。
總結
以上是生活随笔為你收集整理的TP5 实现链接分享/帮助,限制每个用户每天一次帮忙的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swoole 使用 xdebug 实现调
- 下一篇: TP5 实现转盘抽奖