• 微信小程序 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等)=>后端解密并登陆。


    完毕

  • 相关阅读:
    mulesoft 易错题汇总解析
    MATLAB中 tf2zpk函数用法
    git-secret:在 Git 存储库中加密和存储密钥(下)
    [附源码]计算机毕业设计基于Springboot校园招聘系统
    Spark SQL 从入门到精通 - Spark SQL 行转列、列转行案例
    面经汇总-社招-6年
    骰子游戏-第11届蓝桥杯Scratch选拔赛真题精选
    vue组件之间的传值方式
    【牛客刷题-SQL】SQL3 查询结果去重
    vue 2 与 vue3 获取模版引用 (ref)的区别
  • 原文地址:https://blog.csdn.net/zl18603543572/article/details/126596097