时间:2022-08-10 15:57:01 | 来源:网站运营
时间:2022-08-10 15:57:01 来源:网站运营
开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
获取用户基本信息(包括UnionID机制)开发者可通过OpenID来获取用户基本信息。请使用https协议。
第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。
/// <summary>/// 微信登录注册(通过unionid来判断之前是否已经存在同一个工作平台注册过的账号,假如存在的话则关联起来,不存在注册一个新的账号)/// </summary>/// <param name="code">获取用户凭证换取用户网页授权</param>/// <param name="ReturnUrl">跳转地址</param>/// <returns></returns>public async Task<ActionResult> WxRegisterAndLogin(string code, string ReturnUrl = ""){try{//登录成功后跳转的地址string url=ReturnUrl;//通过Code以及微信appscrect和wxappid换取网页授权access_token和用户oppenidHttpClient webClient = new HttpClient();var jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +公众号appid+ "&secret=" + 公众号AppSecret + "&code=" + code + "&grant_type=authorization_code")).Content.ReadAsStringAsync();//异步获取的用户oppenid和access_tokenvar jsonOAuthorObj = JsonConvert.DeserializeObject(jsonString, new { access_token = "", openid = "" }.GetType());if (jsonOAuthorObj.openid == null){return Content(jsonString + "出现错误请重试");}var myuser = new user { WxOpenId = jsonOAuthorObj.openid }.SelectObject();//注册成功后直接登录,授权会判断是否有账户if (myuser == null){//拉取用户信息(需scope为 snsapi_userinfo),和unionid(只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段)jsonString = await (await webClient.GetAsync("https://api.weixin.qq.com/sns/userinfo?access_token=" + jsonOAuthorObj.access_token + "&openid=" + jsonOAuthorObj.openid + "&lang=zh_CN")).Content.ReadAsStringAsync();dynamic jsonObj = JsonConvert.DeserializeObject(jsonString, new { nickname = "", headimgurl = "", sex = "", openid = "", country = "", province = "", city = "",unionid=""}.GetType());//查询系统中是否存在unionid用户信息,若存在则更新当前用户openid,并直接登录,如果不存在的话则需要创建一个新的用户信息var isExistUserInfo=new user(){unionid=unionid }.SelectObject();if(isExistUserInfo!=null)//存在该用户记录{//更新公众号openid isExistUserInfo.WxOpenId=jsonObj.openid; isExistUserInfo.Update();//存在用户信息直接登录return Redirect(url);}else//不存在该用户记录{//创建用户int cUserId = new user { Wximage= jsonObj.headimgurl, WxNickName = jsonObj.nickname, WxOpenId = jsonObj.openid, Sex = Convert.ToInt32(jsonObj.sex), Country = jsonObj.country, Province = jsonObj.province, City = jsonObj.city,unionid=unionid }.Create();return RedirectToAction("WxRegister", "Login", new { ReturnUrl = url });}}else{//存在用户信息直接登录return Redirect(url);}}catch (Exception e){return View("MessageInfo", "", e.ToString());}}
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全
关键词:公众,用户,解决,移动,机制,通过