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


    完毕

  • 相关阅读:
    基于Docker的网络安全靶场搭建
    istio学习(3)请求路由
    尚医通_第9章_部署医院模拟系统和搭建环境
    上海-华为合作伙伴之夜:创新领导力 | 竹云荣膺“华为全球杰出行业解决方案合作伙伴奖”
    YOLO对象检测算法也这么卷了吗——基于YOLOv8的人体姿态检测
    Pig的搭建和配置
    【pytorch】ResNet源码解读和基于迁移学习的实战
    记录--两行CSS让页面提升了近7倍渲染性能!
    我们在讲的 Database Plus,到底能解决什么样的问题?
    一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
  • 原文地址:https://blog.csdn.net/zl18603543572/article/details/126596097