首页 > 其他分享 >微信公众号网页登录,获取用户信息

微信公众号网页登录,获取用户信息

时间:2023-05-01 19:11:06浏览次数:42  
标签:code 网页 String 登录 url 微信 access token userinfo

0、参考

wechat登录前端代码.zip 下载
后端java代码 下载

1、接口信息配置

请填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证

URL=http://自己的域名/rest/WeChat/verify
Token=12345679

2、JS接口安全域名

域名=自己的域名

3、网页授权获取用户基本信息配置

网页服务>网页帐号>网页授权获取用户基本信息
授权回调页面域名=自己的域名

4、前端页面

获取用户信息,需点击确认

    $(function () {
        let appid = "appid的值";
        let redirect_uri = window.location.href;
        let scope = "snsapi_userinfo";  //snsapi_userinfo snsapi_base
        let code = getQueryString('code');

        if (code == null) {
            let url_authorize = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid
                + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=' + scope + '&state=123#wechat_redirect';
            console.log("url_authorize", url_authorize);
            window.location.href = url_authorize;
        } else {
            $.ajax({
                url: "http://自己的域名/rest/WeChat/userInfo", //要请求的后端地址
                type: "GET", //数据发送的方式(POST或者GET)
                data: { code: getQueryString('code') }, //需要传递的参数
                dataType: "json", //后端返回的数据格式
                success: function (result) {//ajax请求成功后触发的方法
                    console.log("userInfo", result); //result为响应内容
                },
                error: function () {//ajax请求失败后触发的方法
                    console.log('Send Request Fail..');
                }
            });
        }
    });
    function getQueryString(name) {
        // const url_string = "https://www.baidu.com/t.html?name=mick&age=20"; // window.location.href
        const url_string = window.location.href;
        const url = new URL(url_string);
        return url.searchParams.get(name);
    }

获取用户openid,静默

    $(function () {
        let appid = "appid的值";
        let redirect_uri = window.location.href;
        let scope = "snsapi_base";  //snsapi_userinfo snsapi_base
        let code = getQueryString('code');

        if (code == null) {
            let url_authorize = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid
                + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=' + scope + '&state=123#wechat_redirect';
            console.log("url_authorize", url_authorize);
            window.location.href = url_authorize;
        } else {
            $.ajax({
                url: "http://自己的域名/rest/WeChat/userBase", //要请求的后端地址
                type: "GET", //数据发送的方式(POST或者GET)
                data: { code: getQueryString('code') }, //需要传递的参数
                dataType: "json", //后端返回的数据格式
                success: function (result) {//ajax请求成功后触发的方法
                    console.log("userBase", result); //result为响应内容
                },
                error: function () {//ajax请求失败后触发的方法
                    console.log('Send Request Fail..');
                }
            });
        }
    });
    function getQueryString(name) {
        // const url_string = "https://www.baidu.com/t.html?name=mick&age=20"; // window.location.href
        const url_string = window.location.href;
        const url = new URL(url_string);
        return url.searchParams.get(name);
    }

5、后端代码

    @GetMapping("/userInfo")
    public Result userInfo(String code) {
        if (StringUtils.isBlank(code))
            return Result.error("code为空");
        Map<String, Object> cc22 = new LinkedHashMap<>();
        //点击链接直接返回过来的code,第二步获取access_token
        String format_url_access_token = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
        String url_access_token = String.format(format_url_access_token, APP_ID, APP_SECRET, code);
        String data_access_token = HttpUtil.get(url_access_token);
        JSONObject jsonObject_access_token = JSONObject.parseObject(data_access_token);

        cc22.put("jsonObject_access_token", jsonObject_access_token);
        String accessToken = jsonObject_access_token.getString("access_token");
        //用户唯一标识,后续用于微信支付
        String openId = jsonObject_access_token.getString("openid");
        //第三步可以不用,直接用第四步
        String format_url_userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN";
        String url_userinfo = String.format(format_url_userinfo, accessToken, openId);
        String data_userinfo = HttpUtil.get(url_userinfo);
        JSONObject jsonObject_userinfo = JSONObject.parseObject(data_userinfo);
        cc22.put("jsonObject_userinfo", jsonObject_userinfo);
        //这是返回的就是用户信息,这里就可以将用户信息解析。然后保存到数据库
        //还有要考虑的问题,就是每次或者看你要不要更新用户信息,比如用户姓名,头像
        //map.put("nickName", jsonObject_userinfo.getString("nickname"));
        //map.put("imgUrl", jsonObject_userinfo.getString("headimgurl"));
        return Result.OK(cc22);
    }

    @GetMapping("/userBase")
    public Result userBase(String code) {
        if (StringUtils.isBlank(code))
            return Result.error("code为空");
        //点击链接直接返回过来的code,第二步获取access_token
        //https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
        String format_url_access_token = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
        String url_access_token = String.format(format_url_access_token, APP_ID, APP_SECRET, code);
        String data_access_token = HttpUtil.get(url_access_token);
        JSONObject jsonObject_access_token = JSONObject.parseObject(data_access_token);
        return Result.OK(jsonObject_access_token);
    }

标签:code,网页,String,登录,url,微信,access,token,userinfo
From: https://www.cnblogs.com/kikyoqiang/p/17366854.html

相关文章

  • 微信支付——介入指引
    一、业务平台介绍:1.微信公众平台微信公众平台是微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。2.微信开放平台微信开放平台是商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。3.微信商户平台......
  • 关于Linux操作系统-OS等保要求配置-禁止root用户直接ssh登录
    在等保中,都会去要求查看sshd配置,看是否有禁止root用户直接ssh登录,此项一般也会作为一个强制要求安全配置项笔者这里的操作系统如下,对于Redhat7.x应该也是一样的,可以自行测试[qq-5201351@Localhost~]$cat/etc/redhat-releaseRedHatEnterpriseLinuxrelease8.1(Ootpa)......
  • B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能
    B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能@目录B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能每博一文案1.Cookie的概述2.session与Cookie之间的联系:3.Cookie的作用:4.Cookie的生成机理的原理:5......
  • 网页编辑器学习之xheditor
    因为工作需要就学习了一下网页编辑器方面的知识,我总结了一下,比较流行的网页编辑器有CKeditor或者也可以叫做fckeditor,我也动手做了实际的案例发现可以跑起来,就是那个上传的文件管理感觉不太好,所以看了一下csdn的编辑器用的是xheditor所以就在网上找了一下相关的知识。http://h5566h......
  • Gradio: 使用Python构建机器学习网页应用
    Gradio:用Python构建机器学习网页APPGradio是一个开源的Python库,用于构建演示机器学习或数据科学,以及web应用程序。使用Gradio,您可以基于您的机器学习模型或数据科学工作流快速创建一个漂亮的用户界面,让用户可以”尝试“拖放他们自己的图像、粘贴文本、录制他们自己的声音,并通......
  • 关于Linux操作系统OS账号最后一次登录时间的审计
    本文以RedHatEnterpriseLinuxrelease8.1(Ootpa)为例,应该也能适用于7.x版本的如果对操作系统中的账号审计,其中有一个项目可能会比较重要(尤其是对于个人账号),那就是最后一次登录的记录如果需要查看每一个OS账号的最后一次登录记录,可以使用lastlog命令[qq-5201351@localho......
  • 微信小程序-icon组件
    icon组件icon组件,想必大家都应该清楚这个是图标组件吧,在微信小程序当中,为我们提供了一套icon图标类型。?>icon的类型,有效值:success,success_no_circle,info,warn,waiting,cancel,download,search,clear我们就来看一下icon当中的属性值即可。属性?>type:icon的类型......
  • 【移动端网页布局】移动端网页布局基础概念 ⑤ ( 视网膜屏技术 | 二倍图概念 | 代码示
    文章目录一、视网膜屏技术二、二倍图概念三、代码示例一、视网膜屏技术PC端和早期的移动端网页中,CSS中配置的1像素对应的就是物理屏幕中的1像素;Retina视网膜屏幕技术出现后,将多个物理像素压缩到一块屏幕中,可以达到更高的分辨率,画面显示效果更好;下......
  • javaweb用户登录界面
    实验名称用户登录界面成绩评定所用仪器材料eclipsetomcatwin11实验目的或要求1.实验目的使用JSP实现用户登录验证。2.实验内容通过创建一个用户登录的页面,让用户输入正确的用户名、密码,并进行校验,若用户名和密码输入正确,则弹出您好,你的名字首字母,否则弹出用户名或密码错误,请重新输......
  • 威联通NAS使用Container搭建我的世界服务器,带网页管理面板
    QNAP使用LXC容器搭建Minecraft游戏服务器,带WEB管理面板Linux搭建我的世界服务器:https://blog.zeruns.tech/archives/584.htmlwindows搭建MC服务器教程:https://blog.zeruns.tech/archives/529.htmlMC开服交流群:966038270视频教程:https://www.bilibili.com/video/BV1Fv411471D/安卓安......