zoukankan      html  css  js  c++  java
  • uni APP 微信小程序获取授权的微信信息

    根据微信小程序开发文档,获取用户信息的接口有3个UserInfo,wx.getUserInfo,wx.getUserProfile。

    UserInfo比较老就不用了。wx.getUserInfo基础库版本 2.3.1 以后支持,但是必须用户授权 scope.userInfo。

    wx.getUserProfile 基础库 2.10.4 开始支持,获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo。

                            //用户授权
                            wx.authorize({
                                scope: 'scope.userInfo',
                                success(res) {
                                    wx.startRecord();
                                }
                            });

    //查看微信小程序接口是否可用

    console.log('wx.getUserProfile', wx.canIUse('getUserProfile'))

    wx.getUserInfo获取用户信息

                           // 获取微信用户信息
                            wx.getUserInfo({
                                success: function(res) {
                                    //用户信息
                                    const userInfo = res.userInfo;
                                    //性别 0:未知、1:男、2:女
                                    const {
                                        nickName,
                                        avatarUrl,
                                        gender,
                                        province,
                                        city,
                                        country
                                    } = userInfo;
                                    console.log(res)
                                    let userUrl = userInfo.avatarUrl;//微信头像
                                    let wxname = userInfo.nickName;//微信昵称
                                },
                                fail: res => {
                                    // 获取失败的去引导用户授权
                                    uni.showToast({
                                        title: '您需要授权,才能获取您的信息!'
                                    });
                                }
                            });

    wx.getUserProfile 获取用户信息,获取openid,思路如下wx.login获取code,然后调微信服务端接口

    'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + APP_SECRET + '&js_code=' +
                                    code + '&grant_type=authorization_code'
    就能得到openid和sessionKey。
    WXBizDataCrypt是官网js提供的解密用户信息的。通过上述接口就能获取sessionKey,然后可以解密微信用户加密的信息。
                    

            wx.login({
              success: function(data) {

              let code=data.code;
             //登录微信授权
                    wx.getUserProfile({
                        desc: '用于完善用户资料',
                        lang: 'zh_CN',
                        success: function(res) {
                            console.log('wx.getUserProfile=>用户允许了授权');
                            console.log(res.userInfo);
                            // console.log( res.rawData );  
                            console.log(res.signature);
                            console.log(res.encryptedData);
                            console.log(res.iv);
                            that.userUrl = res.userInfo.avatarUrl;
                            that.wxname = res.userInfo.nickName;
                                                    
                            
                            var sessionKey = '';
                            var ed = res.encryptedData;
                            var eiv = res.iv;
                            var appId = ''; //AppID(小程序ID)
                            var APP_SECRET = ''; //AppSecret(小程序密钥)
                            wx.request({
                                //获取openid接口
                                url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + APP_SECRET + '&js_code=' +
                                    code + '&grant_type=authorization_code',
                                data: {},
                                method: 'GET',
                                success: function(res) {
                                    console.log(res.data)
                                    that.userId = res.data.openid; //获取到的openid 
                                    uni.setStorage({
                                        key: "lsopenid",
                                        data: res.data.openid
                                    })
                                    sessionKey = res.data.session_key; //获取到session_key
                                    //that.getPhoneNumber(res);//得到res.encryptedData后,需要解码才能得到openId
                                    var pc = new WXBizDataCrypt(appId, res.data.session_key);
                                    console.log(pc)
                                    var data = pc.decryptData(ed,eiv);
                                    console.log(data)
                                }
                            });
                              
                            小程序端wx.getUserProfile()获取到userInfo,wx.login()获取到code,  
                            这两个传给后端,code通过code2session接口获取到unionid,openid,session_key等;  
                            原有的拿session_key解密encryptedData的逻辑不需要了,毕竟encryptedData也只是比userInfo多了openid和unionid。  
                            */
    
                        },
                        fail: function(res) {
                            console.log('wx.getUserProfile=>用户拒绝了授权');
                            console.log(res);
    
                        },
                    });
            }});
     

      

  • 相关阅读:
    JS中怎样获取当前日期的前一个月和后一个月的日期字符串
    JS中怎样将时间字符串转换成Date并比较大小
    Java中判断两个Date时间段是否有交集的方法
    gRPC中Java和node进行异构通信-互为客户端和服务端
    ffmpeg external libraries 下载地址
    libsvtav1 的 qp 和比特率对照表
    libsvtav1 AV1 编码速度比 libaom 大大提升
    ffmpeg windows 最新编译内部版本下载地址变更
    解开获取 aria2c 帮助信息的误区
    frei0r 过了好几年增加 aech0r 滤镜
  • 原文地址:https://www.cnblogs.com/feipengting/p/14685150.html
Copyright © 2011-2022 走看看