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;
}