初始化代码
This commit is contained in:
307
application/api/model/AgoraAuth.php
Normal file
307
application/api/model/AgoraAuth.php
Normal file
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model;
|
||||
|
||||
|
||||
use think\Db;
|
||||
use think\Model;
|
||||
use think\facade\Env;
|
||||
|
||||
class AgoraAuth extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* 登录接口,获取针对当前用户(UID)的短期令牌Code
|
||||
* 调用方:APP端
|
||||
*/
|
||||
public function get_code($uid){
|
||||
$user_info = db::name('user')->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' => ''];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user