zoukankan      html  css  js  c++  java
  • 微信维护access_token

    微信维护access_token

    package com.weixin.ys.utils;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.weixin.ys.constants.Constants;
    import com.weixin.ys.entity.TemplateData;
    import com.weixin.ys.entity.TemplateMessage;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import javax.net.ssl.*;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    public class AccessTokenCache {
    	//主动调用的access_token
    	public static String access_token;
    	//主动调用的请求时间
    	public static Date access_token_date;
    	//token的有效时间,默认7200,用于判断是否超时,考虑网络延迟是的减小
    	public static long accessTokenInvalidTime=7200L;
    
    
    	/**
    	 * @return
    	 */
    	public static String getTokenFromWx(){
    		String token="";
    		//判断当前已有access_token是否有效
    		if(null==access_token||"".equals(access_token)||(new Date().getTime()-access_token_date.getTime())>=(accessTokenInvalidTime-200L)) {
    
    			String httpsResponse = getHttpsResponse("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + Constants.APPID + "&secret=" + Constants.APPSECRET, null);
    
    			System.out.println(httpsResponse);
    
    			if(httpsResponse.contains("access_token"))
    			{
    				JSONObject json = JSON.parseObject(httpsResponse);
    				accessTokenInvalidTime=Long.valueOf(json.getInteger("expires_in"));
    				access_token=json.getString("access_token");
    				access_token_date=new Date();
    			}
    		}
    		return access_token;
    	}
    
    
    
    	public static String getHttpsResponse(String hsUrl, String requestMethod) {
    		URL url;
    		InputStream is = null;
    		String resultData = "";
    		try {
    			url = new URL(hsUrl);
    			HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
    			TrustManager[] tm = {xtm};
    
    			SSLContext ctx = SSLContext.getInstance("TLS");
    			ctx.init(null, tm, null);
    
    			con.setSSLSocketFactory(ctx.getSocketFactory());
    			con.setHostnameVerifier(new HostnameVerifier() {
    				@Override
    				public boolean verify(String arg0, SSLSession arg1) {
    					return true;
    				}
    			});
    
    
    			con.setDoInput(true); //允许输入流,即允许下载
    
    			//在android中必须将此项设置为false
    			con.setDoOutput(false); //允许输出流,即允许上传
    			con.setUseCaches(false); //不使用缓冲
    			if(null!=requestMethod && !requestMethod.equals("")) {
    				con.setRequestMethod(requestMethod); //使用指定的方式
    			}
    			else{
    				con.setRequestMethod("GET"); //使用get请求
    			}
    			is = con.getInputStream();   //获取输入流,此时才真正建立链接
    			InputStreamReader isr = new InputStreamReader(is);
    			BufferedReader bufferReader = new BufferedReader(isr);
    			String inputLine = "";
    			while ((inputLine = bufferReader.readLine()) != null) {
    				resultData += inputLine + "
    ";
    			}
    
    			Certificate[] certs = con.getServerCertificates();
    
    			int certNum = 1;
    
    			for (Certificate cert : certs) {
    				X509Certificate xcert = (X509Certificate) cert;
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return resultData;
    	}
    
    	static X509TrustManager xtm = new X509TrustManager() {
    		@Override
    		public X509Certificate[] getAcceptedIssuers() {
    			// TODO Auto-generated method stub
    			return null;
    		}
    
    		@Override
    		public void checkServerTrusted(X509Certificate[] arg0, String arg1)
    				throws CertificateException {
    			// TODO Auto-generated method stub
    
    		}
    
    		@Override
    		public void checkClientTrusted(X509Certificate[] arg0, String arg1)
    				throws CertificateException {
    			// TODO Auto-generated method stub
    
    		}
    	};
    
    }
    
    
  • 相关阅读:
    fstab是什么?被谁用?怎么写?
    一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)
    Ubuntu下doxygen+graphviz使用概录
    记录Ubuntu下使用docker使用
    hidraw设备简要分析
    一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img
    bootrom/spl/uboot/linux逐级加载是如何实现的?
    Linux uevent分析、用户接收uevent以及mdev分析
    sched_yield()和nanosleep()对进程调度的影响
    Linux Thermal Framework分析及实施
  • 原文地址:https://www.cnblogs.com/AngeLeyes/p/10233944.html
Copyright © 2011-2022 走看看