using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using GDZZ.Core.OAuth;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace GDZZ.Core.Service;
///
/// OAuth服务
///
[ApiDescriptionSettings(Name = "OAuth", Order = 159)]
[AllowAnonymous]
public class SysOauthService : ISysOauthService, IDynamicApiController, ITransient
{
private readonly HttpContext _httpContext;
private readonly WechatOAuth _wechatOAuth;
private readonly MiniProgramUtil miniProgram;
public SysOauthService(IHttpContextAccessor httpContextAccessor, WechatOAuth wechatOAuth)
{
_httpContext = httpContextAccessor.HttpContext;
_wechatOAuth = wechatOAuth;
this.miniProgram = new MiniProgramUtil();
}
///
/// 微信登录授权获取微信access_token
///
[HttpGet("oauth/wechat")]
public Task WechatLogin()
{
var token = _wechatOAuth.GetAuthorizeUrl("GDZZ");
_httpContext.Response.Redirect(token);
return Task.CompletedTask;
}
///
/// 微信登录换取jscode授权回调
///
///
///
///
///
[HttpGet("oauth/wechatcallback")]
public async Task WechatLoginCallback([FromQuery] string code, [FromQuery] string state, [FromQuery] string error_description = "")
{
if (!string.IsNullOrEmpty(error_description))
throw Oops.Oh(error_description);
var accessTokenModel = await _wechatOAuth.GetCode2SessionAsync(code, state);
return accessTokenModel;
}
///
/// 获取微信用户基本信息
///
///
///
///
[HttpGet("oauth/wechat/user")]
public async Task GetWechatUserInfo([FromQuery] string token, [FromQuery] string openId)
{
return await _wechatOAuth.GetUserInfoAsync(token, openId);
}
}