• 微信小程序 getUserProfile 获取用户信息 iv encryptedData 参数


    人生七十古来稀,十年少小,十年老弱,还有五十年,五十年再分成日夜,只有二十五年的风景,再加上刮风下雨,三灾六病,人这一辈子,所剩时间不多,不如好好写写代码

    效果

    在这里插入图片描述

    1 wxml 中定义的按钮
    <button  bindtap="toLogin"  
    			lang="zh_CN" open-type='getUserInfo'>立即登录
    button>
    
    • 1
    • 2
    • 3
    2 对应的 js 中调用 结合 login 方法获取 code

    我这里是在 进入页面时获取了 code

        getWxCode() {
            let that = this;
            wx.login({
                success: function (data) {
                    console.log(" wx.login ---success ")
                    that.setData({
                        wxCode: data.code
                    });
                }
            })
        },
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后在调用登录方法时直接使用的这个code

       toLogin(e) {
           this.getUserInfoFunction(e,this.data.wxCode);
       },
    
    • 1
    • 2
    • 3
    调用 getUserProfile 方法来获取微信的用户消息
    getUserInfoFunction(e,code){
            //获取微信用户信息
            wx.getUserProfile({
                desc: '用于完善资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
                success: (res) => {
                    //保存微信用户信息
                    wx.setStorageSync('user_info', res.userInfo)
                    let avatarUrl = res.userInfo.avatarUrl;
                    let nickName = res.userInfo.nickName;
                    let province = res.userInfo.province;
                    let country = res.userInfo.country;
                    let gender = res.userInfo.gender;
                    
                    let iv = res.iv;
                    let encryptedData = res.encryptedData;
                    let wxCode = code;
                    
                    //在这里去调用 后台接口
                    //后台接口会根据 iv encryptedData  wxCode 
                    //来获取 openID 以及获取用户的基本信息
    
                },
                fail: (err) => {
                    console.log('err', err);
                }
            });
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    调用 api.weixin.qq.com 接口来获取用户的 openId

    我这里是在 微信中调用的此api 接口,为了给大家演示效果,实际业务开发中,微信小程序中不可以调用此接口。

    在你的 java 服务接口 或者 php 服务接口中调用 此 api 即可获取到 openId

        let appid = "";
        let secret = "";
        let wxCode ="";
        wx.request({
            url: "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + wxCode + "&grant_type=authorization_code",
            success: (res) => {
                console.log(res);
                let session_key = res.data.session_key;
                let openid = res.data.openid;
        })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3 第一次登录出现解密失败 第二次登录就可以了

    引起的这个错误一般是 错误的流程:引导用户点击授权按钮(getUserProfile)=>调起授权(wx.getUserProfile)=>获取code(wx.login)=>请求后端、传输数据(code、iv等)=>后端解密并登陆。

    正确的流程(本文所述)正确的流程:获取code(wx.show)=>引导用户点击授权按钮(getUserProfile)=>调起授权(wx.getUserProfile)=>请求后端、传输数据(code、iv等)=>后端解密并登陆。


    完毕

  • 相关阅读:
    如何在OneFlow中新增算子
    Sentinel流控规则
    智慧城市数据大融合的几点想法
    图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用
    EcmaScript标准-导入与导出-js
    基于java《组成原理》课程智能组卷计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
    2022年下半年软考报名常见问题都在这里啦!
    JUC线程&线程池和锁面试题
    【数据结构】栈和队列
    今天步行数4000多
  • 原文地址:https://blog.csdn.net/zl18603543572/article/details/126596097