fix: 修复服务号回调处理返回用户ID及缓存更新逻辑

This commit is contained in:
ccnetcore
2025-08-29 21:55:07 +08:00
parent 1fbd521d1a
commit d90e24f9ed
2 changed files with 11 additions and 8 deletions

View File

@@ -112,14 +112,13 @@ public class FuwuhaoService : ApplicationService
//根据操作类型,进行业务处理,返回处理结果,再写入缓存,10s过去相当于用户10s扫完app后轮询要在10秒内完成 //根据操作类型,进行业务处理,返回处理结果,再写入缓存,10s过去相当于用户10s扫完app后轮询要在10秒内完成
var scenResult = var scenResult =
await _fuwuhaoManager.CallBackHandlerAsync(cache.SceneType, body.FromUserName, cache.UserId); await _fuwuhaoManager.CallBackHandlerAsync(cache.SceneType, body.FromUserName, cache.UserId);
cache.SceneResult = scenResult; cache.SceneResult = scenResult.SceneResult;
cache.UserId = scenResult.UserId;
await _sceneCache.SetAsync($"{FuwuhaoConst.SceneCacheKey}{scene}", cache, await _sceneCache.SetAsync($"{FuwuhaoConst.SceneCacheKey}{scene}", cache,
new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(50) }); new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(50) });
//如果是注册将OpenId与Scene进行绑定代表用户有30分钟进行注册 //如果是注册将OpenId与Scene进行绑定代表用户有30分钟进行注册
if (scenResult == SceneResultEnum.Register) if (scenResult.SceneResult == SceneResultEnum.Register)
{ {
await _openIdToSceneCache.SetAsync($"{FuwuhaoConst.OpenIdToSceneCacheKey}{body.FromUserName}", scene, await _openIdToSceneCache.SetAsync($"{FuwuhaoConst.OpenIdToSceneCacheKey}{body.FromUserName}", scene,
new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30) }); new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30) });
@@ -176,6 +175,10 @@ public class FuwuhaoService : ApplicationService
switch (output.SceneResult) switch (output.SceneResult)
{ {
case SceneResultEnum.Login: case SceneResultEnum.Login:
if (cache.UserId is null)
{
throw new ApplicationException("获取用户id异常请重试");
}
var loginInfo = await _accountService.PostLoginAsync(cache.UserId!.Value); var loginInfo = await _accountService.PostLoginAsync(cache.UserId!.Value);
output.Token = loginInfo.Token; output.Token = loginInfo.Token;
output.RefreshToken = loginInfo.RefreshToken; output.RefreshToken = loginInfo.RefreshToken;

View File

@@ -207,7 +207,7 @@ public class FuwuhaoManager : DomainService
/// <param name="openId"></param> /// <param name="openId"></param>
/// <param name="bindUserId"></param> /// <param name="bindUserId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<SceneResultEnum> CallBackHandlerAsync(SceneTypeEnum sceneType, string openId, Guid? bindUserId) public async Task<(SceneResultEnum SceneResult,Guid? UserId)> CallBackHandlerAsync(SceneTypeEnum sceneType, string openId, Guid? bindUserId)
{ {
var aiUserInfo = await _userRepository._DbQueryable.Where(x => x.FuwuhaoOpenId == openId).FirstAsync(); var aiUserInfo = await _userRepository._DbQueryable.Where(x => x.FuwuhaoOpenId == openId).FirstAsync();
switch (sceneType) switch (sceneType)
@@ -216,12 +216,12 @@ public class FuwuhaoManager : DomainService
//有openid说明登录成功 //有openid说明登录成功
if (aiUserInfo is not null) if (aiUserInfo is not null)
{ {
return SceneResultEnum.Login; return (SceneResultEnum.Login,aiUserInfo.UserId);
} }
//无openid说明需要进行注册 //无openid说明需要进行注册
else else
{ {
return SceneResultEnum.Register; return (SceneResultEnum.Register,null);
} }
break; break;
@@ -240,7 +240,7 @@ public class FuwuhaoManager : DomainService
//说明没有绑定过,直接绑定 //说明没有绑定过,直接绑定
await _userRepository.InsertAsync(new AiUserExtraInfoEntity(bindUserId.Value, openId)); await _userRepository.InsertAsync(new AiUserExtraInfoEntity(bindUserId.Value, openId));
return SceneResultEnum.Bind; return (SceneResultEnum.Bind,null);
break; break;
default: default:
throw new ArgumentOutOfRangeException(nameof(sceneType), sceneType, null); throw new ArgumentOutOfRangeException(nameof(sceneType), sceneType, null);