fix: 修复服务号回调处理返回用户ID及缓存更新逻辑
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user