find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '用户不存在', 'data' => null]; } $now_time = time(); //删除用户已有code $map = []; $map[] = ['uid', '=', $uid]; $user_code = db::name('user_agora_code')->where($map)->delete(); $code = md5($uid . date('YmdHis') . generateRandom(32)); //生成用户code $insert = []; $insert['uid'] = $uid; $insert['code'] = $code; $insert['add_time'] = $now_time; $insert['expire_time'] = $now_time + (60*60*2); $reslut = db::name('user_agora_code')->insert($insert); if(!$reslut){ return ['code' => 201, 'msg' => '获取失败', 'data' => null]; } $data = []; $data['code'] = $code; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } /** * 短期令牌Code更换长期令牌SSToken * 调用方:游戏服务 * */ public function get_sstoken($data){ $now_time = time(); // $data = json_decode($data,true); // dump($data);exit; $code = $data['code']; $map = []; $map[] = ['code', '=', $code]; $code_info = db::name('user_agora_code')->where($map)->find(); if(!$code_info){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Code非法', 'sdk_error_code' => 9999, 'data' => $data]; } //code 是否过期 if($code_info['expire_time'] < time()){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Code已过期', 'sdk_error_code' => 1005, 'data' => $data]; } //是否有该用户token $map = []; $map[] = ['a.uid', '=', $code_info['uid']]; $token_info = db::name('user_agora_token')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.uid,a.token,a.expire_time,b.nick_name,b.base64_nick_name,b.head_pic,b.sex')->where($map)->order('a.add_time desc')->find(); if($token_info){ //是否过期 if($token_info['expire_time'] < time()){ $datas = []; $datas['ss_token'] = $token_info['token']; // $data['expire_date'] = $token_info['expire_time'] * 1000; // return ['ret_code' => 1, 'ret_msg' => 'Token已过期,请重新生成', 'sdk_error_code' => 1005, 'data' => $data]; $update_sstoken = $this->update_sstoken($datas); if($update_sstoken['ret_code'] == 0){ $data = $update_sstoken['data']; }else{ $data = []; return ['ret_code' => 1, 'ret_msg' => '未知错误', 'sdk_error_code' => 9999, 'data' => $data]; } }else{ if($token_info['sex'] == 1){ $sex = 'male'; }else if($token_info['sex'] == 2){ $sex = 'female'; }else{ $sex = ''; } $data = []; $data['ss_token'] = $token_info['token']; $data['expire_date'] = $token_info['expire_time'] * 1000; $data['user_info']['uid'] = strval($token_info['uid']); $data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($token_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['user_info']['avatar_url'] = localpath_to_netpath($token_info['head_pic']); $data['user_info']['gender'] = $sex; $data['user_info']['is_ai'] = 0; } }else{ $token = md5(md5($code_info['uid'] . date('YmdHis') . generateRandom(32))); //生成用户token $insert = []; $insert['uid'] = $code_info['uid']; $insert['token'] = $token; $insert['add_time'] = $now_time; $insert['expire_time'] = $now_time + (60*60*24*30); $reslut = db::name('user_agora_token')->insert($insert); if(!$reslut){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Token创建失败', 'sdk_error_code' => 1001, 'data' => $data]; } $user_info = db::name('user')->find($code_info['uid']); if($user_info['sex'] == 1){ $sex = 'male'; }else if($user_info['sex'] == 2){ $sex = 'female'; }else{ $sex = ''; } $data = []; $data['ss_token'] = $token; $data['expire_date'] = $insert['expire_time'] * 1000; $data['user_info']['uid'] = strval($code_info['uid']); $data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['user_info']['avatar_url'] = localpath_to_netpath($user_info['head_pic']); $data['user_info']['gender'] = $sex; $data['user_info']['is_ai'] = 0; } return ['ret_code' => 0, 'ret_msg' => '', 'sdk_error_code' => 0, 'data' => $data]; } /** * 刷新长期令牌 * 调用方:游戏服务 * */ public function update_sstoken($data){ $token = $data['ss_token']; $map = []; $map[] = ['token', '=', $token]; $token_info = db::name('user_agora_token')->where($map)->find(); if(!$token_info){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Token非法', 'sdk_error_code' => 1004, 'data' => $data]; } $uid = $token_info['uid']; $token = md5(md5($uid . date('YmdHis') . generateRandom(32))); $now_time = time(); $user_info = db::name('user')->find($uid); if($user_info['sex'] == 1){ $sex = 'male'; }else if($user_info['sex'] == 2){ $sex = 'female'; }else{ $sex = ''; } Db::startTrans(); try { //删除之前的token $map = []; $map[] = ['uid', '=', $uid]; $reslut = db::name('user_agora_token')->where($map)->delete(); if(!$reslut){ Db::rollback(); return ['ret_code' => 1, 'ret_msg' => '未知错误', 'sdk_error_code' => 9999, 'data' => []]; } $insert = []; $insert['uid'] = $uid; $insert['token'] = $token; $insert['add_time'] = $now_time; $insert['expire_time'] = $now_time + (60*60*24*30); $reslut = db::name('user_agora_token')->insert($insert); if(!$reslut){ Db::rollback(); return ['ret_code' => 1, 'ret_msg' => 'Token创建失败', 'sdk_error_code' => 1001, 'data' => []]; } $data = []; $data['ss_token'] = $token; $data['expire_date'] = $insert['expire_time'] * 1000; $data['user_info']['uid'] = strval($user_info['uid']); $data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['user_info']['avatar_url'] = localpath_to_netpath($user_info['head_pic']); $data['user_info']['gender'] = $sex; $data['user_info']['is_ai'] = 0; Db::commit(); return ['ret_code' => 0, 'ret_msg' => '', 'sdk_error_code' => 0, 'data' => $data]; } catch (\Exception $e) { //回滚事务 Db::rollback(); return ['ret_code' => 1, 'ret_msg' => '未知错误', 'sdk_error_code' => 9999, 'data' => []]; } } /** * 获取用户信息 * 调用方:游戏服务 * */ public function get_user_info($data){ $token = $data['ss_token']; $map = []; $map[] = ['token', '=', $token]; $token_info = db::name('user_agora_token')->where($map)->find(); if(!$token_info){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Token非法', 'sdk_error_code' => 1004, 'data' => $data]; } //token是否过期 if($token_info['expire_time'] < time()){ $data = []; $data['ss_token'] = $token_info['token']; $data['expire_date'] = $token_info['expire_time']; return ['ret_code' => 1, 'ret_msg' => 'Token已过期', 'sdk_error_code' => 1005, 'data' => $data]; } //获取用户信息 $user_info = db::name('user')->find($token_info['uid']); if($user_info['sex'] == 1){ $sex = 'male'; }else if($user_info['sex'] == 2){ $sex = 'female'; }else{ $sex = ''; } $data = []; $data['uid'] = strval($user_info['uid']); $data['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['avatar_url'] = localpath_to_netpath($user_info['head_pic']); $data['gender'] = $sex; return ['ret_code' => 0, 'ret_msg' => '', 'sdk_error_code' => 0, 'data' => $data]; } /** * 游戏服务端上报游戏接入方的游戏的数据 * 调用方:游戏服务 * */ public function report_game_info($data){ $now_time = time(); $map = []; $map[] = ['uid', '=', $data['uid']]; $map[] = ['token', '=', $data['ss_token']]; $token_info = db::name('user_agora_token')->where($map)->find(); if(!$token_info){ $data = []; return ['ret_code' => 1, 'ret_msg' => 'Token非法', 'sdk_error_code' => 1004, 'data' => $data]; } $insert = []; if($data['report_type'] == 'game_start'){ $insert['report_type'] = 1; $insert['players'] = json_encode($data['report_msg']['players']); }else{ $insert['report_type'] = 2; $insert['battle_end_at'] = $data['report_msg']['battle_end_at']; $insert['battle_duration'] = $data['report_msg']['battle_duration']; $insert['results'] = json_encode($data['report_msg']['results']); } $insert['mg_id'] = $data['report_msg']['mg_id']; $insert['room_id'] = $data['report_msg']['room_id']; $insert['game_mode'] = $data['report_msg']['game_mode']; $insert['game_round_id'] = $data['report_msg']['game_round_id']; $insert['battle_start_at'] = $data['report_msg']['battle_start_at']; $insert['report_game_info_extras'] = $data['report_msg']['report_game_info_extras']; $insert['report_game_info_key'] = $data['report_msg']['report_game_info_key']; $insert['uid'] = $data['uid']; $insert['token'] = $data['ss_token']; $insert['add_time'] = $now_time; $reslut = db::name('agora_game_log')->insert($insert); if($reslut){ return ['ret_code' => 0, 'ret_msg' => '']; }else{ return ['ret_code' => 1, 'ret_msg' => '']; } } }