最近c#项目需要用到微信一键授权登录到APP和小程序,在此记录一下.netcore是如何集成微信登录获取unionid以及openid的,顺便说一下微信unionidopenid之间的区别

注意事项

  • OpenId 是一个用户对于一个小程序/公众号/APP的标识,开发者可以通过这个标识识别出用户;同一个人,使用不同的小程序,会留下不同的小程序 OpenId 。获取小程序 OpenId 无需用户操作和授权。
  • UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体,开发者可通过 UnionId 可以实现多个小程序、公众号、甚至APP之间的数据互通;正常情况下,微信生态中 UnionId 是用户身份的唯一标识。所以,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionId 来区分用户的唯一性。

微信openip和unionid的区别

准备工作

  • 先去微信开放平台注册并绑定APP/小程序
  • 在管理中心->应用详情页面获取APPIDSecertKey,如下图。
    c# 获取微信APPID

代码实现

        /// <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
                });
            }
        }
最后修改:2022 年 09 月 30 日
如果觉得我的文章对你有用,请随意赞赏