https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
根据文档走四个流程:
目录
2 第二步:通过code换取网页授权access_token
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
/**
* 微信授权登录
* @throws Exception
*/
@SuppressWarnings({ "unchecked", "unused" })
@Unauth
public void weiXinCode() throws Exception {
Gson gson = new Gson();
String code = getPara("code");
String appid = PropKit.get("weixin.appid");
String secret = PropKit.get("weixin.appSecret");
String grant_type = "authorization_code";
String url = PropKit.get("weixin.access_token");
//检验授权凭证(access_token)是否有效
//String access_token = (String) map3.get("access_token");
// String openid = (String) map3.get("openid");
String auth = PropKit.get("weixin.auth");
Map<String,String> map6 = new HipayLinkedHashMap<String,String>();
map6.put("access_token", (String) RedisCluster.use().get("access_token"+code));
map6.put("openid", (String) RedisCluster.use().get("openid"+code));
System.out.println(map6.toString()+"*******");
String returnStr6 = HttpUtil.sendHttpRMobPay(auth,map6.toString());
Map<String, Object> map7 = new HashMap<String, Object>();
map7 = gson.fromJson(returnStr6, map6.getClass());
if((Double)map7.get("errcode") == 0){
//第三步:刷新access_token(如果需要)
String url4 = PropKit.get("weixin.refresh_token");
String refresh_token = (String) RedisCluster.use().get("refresh_token"+code);
Map<String,String> map4 = new HipayLinkedHashMap<String,String>();
map4.put("appid", appid);
map4.put("grant_type", "refresh_token");
map4.put("refresh_token", refresh_token);
System.out.println(map4.toString()+"*******");
String returnStr4 = HttpUtil.sendHttpRMobPay(url4,map4.toString());
Map<String, Object> map5 = new HashMap<String, Object>();
map5 = gson.fromJson(returnStr4, map4.getClass());
//第四步:拉取用户信息(需scope为 snsapi_userinfo)
String access_token =(String) map5.get("access_token");
String openid = (String) map5.get("openid");
String lang = "zh_CN";
String url2 = PropKit.get("weixin.snsapi_userinfo");
Map<String,String> map2 = new HipayLinkedHashMap<String,String>();
map2.put("access_token", access_token);
map2.put("openid", openid);
map2.put("lang", lang);
System.out.println(map2.toString()+"*******");
String returnStr2 = HttpUtil.sendHttpRMobPay(url2,map2.toString());
Map<String, Object> retJson = getRetJsonMap();
retJson.put("returnStr", returnStr2);
retJson = gson.fromJson(returnStr2, retJson.getClass());
renderJson(retJson);
}else{
//第二步:通过code换取网页授权access_token
Map<String,String> map = new HipayLinkedHashMap<String,String>();
map.put("code", code);
map.put("appid", appid);
map.put("secret", secret);
map.put("grant_type", grant_type);
System.out.println(map.toString()+"*******");
String returnStr = HttpUtil.sendHttpRMobPay(url,map.toString());
Map<String, Object> map3 = new HashMap<String, Object>();
map3 = gson.fromJson(returnStr, map.getClass());
RedisCluster.use().set("access_token"+code,(String) map3.get("access_token"));
RedisCluster.use().set("openid"+code,(String) map3.get("openid"));
RedisCluster.use().set("refresh_token"+code,(String) map3.get("refresh_token"));
//第三步:刷新access_token(如果需要)
String url4 = PropKit.get("weixin.refresh_token");
String refresh_token = (String) map3.get("refresh_token");
Map<String,String> map4 = new HipayLinkedHashMap<String,String>();
map4.put("appid", appid);
map4.put("grant_type", "refresh_token");
map4.put("refresh_token", refresh_token);
System.out.println(map.toString()+"*******");
String returnStr4 = HttpUtil.sendHttpRMobPay(url4,map4.toString());
Map<String, Object> map5 = new HashMap<String, Object>();
map5 = gson.fromJson(returnStr4, map4.getClass());
//第四步:拉取用户信息(需scope为 snsapi_userinfo)
String access_token =(String) map5.get("access_token");
String openid = (String) map5.get("openid");
String lang = "zh_CN";
String url2 = PropKit.get("weixin.snsapi_userinfo");
Map<String,String> map2 = new HipayLinkedHashMap<String,String>();
map2.put("access_token", access_token);
map2.put("openid", openid);
map2.put("lang", lang);
System.out.println(map2.toString()+"*******");
String returnStr2 = HttpUtil.sendHttpRMobPay(url2,map2.toString());
Map<String, Object> retJson = getRetJsonMap();
retJson.put("returnStr", returnStr2);
retJson = gson.fromJson(returnStr2, retJson.getClass());
renderJson(retJson);
}
}