uni-app 微信小程序授权登录

1.appID配置

在manifest.json中输入申请的微信小程序id

 

 

 2.获取用户信息

可以使用uni.getUserProfile请求用户授权获取用户信息, 也可以使用uni.getUserInfo获取

 

 

 授权成功后获取到的用户信息在userInfo中:

 

 

 

uni.getUserProfile({
                    desc: '123',
                    lang: 'zh_CN',
                    success: res => {    
                                   console.log(res)
                                }
                            })        

3.调用登录api

使用uni.login方法,provider参数输入'weixin',成功的返回值中如果errMsg="login:ok" 代表成功,

微信小程序端会返回一个code字符串

 

 

 4.使用获取到的code请求微信登录接口,获取 openid 和 session_key

 

 

 

请求微信官方文档中的jscode2Session接口:

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

替换为自己的参数,appId和Secret为申请微信小程序时获取的AppID和appSecret,js_code为刚才uni.login获取到的code,最后一个参数为固定值‘authorization_code’

调用成功后,会获取到该用户的openId,唯一标识微信用户

 

 

 

5.绑定用户 实现登录

获取到微信用户的唯一id后,就可以绑定至自己系统中的用户,我的做法是在用户表中加入weixinId字段,跳转至自己的用户绑定界面,如果用户选择绑定微信,则更新该行用户数据的weixinId。下次用户使用微信登录时,如果通过openId能够查询到一条用户数据,说明已经绑定,则登录该用户

完整代码:

uni.getUserProfile({
                    desc: '123',
                    lang: 'zh_CN',
                    success: res => {
                        //拉取用户成功,调用登录
                        uni.login({
                            provider: 'weixin',
                            success: res => {
                                //console.log(res);
                                if (res.errMsg == "login:ok") {
                                    this.code = res.code;
                                    //请求后端接口换取 openid 和 session_key,这里放到后端去请求code2Session接口,将返回的openid和sessionkey再返回给前端                     

                        uni.request({
                        url: 'WebService/xxxxxxxx/GetWxOpenId',
                        data: {
                          code: this.code
                          }
                        }).then((res)=>{

                        //获取到 openid 和 session_k后,自己的逻辑

                          console.log(res.openId);
                          console.log(res.session_key);

                        //DoSomeThing.................

                        })

                                } else {

                                    uni.showModal({
                                        title: '登录失败',
                                        content: '系统异常,请联系管理员'
                                    });
                                }
                            }
                        })

                    },
                    fail: faleres => {
                        console.log(faleres);
                        uni.hideLoading();
                    }
                })

 

posted @ 2021-06-29 11:41  陈鹏昱Chen  阅读(7339)  评论(0编辑  收藏  举报