ufutx.dma/app/Services/ImService.php
2026-03-04 14:42:40 +08:00

118 lines
4.1 KiB
PHP

<?php
namespace App\Services;
use App\Facades\CommonService;
use GuzzleHttp\Client;
use App\Models\WangYiYun;
use cccdl\yunxin_sdk\Im\User as ImUser;
use Illuminate\Support\Facades\Log;
class ImService
{
public function updateImUser($user_id,$data){
//更新用户信息
$wangYiUser = WangYiYun::where('user_id',$user_id)->first();
$imUser = new ImUser(config('chat.im.app_id'), config('chat.im.app_secret'));
$ac_cid = make_wangyiyun_accid($user_id);
$token = '';
//更新网易用户数据前先查看用户是否存在网易云账号,不然这里会报错
$exists = $this->getImUser($user_id);
if ($exists) {
Log::info("updateImUser user_id:{$user_id} 111");
if($wangYiUser){
Log::info("updateImUser user_id:{$user_id} 222");
$token = $wangYiUser->token;
$update = [];
$wangYiUser->icon = $update['icon'] = $data->avatar??'';
$wangYiUser->name = $update['name'] = $data->name??'';
$wangYiUser->gender = $update['gender'] = $data->sex??0;
$wangYiUser->birth = $update['birth'] = $data->birthday??'';
$wangYiUser->save();
$imUser->updateUserInfo($ac_cid,$update);
}
}else{
Log::info("updateImUser user_id:{$user_id} 333");
$insert = $yun = [];
$insert['user_id'] = $user_id;
$insert['accid'] = $ac_cid;
$insert['name'] = $yun['name'] = $data->name??'';
$insert['icon'] = $yun['icon'] = $data->avatar??'';
$insert['email'] = $yun['email'] = $data->email??'';
$insert['birth'] = $yun['birth'] = $data->birthday??'';
$insert['gender'] = $yun['gender'] = $data->sex ?? 0;
$imUserData = $imUser->create($ac_cid, $yun);
$token = $imUserData['info']['token'];
$insert['token'] = $token;
//插入表数据数据
if(!$wangYiUser){
Log::info("updateImUser user_id:{$user_id} 444");
WangYiYun::create($insert);
}
}
if (empty($token)) {
$token = CommonService::random(32);
$imUser->update($ac_cid, $token);
WangYiYun::where('accid', $ac_cid)->update(['token'=>$token]);
}
}
public function getImUser($user_id){
//如果网易云信存在用户则修改,不存在则创建
$ac_cids = [make_wangyiyun_accid($user_id)];
$appSecret = config('chat.im.app_secret');
$time = time();
$nonce = uniqid();
$client = new Client();
$response = $client->post('https://api.netease.im/nimserver/user/getUinfos.action', [
'headers' => [
'AppKey' => config('chat.im.app_id'),
'Nonce' => $nonce,
'CurTime' => $time,
'CheckSum' => sha1($appSecret . $nonce . $time),
],
'form_params' => [
'accids' => json_encode($ac_cids),
],
]);
// 处理响应
$body = json_decode($response->getBody(), true);
$flag = false;
if ($body['code'] == 200) {
$flag = true;
}
return $flag;
}
public function getImUserV2($user_id){
//如果网易云信存在用户则修改,不存在则创建
$ac_cids = [make_wangyiyun_accid($user_id)];
$appSecret = config('chat.im.app_secret');
$time = time();
$nonce = uniqid();
$client = new Client();
$response = $client->post('https://api.netease.im/nimserver/user/getUinfos.action', [
'headers' => [
'AppKey' => config('chat.im.app_id'),
'Nonce' => $nonce,
'CurTime' => $time,
'CheckSum' => sha1($appSecret . $nonce . $time),
],
'form_params' => [
'accids' => json_encode($ac_cids),
],
]);
// 处理响应
$body = json_decode($response->getBody(), true);
return $body;
}
}