微信服务号授权-多个回调域名

目录

 

项目背景

参考链接

具体操作

关于网页授权的两种scope的区别说明

 

参考代码


项目背景

公司有一个订阅号,需要根据这个订阅号做一个用户基本信息的获取。订阅号没有权限,只有服务号有此权限,于是就用服务号授权给订阅号。同时,由于服务号回调域名已被使用,只能通过配置多个回调域名。

 

参考链接

微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

网页授权多域名配置,大佬写的:https://github.com/HADB/GetWeixinCode 按着里面的文档配置,轻松获取code。

 

具体操作

第一步:下载大佬的get-weixin-code.html, 部署至微信授权回调域名的目录下,只要能够访问到就可以,就是在微信微信公众平台->接口权限->配置的授权回调页面域名,例如:www.abc.com

 

第二步:我们写的登录页面: http://www.xyz.com/wxlogin.html 需要获取微信授权, 那就引导用户点击,做个微信用户登录按钮,点击跳转到下面的链接。

http://www.abc.com/xxx/get-weixin-code.html?appid=XXXX&scope=snsapi_base&state=hello-world&redirect_uri=http%3A%2F%2Fwww.xyz.com%2wxlogin.html

 

第三步: 最终就会跳转到这样一个地址:http://www.xyz.com/wxlogin.html?code=XXXXXXXXXXXXXXXXX&state=hello-world,建议state改成时间戳之类的。我们用的VUE开发,create的时候调用后台接口将code传入

 

第四步:看微信授权回调的流程,通过code先获取accessToken和openId,然后再获取用户基本信息实现登录。

 

关于网页授权的两种scope的区别说明

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的

注意:openid是唯一的可以作为用户的用户唯一标识,用户必须关注公众号才能获取用户基本信息

 

参考代码

用了hutool

public class WxLoginController {
 
    private static final String APPID = " ";
    private static final String APPSECRET = " ";

    public static Map getAccessToken(String code) {
        Map map = null;
        try {
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + code + "&grant_type=authorization_code";
            String result = HttpUtil.get(url);
            System.out.println(result);
            map = JSON.parseObject(result, Map.class);
            System.out.println(map.get("access_token"));
            System.out.println(map.get("expires_in"));
            System.out.println(map.get("refresh_token"));
            System.out.println(map.get("openid"));
            System.out.println(map.get("scope"));
            System.out.println(map.get("errcode"));
            System.out.println(map.get("errmsg"));
            System.out.println("获取微信accessToken回调数据" + result);
        } catch (Exception e) {
            System.out.println("获取微信accessToken失败");
        }
        return map;
    }


    public static String refreshToken(String REFRESH_TOKEN) {
        try {
            String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + APPID + "&grant_type=refresh_token&refresh_token=" + REFRESH_TOKEN;
            String result = HttpUtil.get(url);
            System.out.println("获取微信accessToken回调数据" + result);
        } catch (Exception e) {
            System.out.println("获取微信accessToken失败");
        }
        System.out.println();
        return "";
    }


    /**
     * 获取用户信息
     *
     * @param accessToken
     * @param openId
     * @return
     */
    public static Map getUserInfoByCode(String accessToken, String openId) {
        Map map = null;
        try {
            String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId;
            String result = HttpUtil.get(url);
            map = JSON.parseObject(result, Map.class);
            System.out.println(result);
        } catch (Exception e) {
            System.out.println("获取微信信息失败");
        }
        return map;
    }
}

 

你可能感兴趣的:(微信服务号授权-多个回调域名)