最近项目需要用到微信一键授权登录到APP和小程序,在此记录一下.netcore是如何集成微信登录获取unionid以及openid的。
注意事项
OpenId
是一个用户对于一个小程序/公众号/APP的标识,开发者可以通过这个标识识别出用户;同一个人,使用不同的小程序,会留下不同的小程序OpenId
。获取小程序OpenId
无需用户操作和授权。
UnionId
是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体,开发者可通过UnionId
可以实现多个小程序、公众号、甚至APP之间的数据互通;正常情况下,微信生态中UnionId
是用户身份的唯一标识。所以,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过UnionId
来区分用户的唯一性。
准备工作
1.先去微信开放平台注册并绑定APP/小程序
2.在管理中心->应用详情页面获取APPID和Secert,如下图。
代码实现
获取OpenID给前端调用
/// <summary>
/// 获取微信unionid、openid
/// </summary>
/// <param name="jscode"></param>
/// <returns></returns>
[HttpPost(nameof(WxLogin))]
public async ValueTask<IActionResult> WxLogin(string jscode)
{
string smallAppId = ""; //你的APPID
string smallSecretKey = ""; //你的Secret
//去腾讯服务器换取openid
var url = $"https://api.weixin.qq.com/sns/jscode2session?appid={smallAppId}&secret={smallSecretKey}&js_code={jscode)}&grant_type=authorization_code";
var resp = await new HttpClient().GetStringAsync(url);
if (string.IsNullOrEmpty(resp))
{
return Json(new
{
Suc = false,
Msg = "获取失败"
});
}
else
{
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(resp);
//若有多端且共用一个主体,则用unionid
string unionid = json?.unionid ?? "";
//若只有一端,则用openid
string openid = json?.session_key ?? "";
string sessionKey = json?.openid ? ? "";
return Json(new
{
Suc = true,
Msg = "获取成功",
OpenId = openId,
UnionId = unionid,
SessionKey = sessionKey
});
}
}