1 Star 0 Fork 10

SyncGithub/OAuthApp

forked from uncle wang/OAuthApp 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
WechatController.cs 5.20 KB
一键复制 编辑 原始数据 按行查看 历史
using OAuthApp.Data;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;
using System.Net.Http;
using System.Web;
namespace OAuthApp.Controllers
{
public class WechatController : Controller
{
readonly HttpContext _httpContext;
readonly AppDbContext _dbContext;
const string Authorize_url = "https://open.weixin.qq.com/connect/oauth2/authorize";
// 开放平台网站应用专用
const string Authorize_url2 = "https://open.weixin.qq.com/connect/qrconnect";
public WechatController(IHttpContextAccessor contextAccessor,
AppDbContext dbContext)
{
_httpContext = contextAccessor.HttpContext;
_dbContext = dbContext;
}
public const string default_scope = "snsapi_userinfo";
[HttpGet]
public ActionResult Authorize([FromQuery] string code, [FromQuery] long state, [FromQuery] string jxwechat)
{
var props = _dbContext.PropertySettings
.Where(x => x.ChannelCode.Equals(ChannelCodes.App) && x.ChannelAppId == state).ToList();
if (props.Count < 1)
{
return NotFound("请先配置应用");
}
var Prop_WechatClientID = props.FirstOrDefault(x => x.Name.Equals(PropKeyConst.WechatClientID));
var Prop_WechatClientSecret = props.FirstOrDefault(x => x.Name.Equals(PropKeyConst.WechatClientSecret));
var Prop_WechatScope = props.FirstOrDefault(x => x.Name.Equals(PropKeyConst.WechatScope));
var Prop_WechatRedirectUri = props.FirstOrDefault(x => x.Name.Equals(PropKeyConst.WechatRedirectUri));
if (Prop_WechatClientID == null ||
Prop_WechatClientSecret == null ||
Prop_WechatScope == null ||
Prop_WechatRedirectUri == null)
{
return NotFound("请先配置应用");
}
var WechatClientID = Prop_WechatClientID.Value;
var WechatClientSecret = Prop_WechatClientSecret.Value;
var WechatScope = Prop_WechatScope.Value;
var WechatRedirectUri = Prop_WechatRedirectUri.Value;
if (string.IsNullOrWhiteSpace(code) && string.IsNullOrWhiteSpace(jxwechat))
{
var host = _httpContext.Request.Scheme + "://" + _httpContext.Request.Host.ToString();
var redirect_uri = $"{host}/Wechat/Authorize";
var queryStrings = $"appid={WechatClientID}&redirect_uri={redirect_uri}&response_type=code&scope={WechatScope}&state={state}#wechat_redirect";
var redirectTo = string.Empty;
if (WechatScope.Equals("snsapi_login"))
{
redirectTo = Authorize_url2 + "?" + queryStrings;
}
else
{
redirectTo = Authorize_url + "?" + queryStrings;
}
return new RedirectResult(redirectTo);
}
else
{
var OAuthorizeResult = GetAccessToken(WechatClientID, WechatClientSecret, code, WechatScope);
var redirectTo = WechatRedirectUri + $"?id={state}&app_wechat={HttpUtility.UrlEncode(OAuthorizeResult)}";
return new RedirectResult(redirectTo);
}
}
private static string GetAccessToken(string client_id, string client_secret, string code, string scope)
{
var result = string.Empty;
using (var hc = new HttpClient())
{
var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={client_id}&secret={client_secret}&code={code}&grant_type=authorization_code";
result = hc.GetStringAsync(url).Result;
}
var responseJson = JsonConvert.DeserializeObject<JObject>(result);
#region 报错
if (responseJson["errcode"] != null && responseJson["errcode"].HasValues)
{
return responseJson["errcode"].Value<string>();
}
#endregion
#region 如果scopesnsapi_userinfo
if (scope.Equals(default_scope))
{
var access_token = responseJson["access_token"].Value<string>();
var openid = responseJson["openid"].Value<string>();
using (var hc = new HttpClient())
{
var url = $"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN";
result = hc.GetStringAsync(url).Result;
}
responseJson = JsonConvert.DeserializeObject<JObject>(result);
#region 报错
if (responseJson["errcode"] != null && responseJson["errcode"].HasValues)
{
return responseJson["errcode"].Value<string>();
}
#endregion
responseJson.Add("access_token", access_token);
return JsonConvert.SerializeObject(responseJson);
}
#endregion
//scope是snsapi_base
return result;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/sync-github/OAuthApp.git
git@gitee.com:sync-github/OAuthApp.git
sync-github
OAuthApp
OAuthApp
master

搜索帮助