欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springBoot 微信登录(网页登录、小程序、app登录)

程序员文章站 2022-03-26 19:03:01
springBoot 登录网页登录在常量类里面加上微信开放平台的secretid和appid /** * 微信的secretid */ public static final String WX_SECRET = "asdasf"; /** * 微信的appid */ public static final String WX_APPID = "wfdweqfq";去调用微信的接口获取返回 //应该拿的是公众开...

springBoot 登录

网页登录

在常量类里面加上微信开放平台的secretid和appid

    /**
     * 微信的secretid
     */
    public static final String WX_SECRET = "asdasf";

    /**
     * 微信的appid
     */
    public static final String WX_APPID = "wfdweqfq";

去调用微信的接口获取返回

        //应该拿的是公众开放平台的secret 和appId
        String param = "appid=" + Constants.WX_APPID + "&secret=" + Constants.WX_SECRET + "&code=" + code + "&grant_type=authorization_code";
//        https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
        String s = HttpUtils.sendPost("https://api.weixin.qq.com/sns/oauth2/access_token", param);
        Object Object = JSONObject.parse(s);
        Map map = (Map) Object;
        //在此可获取access_token	接口调用凭证  expires_in	access_token接口调用凭证超时时间,单位(秒) refresh_token	用户刷新access_token
        //Union	授权用户唯一标识 scope	用户授权的作用域,使用逗号(,)分隔
        //目前只取Union和openid
        String accessToken = (String) map.get("access_token");
        String openId = (String) map.get("openid");
        String Unionparam = "access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN";
//        https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
        String Union = HttpUtils.sendPost("https://api.weixin.qq.com/sns/userinfo", Unionparam);
        Object UnionObject = JSONObject.parse(Union);
        Map unionmap = (Map) UnionObject;
        Map<String, String> Wxmap = new HashMap<>();
        Wxmap.put("openId", (String) unionmap.get("openid"));
        Wxmap.put("unionid", (String) unionmap.get("unionid"));
        Wxmap.put("headimgurl", (String) unionmap.get("headimgurl"));
        Wxmap.put("nickname", (String) unionmap.get("nickname"));
        Wxmap.put("sex",  unionmap.get("sex")+"");

如果不是跨平台 获取openid即可,如果需要跨平台,需要先将应用关联到微信开放平台,再走微信的第二个方法,带上accessToken和openid,返回全平台统一的unionid。

小程序

String param = "appid=" + Constants.MINIPROGRAM_APPID + "&secret=" + Constants.MINIPROGRAM_SECRET + "&js_code=" + code + "&grant_type=authorization_code";
        String s = HttpUtils.sendPost("https://api.weixin.qq.com/sns/jscode2session", param);
        Object Object = JSONObject.parse(s);
        Map map = (Map) Object;
        //在此可获取access_token	接口调用凭证  expires_in	access_token接口调用凭证超时时间,单位(秒) refresh_token	用户刷新access_token
        //Union	授权用户唯一标识 scope	用户授权的作用域,使用逗号(,)分隔
        //目前只取Union和openid
        Map<String, String> Wxmap = new HashMap<>();
        Wxmap.put("openId", (String) map.get("openid"));
        Wxmap.put("unionid", (String) map.get("unionid"));
        System.out.println((String) map.get("unionid"));
        return Wxmap;

小程序基本上同理,不过访问地址不一样,还有appid、secret、和code这三个不一样

app登录

app登录就有意思了,它不需要处理,前端就可以拿到unionId,可能会有安全泄露问题,目前想到的就前端加密,后端解密,现在没有实现,如果以后遇到,可以试试

本文地址:https://blog.csdn.net/weixin_43003720/article/details/111041229