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; //當前用戶ID
if (!$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);
都註釋掉。
- 這樣就達到了分享相關,另外還有一種是根據二維碼和邀請碼的幫助,等下一次我再發布一篇,歡迎有什麼問題都可以發佈評論。