微信回调用户信息并判断用户是否关注公众号

1.微信回调用户信息获取用户的openid

回调用户信息需要:

1)公众号的appid

2)服务器的域名或ip(需要调用接口来处理回调的数据)

3)url

private static final String url = "https://open.weixin.qq.com/connect/oauth2/authorize" +
            "?appid=" + appId + "&redirect_uri=http%3a%2f%2f" + "域名或ip" +
            "%2f%2fgetWechatUserInfo.do&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";

getWechatUserInfo.do

public void getWechatUserInfo(HttpSession session, HttpServletRequest req, HttpServletResponse resp, String code, String state) throws IOException{
        Map<String, Object> map1 = new HashMap<String, Object>();
        String url = " https://api.weixin.qq.com/sns/oauth2/access_token";
        if (code != null) {
            //第一步
            //通过code换取网页授权access_token
            String par = "appid=" + WXPayConfig.APPID + "&secret=" + WXPayConfig.APPSecret + "&code=" + code + "&grant_type=authorization_code";
            String result = HttpRequest.sendGet(url, par);
            System.out.println(result);
            //Map<String, String> map = WXPayUtil.json2map(result);
            Map<String, String> map = WXPayUtil.MapConversion(result);
            System.out.println("接收的Map" + map);//里面存着access_token和openid
            //第二步
            //拉取用户信息(需scope为 snsapi_userinfo)
            String surl = "https://api.weixin.qq.com/sns/userinfo";
            String access_token = map.get("access_token");
            log.info("access_token:" + access_token);
            String openid = map.get("openid");
            log.info("openid:" + openid);
            String spar = "access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
            String sresult = HttpRequest.sendGet(surl, spar);
            Map<String, String> smap = WXPayUtil.MapConversion(sresult);  //标准json格式的String转json
            log.info("用户信息log:" + smap);
    }
}

直接把url这个地址丢到微信里直接点击访问即可

2.获取access_token(建议把access_token、jsapi_ticket存入数据库)

public void GetAccessToken() {
        String url = "https://api.weixin.qq.com/cgi-bin/token";
        String param = "grant_type=client_credential&appid=" + WXPayConfig.APPID + "&secret=" + WXPayConfig.APPSecret;    //APPSecret公众号秘钥
        log.info("param" + param);
        String result = HttpRequest.sendGet(url, param);
        log.info("result=========================" + result);
        Map<String, String> NewMap = WXPayUtil.MapConversion(result);
        String AccessToken = NewMap.get("access_token");
        log.info("===================access_token============" + AccessToken);
    }

获取jsapi_ticket(jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取)

public void GetTicket(String access_token) {
        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
        String par = "access_token=" + access_token + "&type=jsapi";
        String ru = HttpRequest.sendGet(url, par);
        Map<String, String> map = WXPayUtil.MapConversion(ru);
        String ticket = map.get("ticket");
    }

验证是否关注公众号

public Object checkSubscribe(String openId) {
        String surl = "https://api.weixin.qq.com/cgi-bin/user/info";
        String access_token = wxData.getAccess_Token();//获取access_token
        String spar = "access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN";
        String sresult = HttpRequest.sendGet(surl, spar);
        Map<String, String> smap = WXPayUtil.MapConversion(sresult);  //标准json格式的String转json
        log.info("用户信息log:" + smap);
        return smap;
    }

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值