微信授权登录功能(未优化)

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

根据文档走四个流程:

目录

1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

5 附:检验授权凭证(access_token)是否有效


/**
 * 微信授权登录
 * @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);
        }
		
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值