时间:2021-05-26
最近系统中要使用微信扫码登录,根据微信官方文档和网络搜索相关文献实现了。分享给需要的人,也作为自己的一个笔记。后端系统是基于ABP的,所以部分代码直接使用了abp的接口,直接拷贝代码编译不通过。
注册微信开放平台账号#
在微信开放平台注册,注意是开放平台不是公众平台,这里需要300元,然后申请网站应用。审核通过后获取到AppID和AppSecret以及登记的网站url。只有此url下的地址微信扫码后才能回调。
具体申请条件见官方文档。
生成登录二维码#
在vue登录页面嵌入登录二维码,根据官方文档,在页面中放入一个div元素,二维码就放在此元素中,注意var obj = new WxLogin必须放在mounted方法中执行,此时vue才会把dom元素初始化挂载到dom树,可以参见vue官方文档生命周期介绍。
<template> <div id="login" class="login"></div></template><script>export default { name: "WXLogin", data: function() { return {}; }, mounted() { this.wechatHandleClick(); document.getElementsByTagName("iframe")[0].height="320"; document.getElementsByTagName("iframe")[0].style.marginLeft="30px"; }, methods: { wechatHandleClick() { let ba64Css = "css代码base64编码";// 微信需要https的样式路径,这里将样式内容加密base64,可以避免使用https,如果你的网站是https的可以直接使用安官方文档使用css文件路径 const appid = "你第一步申请的Appid"; const redirect_uri = encodeURIComponent("http:/static/UserCss/WeChart.css" //自定义样式链接,第三方可根据实际需求覆盖默认样式。 href: "data:text/css;base64," + ba64Css // state: "", //参数,可带可不带 // style: "", //样式 提供"black"、"white"可选,默认为黑色文字描述 }); } }};</script>注册回调事件#
用户扫码后微信会回调访问前一步提供的redirect_uri,这里要监控微信回调,并用微信返回的code请求后端,在后端再去访问微信服务器获取token及用户openID
在回调页面中监控路由改变事件以监控微信回调(因为我的二维码和回调在同一个路由页面),如果有其他更好的方法请告诉我。
@Watch("$route") async RouteChange(newVal, oldVal) { await this.weixinRedirect(); } // 请求微信后台 async weixinRedirect() { let code = this.$route.query.code; let state = this.$route.query.state; if (code) { let wxTo = { code, state }; //请求后台 this.$http("*/WeixinRedirect",data:wxTo).then((token)=>{ //登录成功,把token写入cookie //跳转到主页 this.$router.replace({ path: "/", replace: true }); }).catch(error => { //保持当前页面 this.$router.replace({ path: "/login", replace: true }); }); } }}后端接收code请求token#
在appsettings.json中配置AppId和AppSecret
[HttpPost]public async Task<AuthenticateResultModel> WeixinRedirect(string code, string state){ if (code.IsNullOrEmpty()) { throw new UserFriendlyException("微信授权失败,请重新授权"); } var appid = configuration["Authentication:Wechat:AppId"]; var secret = configuration["Authentication:Wechat:AppSecret"]; var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code=[code]&grant_type=authorization_code"; var httpClient = httpClientFactory.CreateClient(); httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); httpClient.Timeout = TimeSpan.FromMinutes(3); var resstr = await httpClient.GetStringAsync(url); try{ //如果微信授权返回失败这里序列化不成功 var res = JsonSerializationHelper.DeserializeWithType<WeiXinAccess_tokenResponse>(resstr); }catch (Exception e) { throw new UserFriendlyException("获取微信access_token失败"); } if (res == null || res.openid.IsNullOrEmpty()) { throw new UserFriendlyException("获取微信access_token失败"); } var userId = //根据openID获取用户id,我们系统要求用户提前把微信和用户关联绑定,所以这里可以根据微信用户的openID获取到户农户id; //使用用户直接登录 if (!userId.IsNullOrEmpty()&&long.TryParse(userId, out long id)) { var user = await _userManager.GetUserByIdAsync(id); var loginResult = await _logInManager.LoginByUser(user); string accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity)); return new AuthenticateResultModel { AccessToken = accessToken, EncryptedAccessToken = GetEncrpyedAccessToken(accessToken), ExpireInSeconds = (int)_tokenConfiguration.Expiration.TotalSeconds, UserId = loginResult.User.Id }; } throw new UserFriendlyException("微信尚未绑定账号,请使用账号登录后绑定微信。");}WeiXinAccess_tokenResponse类型
public class WeiXinAccess_tokenResponse{ public string access_token { get; set; } public int expires_in { get; set; } public string refresh_token { get; set; } public string openid { get; set; } public string scope { get; set; } public string unionid { get; set; }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
申明:网上找了一个扫码登录代码然后结合帝国QQ登录插件整出帝国cms微信扫码登录插件为了避免我们新手第一次做微信扫码登录没有头绪,我们从头说起。步骤一、1,获取
微信网页版一定要扫码登录吗?现在微信有个手机版和网页版的,网页版是在电脑上面登录微信的,很多人疑惑电脑版的微信怎么登录,微信网页版一定要扫码登录吗?小编给大
微信第三方登录有两种方式:扫码登录(微信开放平台)和公众号登录(微信公众平台)扫码登录可以用于PC等跨平台应用,而公众平台必须在微信app内使用,且必须关注公众
微信扫码登录原理解析扫码登录是现在流行的登录方式,使用这种方式及其方便,而且安全扫码登录流程原理获取唯一的uuid,以及包含uid信息的二维码//获取uuidg
PC微信扫码登录近期做一个PC端微信扫码登录的需求,微信扫码有两种方式,一种是新开一个二维码页面,另一种是内嵌入产品网页。本次以内嵌二维码为例,具体怎样在页面中