H5之微信授权登陆(uniapp网页版微信授权登录)

    技术2025-06-11  45

    今天来复盘代码了 不然这个月过完 我可能脑子里又啥都不剩了 感觉自己跟个金鱼脑一样 十分沧桑 1.首先 要做微信授权登录 你的有一个微信公众号 因为授权登录要配置APPID 以及网页授权域名

    这里的网页授权域名真的让我栽了好多的坑一言难尽 啥也不说了 直接上图 公众号的开发 —>基本配置中设置 **接下来在公众号的开发 —>接口权限中设置域名 ** 这个域名一定要正确 而且是安全域名 因为不仅代码放在上面 微信授权回调的域名也是这个

    在网页服务中的 页面授权用户基本信息中设置 一共可以设置两个 一个开发环境 一个测试环境

    设置完就可以开发了 开发前建议看一变官方文档 当然如果没看懂 可以多看几遍 链接我放在这里了 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#0

    然后就是页面了

    因为后期我得代码都带了token请求头 所以我写了一个跳转页面

    在这个界面拉起授权 授权成功获取到信息之后在跳转到 首页 (ps:我把这个页面放在了pages.json)的第一个 这样一进来就能授权了

    废话不多说上代码:

    对了请注意下面的那个拉取基本信息的链接中的重定向路径和appid被我隐藏了 请大家自己配置 将URL 及 APPID 替换成自己的即可 至于如何获取请看上面 上面配置的域名就是这里重定向的路径

    跳转界面springboard.vue

    <template> <view class="springboard"> <view class=""> code:{{res}} </view> <view class=""> access_token接口:{{result}} </view> <view class=""> access_token :{{access_token}} <view class=""> openid:{{openid}} </view> </view> <view class=""> 用户信息 {{userInfo}} </view> <!-- 跳板页面 这个界面主要用来 获取缓存的信息 如果没有缓存的信息则跳转去授权 如果有直接跳转去商城界面--> </view> </template> <script> export default { data() { return { src:'', result:'', option:'', res:'', userInfo:'', access_token:'', openid:'', index:0 }; }, methods:{ getpower() { let url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect" window.location.href = url }, sendCode(code){ uni.showToast({ title:code }) uni.request({ url: 'XXXXXXX/login/login_controller/access_token', method:'POST', data: { code: code }, success: (res) => { console.log(res.data); this.result = res.data this.access_token = this.result.data.access_token this.openid = this.result.data.openid uni.request({ url: 'XXXXXXX/login/login_controller/access_user', //仅为示例,并非真实接口地址。 method:'POST', data: { access_token:this.access_token, openid: this.openid }, success: (respones) => { this.userInfo = respones console.log(res.respones); } }); } }); }, }, onLoad(option) { this.option = option if (option.code == null) { this.getpower() } else { this.res = option.code // uni.showToast({ // title:option.code // }) this.sendCode(option.code) } } } </script> <style lang="less" scoped> .springboard{ height: 99vh; position: relative; text-align: center; background-size: cover; // background-image: url('http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200703/20200703/1593768723d3eb9a9233e52948740d7eb8c3062d14.jpg'); // background-image: url('http://zons.oss-cn-shenzhen.aliyuncs.com/upload/20200703/20200703/1593768995d3eb9a9233e52948740d7eb8c3062d14.jpg'); } .LoginBtn{ width: 50%; border: 1px solid #409eff; padding:20rpx ; display: inline-block; background-color: #409eff ; color: #fff; border-radius: 10rpx; } </style>

    这里说明一下 做授权的时候 无法在线测试 就是说本地的代码无法测试 必须发包放到服务器上测试

    所以我把返回值都展示在页面上就知道接口是否有问题了 后期自行屏蔽即可

    另外踩了一个巨坑 就是微信授权返回40029 code码失效的问题 查了很多资料 也设置了 好几种方法

    最后根据自身情况就是 第一 发包以后到手机端测试 或者在微信开发者工具中测试 注意 就算是微信开发者工具中测试也是跑的线上的代码 其次为了防止发生302不稳定跳转 防止code码失效 我添加了connect_redirect=1

    踩坑二:如果在微信开发者工具中运行时出现 response_type 参数错误 那么就是拉起授权的链接有问题了 请重新配置

    踩坑三 后端的接口配置的使用到的APPID 要与前端一致

    最后说一下两个接口

    第一个接口时获取到code码以后 将code码传给后端 后端 用code码获取到 openID 然后可以根据 openID 获取到用户个人信息

    这里第二个接口就是根据第一个接口的返回值 获取用户个人信息的 抓到用户信息代表授权成功了 **注意注意注意!!!**请求要使用post

    好啦 到这里基本就讲解完毕了 下一篇在具体讲下 踩到的坑以及几种解决方法

    希望对大家有用

    Processed: 0.010, SQL: 9