[to 前端、后端]渠道拓展是业务运营的重要工作,其中在技术层面,本文章给出一个渠道管理的解决方案,具体如下:
一、抽象角色,合作方t_partner_info
合作方的库表属性如下,其中code为渠道码,建议8位(以便配合小程序scene的32位长)。每个合作方的code不同,前端将自己所属渠道记录到localstorage中,后续全部的接口都将code加入到参数中,同user_id和token一样
二、后端设定中间件
中间件判断user_id和code信息,如果存在相关信息,则记录用户的渠道信息。
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//用于记录每日一画的渠道号
$data = $request->all();
//入参中存在用户id和mch_code,则可以记录渠道信息
if (array_key_exists('user_id', $data) && array_key_exists('token', $data) && array_key_exists('mch_code', $data)) {
$user_id = $data['user_id'];
//校验token的合法性
$result = UserManager::ckeckToken($user_id, $data['token']);
Utils::processLog(__METHOD__, '', "校验token合法性:" . $result);
if (!$result) {
return $next($request);
}
//获取渠道方信息
$mryhPartner = MryhPartnerManager::getByCode($data['mch_code']);
Utils::processLog(__METHOD__, '', "渠道信息:" . $mryhPartner);
//如果不存在渠道
if (!$mryhPartner) {
return $next($request);
}
$mryhPartnerUser = MryhPartnerUserManager::getListByCon(['user_id' => $user_id, 'partner_id' => $mryhPartner->id], false)->first();
//如果不存在,则需要记录
if (!$mryhPartnerUser) {
$mryhPartnerUser = new MryhPartnerUser();
$mryhPartnerUser->user_id = $user_id;
$mryhPartnerUser->partner_id = $mryhPartner->id;
$mryhPartnerUser->save();
MryhPartnerManager::addStatistics($mryhPartner->id, 'user_num', 1); //进行计数
}
}
return $next($request);
}
三、前端获取渠道号
前端封装公共方法,如果传入页面、扫码、程序跳转中有code参数,则将code存入localstorage中。
用以上的方法记录渠道信息,则可以较好的简化代码和逻辑,完成用户渠道管理。