文档章节

微信授权获取用户的openid和支付宝授权获取用户的userid

叫我老王好吗
 叫我老王好吗
发布于 2017/03/23 14:56
字数 3598
阅读 343
收藏 0

当一请求一个链接或者是扫描二维码时,会请求后台方法,当然对于微信和支付宝来说,大多数时候是扫

一、首先说微信:

1、首先会判断请求中是否有code和state参数,没有的话就是还未授权,这时候走红框内进行授权,附授权方法代码:

/**
	 * 
	 * @方法功能说明:微信授权
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:39:59 
	 * @param @param response
	 * @param @param url
	 * @param @param request  
	 * @return void 
	 * @throws
	 */
	public static void oauthResp(HttpServletResponse response,String url, HttpServletRequest request){
		String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
		try {
			reqUrl = URLEncoder.encode(reqUrl, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String _url = getWEXIN_USER_GETCODE(
				APPID, reqUrl, "code", "snsapi_base",
				"sn_b");//snsapi_base sn_b静默授权  snsapi_userinfo sn_u提示授权
		try {
			response.sendRedirect(_url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

对于oauthResp这个授权方法,核心就是请求微信的授权接口(

"https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";),这个接口需要公众号的appid,一个授权后重定向的路径redirect_uri,还有一个是scope,就是授权方式,分为静默授权和手动授权(感兴趣的自己研究,这里就不详细说了),其中redirect_uri一般就是你的后台method,此文中就是图片中所对应的方法,这样的目的在于它授权后会携带者code再去访问你的方法。

2、如果已经授权,就去获取openid,代码如下:

/**
	 * 
	 * @方法功能说明:获取微信用户的openid
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:29:35 
	 * @param @param code
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getOpenid(String code){
		String openid = "";
		String url = getWEXIN_USER_TOKEN(APPID,APPSECRET,code);
		String resp = httpsRequest(url, "GET", null);
		if(!resp.contains("errcode")){
			JSONObject object = JSONObject.parseObject(resp);
			openid = object.getString("openid");
		}
		return openid;
	}

获取openid,请求的是微信如下接口("https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";)这个接口同样需要公众号的appid,再加上公众号的appsecret,还有授权成功后获取的授权码code,最后的grant_type是固定值authorization_code。请求这个接口成功后就会获得openid。

二、然后支付宝,其实微信支付宝大概流程一样,区别就在于封装的参数和签名方式不同

1、对于支付宝授权,也是判断一个code,在支付宝中名字叫auth_code,如果auth_code不存在,就进行支付宝授权,支付宝授权方法如下:

/**
	 * 
	 * @方法功能说明:支付宝授权
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 下午6:43:12 
	 * @param @param response
	 * @param @param url
	 * @param @param request  
	 * @return void 
	 * @throws
	 */
	public static void zfboauthResp(HttpServletResponse response,String url, HttpServletRequest request){
		String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
		try {
			reqUrl = URLEncoder.encode(reqUrl, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String _url = getZFBOUATH(APP_ID, reqUrl, "auth_base");
		try {
			response.sendRedirect(_url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

支付宝授权请求的是支付宝的授权接口("https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL"),这个接口需要支付宝的appid和授权类型,同样也需要一个重定向的路径,这跟微信基本一样。

2、授权成功后,获取支付宝用户的user_id,先上代码:

/**
	 * 
	 * @方法功能说明:获取支付宝的userid
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 下午4:14:39 
	 * @param @param url
	 * @param @param request
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getZfbUserId(String auth_code){
		String userId = "";
		//组装参数
		HashMap<String,String> hashMap = new HashMap<String, String>();
		hashMap.put("app_id", APP_ID);
		hashMap.put("method", "alipay.system.oauth.token");
		hashMap.put("charset", "GBK");
		hashMap.put("sign_type", "RSA");
		hashMap.put("timestamp", DateUtils.getTime(new Date()));
		hashMap.put("grant_type", "authorization_code");
		hashMap.put("code", auth_code);
		hashMap.put("version", "1.0");
		String createLinkString = createLinkString(hashMap);
		String sign = RSA.sign(createLinkString, PRIVATE_KEY, "GBK");
		//RSA签名
		hashMap.put("sign", sign);
		String post;
		try {
			//请求支付宝接口
			post = HttpRequestsUtils.post(ZFB, hashMap, true);
			if(!post.contains("error_response")){
				JSONObject object = JSONObject.parseObject(post);
				String alipay_system_oauth_token_response = object.getString("alipay_system_oauth_token_response");
				if(alipay_system_oauth_token_response != null){
					JSONObject object2 = JSONObject.parseObject(alipay_system_oauth_token_response);
					if(object2 != null){
						userId = object2.getString("user_id");
					}	
				}
			}
			//得到结果
			System.out.println(userId);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return userId;	
	}

这与微信的区别有点大,封装的参数比较多,获取个userid就得封装这么多参数,也可能是支付宝的安全机制要求的较高吧,这里需要支付宝的appid;要请求的方法method,就是上面的alipay.system.oauth.token;编码charset,一般是GBK,也支持utf-8,根据自己的需要来;然后是签名类型sign_type,这个比较重要,支付宝用的签名方式是RSA,为什么安全性较高,也许就在这吧;然后是时间戳timestamp;然后是grant_type,获取用户信息时填写固定值authorization_code;然后是code,就是授权成功后获取到的那个auth_code,特别注意,请求这个接口时键名为code,而不是auth_code;最后是版本号version,写固定值1.0即可;封装好参数之后利用RSA进行签名,签名后将sign参数也封装到参数的map中,最后请求支付宝的接口("https://openapi.alipay.com/gateway.do")获取数据就ok了。

三、我已将上述功能封装为工具类,实在不懂的话就copy  and  paste , then  run:

1、支付请求工具类

package com.hc360.rhfgateway.web.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;
import com.hc360.rhfgateway.common.util.DateUtils;
import com.hc360.rhfgateway.common.util.HttpRequestsUtils;
import com.hc360.rhfgateway.web.util.alipay.RSA;


/**
 * 
 * @项目名称:rhfgateway
 * @类功能说明:支付请求工具类
 * @类修改者:
 * @修改日期:
 * @修改说明:
 * @公司名称:慧聪云信大数据科技有限公司
 * @作者:anyou
 * @创建时间:2017年3月8日 上午10:22:26
 * @版本:V1.0
 */
public class PayRequestUtil {

	private static ResourceBundle resb1 = ResourceBundle.getBundle("payapi");
	public static String WEXIN_USER_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
	public static String WEXIN_USER_GETCODE = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
	public static String ZFB = "https://openapi.alipay.com/gateway.do";
	public static String ZFBOUATH = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL";
	// APPID
	private static String APPID = resb1.getString("APPID");
	//APPSECRET
	private static String APPSECRET = resb1.getString("APPSECRET");
	//支付宝app_id
	private static String APP_ID = resb1.getString("app_id");
	//支付宝开发这私钥
	private static String PRIVATE_KEY = resb1.getString("private_key");
	//支付宝公钥
	private static String ALIPAY_PUBLIC_KEY = resb1.getString("alipay_public_key");
	
	/**
	 * 
	 * @方法功能说明:判断请求来自于什么支付客户端;wechat:微信,alipay:支付宝,baiduwallet:百度钱包,qq:qq钱包
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午10:44:15 
	 * @param @param request
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String payClient(HttpServletRequest request){
		String payType = "";
		String agent = request.getHeader("User-Agent").toLowerCase();
		if (agent.contains("micromessenger")) {
			payType = "wechat";	
		}else if(agent.contains("alipaydefined")){
			payType = "alipay";
		}else if(agent.contains("baiduwallet")){
			payType = "baiduwallet";
		}else if(agent.contains("qq")){
			payType = "qq";
		}
		return payType;
	}
	/**
	 * 
	 * @方法功能说明:https请求忽略证书
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:03:45 
	 * @param @param url
	 * @param @param method
	 * @param @param data
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String httpsRequest(String url, String method, String data) {
		// 创建SSLContext对象
		TrustManager[] tm = { new Webtrust() };
		try {
			SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
			sslContext.init(null, tm, new java.security.SecureRandom());
			SSLSocketFactory ssf = sslContext.getSocketFactory();

			URL _url = new URL(url);
			HttpsURLConnection conn = (HttpsURLConnection) _url
					.openConnection();
			conn.setSSLSocketFactory(ssf);

			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setUseCaches(false);
			conn.setRequestMethod(method);

			// 传送数据
			if (null != data) {
				OutputStream outputStream = conn.getOutputStream();
				// 注意编码格式
				outputStream.write(data.getBytes("UTF-8"));
				outputStream.close();
			}

			// 读取返回数据
			InputStream inputStream = conn.getInputStream();
			InputStreamReader inputStreamReader = new InputStreamReader(
					inputStream, "UTF-8");
			BufferedReader bufferedReader = new BufferedReader(
					inputStreamReader);
			String str = null;
			StringBuffer buffer = new StringBuffer();
			while ((str = bufferedReader.readLine()) != null) {
				buffer.append(str);
			}

			// 释放资源
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();
			inputStream = null;
			conn.disconnect();

			return buffer.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 
	 * @方法功能说明:获取微信用户token
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:06:53 
	 * @param @param appid
	 * @param @param secret
	 * @param @param code
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getWEXIN_USER_TOKEN(String appid,String secret,String code) {
		return WEXIN_USER_TOKEN.replace("APPID", appid).replace("SECRET", secret).replace("CODE", code);
	}
	/**
	 * 
	 * @方法功能说明:获取支付宝授权
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 下午3:52:37 
	 * @param @param app_id
	 * @param @param redirect_uri
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getZFBOUATH(String app_id,String redirect_uri, String scope) {
		return ZFBOUATH.replace("APPID", app_id).replace("ENCODED_URL", redirect_uri).replace("SCOPE", scope);
	}
	/**
	 * 
	 * @方法功能说明:获取code
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:38:32 
	 * @param @param appid
	 * @param @param redirect_uri
	 * @param @param response_type
	 * @param @param scope
	 * @param @param state
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getWEXIN_USER_GETCODE(String appid,String redirect_uri,String response_type,String scope,String state) {
		return WEXIN_USER_GETCODE.replace("APPID", appid).replace("REDIRECT_URI", redirect_uri).replace("RESPONSE_TYPE", response_type).replace("SCOPE", scope).replace("STATE", state);
	}
	/**
	 * 
	 * @方法功能说明:获取微信用户的openid
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:29:35 
	 * @param @param code
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getOpenid(String code){
		String openid = "";
		String url = getWEXIN_USER_TOKEN(APPID,APPSECRET,code);
		String resp = httpsRequest(url, "GET", null);
		if(!resp.contains("errcode")){
			JSONObject object = JSONObject.parseObject(resp);
			openid = object.getString("openid");
		}
		return openid;
	}
	/**
	 * 
	 * @方法功能说明:获取支付宝的userid
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 下午4:14:39 
	 * @param @param url
	 * @param @param request
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getZfbUserId(String auth_code){
		String userId = "";
		//组装参数
		HashMap<String,String> hashMap = new HashMap<String, String>();
		hashMap.put("app_id", APP_ID);
		hashMap.put("method", "alipay.system.oauth.token");
		hashMap.put("charset", "GBK");
		hashMap.put("sign_type", "RSA");
		hashMap.put("timestamp", DateUtils.getTime(new Date()));
		hashMap.put("grant_type", "authorization_code");
		hashMap.put("code", auth_code);
		hashMap.put("version", "1.0");
		String createLinkString = createLinkString(hashMap);
		String sign = RSA.sign(createLinkString, PRIVATE_KEY, "GBK");
		//RSA签名
		hashMap.put("sign", sign);
		String post;
		try {
			//请求支付宝接口
			post = HttpRequestsUtils.post(ZFB, hashMap, true);
			if(!post.contains("error_response")){
				JSONObject object = JSONObject.parseObject(post);
				String alipay_system_oauth_token_response = object.getString("alipay_system_oauth_token_response");
				if(alipay_system_oauth_token_response != null){
					JSONObject object2 = JSONObject.parseObject(alipay_system_oauth_token_response);
					if(object2 != null){
						userId = object2.getString("user_id");
					}	
				}
			}
			//得到结果
			System.out.println(userId);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return userId;	
	}
	/**
	 * 
	 * @方法功能说明:支付宝授权
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 下午6:43:12 
	 * @param @param response
	 * @param @param url
	 * @param @param request  
	 * @return void 
	 * @throws
	 */
	public static void zfboauthResp(HttpServletResponse response,String url, HttpServletRequest request){
		String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
		try {
			reqUrl = URLEncoder.encode(reqUrl, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String _url = getZFBOUATH(APP_ID, reqUrl, "auth_base");
		try {
			response.sendRedirect(_url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @方法功能说明:微信授权
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:39:59 
	 * @param @param response
	 * @param @param url
	 * @param @param request  
	 * @return void 
	 * @throws
	 */
	public static void oauthResp(HttpServletResponse response,String url, HttpServletRequest request){
		String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
		try {
			reqUrl = URLEncoder.encode(reqUrl, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String _url = getWEXIN_USER_GETCODE(
				APPID, reqUrl, "code", "snsapi_base",
				"sn_b");//snsapi_base sn_b静默授权  snsapi_userinfo sn_u提示授权
		try {
			response.sendRedirect(_url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @方法功能说明:获取初参数外的全地址路径
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:34:35 
	 * @param @param request
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getBaseUrl(HttpServletRequest request){
		String path = request.getContextPath();
		String url = "";
		String _port = ":"+request.getServerPort();
		if(_port.equals(":80")||_port.equals(":443"))_port = "";
		url = request.getScheme()+"://"+request.getServerName()+_port+path;
		return url;
	}
	/**
	 * 
	 * @方法功能说明:参数封装
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月8日 上午11:36:38 
	 * @param @param request
	 * @param @return  
	 * @return String 
	 * @throws
	 */
	public static String getUrlParameter(HttpServletRequest request){
		@SuppressWarnings("unchecked")
		Map<String, String[]> map = request.getParameterMap();
		String pul = "";
		if(map.size() > 0){
			pul += "?";
			for (String key : map.keySet()) {
				String value = map.get(key)[0];
				pul += key + "=" + value +"&";
			}
			pul = pul.substring(0, pul.length()-1);
		}
		return pul;
	}
	/**
	 * 
	 * @方法功能说明:把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
	 * @方法修改者:
	 * @修改日期:
	 * @修改说明:
	 * @作者:anyou
	 * @创建时间:2017年3月23日 下午12:35:17 
	 * @param @param params
	 * @param @return  
	 * @return String 
	 * @throws
	 */
    public static String createLinkString(Map<String, String> params) {

        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);

        String prestr = "";

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);

            if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
                prestr = prestr + key + "=" + value;
            } else {
                prestr = prestr + key + "=" + value + "&";
            }
        }

        return prestr;
    }
}

2、http请求工具类(这是我公司一个大牛封装的,牛的一比)

package com.hc360.rhfgateway.common.util;

import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * 
 * @ClassName: HttpRequestsUtils
 * @Description: http请求工具类
 * @author Qawine
 * @version v1.0
 * @date 2017年3月5日 下午5:37:26
 *
 */
public class HttpRequestsUtils {
	public static final String DEFAULT_CHARST = "GBK";

	/**
	 * 方法功能说明:http client post请求 创建:2016-8-11 by 朤朤先生 修改:日期 by 修改者 修改内容:
	 * 
	 * @参数: @param url @参数: @param params @参数: @return @参数: @throws
	 * IOException @return String @throws
	 */
	public static String httpsPost(String url, List<NameValuePair> params, boolean b) throws IOException {
		CloseableHttpClient httpclient = null;
		if (b)
			httpclient = defaultSSL();
		else
			httpclient = HttpClientBuilder.create().build();
		HttpPost httppost = new HttpPost(url);
		httppost.setEntity(new UrlEncodedFormEntity(params));
		CloseableHttpResponse response = httpclient.execute(httppost);
		HttpEntity entity = response.getEntity();
		String jsonStr = EntityUtils.toString(entity, DEFAULT_CHARST);

		httppost.releaseConnection();
		return jsonStr;
	}

	/**
	 * 方法功能说明:post 数据 创建:2016-8-11 by 朤朤先生 修改:日期 by 修改者 修改内容:
	 * 
	 * @参数: @param url @参数: @param map @参数: @return @参数: @throws
	 * IOException @return String @throws
	 */
	public static String post(String url, Map<String, String> map, boolean b) throws IOException {
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		if (map != null && map.size() > 0) {
			for (String key : map.keySet()) {
				params.add(new BasicNameValuePair(key, map.get(key)));
			}
		}
		return httpsPost(url, params, b);
	}

	/**
	 * 方法功能说明:post json或者XML数据 创建:2016-8-11 by 朤朤先生 修改:日期 by 修改者
	 * 修改内容: @参数: @param url @参数: @param data @参数: @param b true为xml false为json @参数: @return @return
	 * String @throws
	 */
	public static String postXMLorJson(String url, String data, boolean b) {
		String returnValue = "这是默认返回值,接口调用失败";
		CloseableHttpClient httpClient = HttpClients.createDefault();
		ResponseHandler<String> responseHandler = new BasicResponseHandler();
		try {
			// 第一步:创建HttpClient对象
			httpClient = HttpClients.createDefault();

			// 第二步:创建httpPost对象
			HttpPost httpPost = new HttpPost(url);

			// 第三步:给httpPost设置JSON格式的参数
			StringEntity requestEntity = new StringEntity(data, DEFAULT_CHARST);
			requestEntity.setContentEncoding(DEFAULT_CHARST);
			if (b)
				httpPost.setHeader("Content-type", "text/xml");
			else
				httpPost.setHeader("Content-type", "application/json");
			httpPost.setEntity(requestEntity);

			// 第四步:发送HttpPost请求,获取返回值
			returnValue = httpClient.execute(httpPost, responseHandler);
		} catch (Exception e) {
			e.printStackTrace();
		}

		finally {
			try {
				httpClient.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		// 第五步:处理返回值
		return returnValue;
	}

	/**
	 * @throws IOException @throws ClientProtocolException 方法功能说明:get请求
	 * 创建:2016-8-11 by 朤朤先生 修改:日期 by 修改者 修改内容: @参数: @param url @参数: @param
	 * b @参数: @return @return String @throws
	 */
	public static String get(String url, boolean b) throws IOException {
		String returnValue = "error";
		CloseableHttpClient httpclient = null;
		if (b)
			httpclient = defaultSSL();
		else
			httpclient = HttpClientBuilder.create().build();

		HttpGet httpget = new HttpGet(url);
		// 配置请求超时
		RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(50).setConnectTimeout(50)
				.setSocketTimeout(50).build();
		httpget.setConfig(requestConfig);
		CloseableHttpResponse response = httpclient.execute(httpget);
		HttpEntity entity = response.getEntity();
		returnValue = EntityUtils.toString(entity);//
		httpget.releaseConnection();
		return returnValue;
	}

	/**
	 * 方法功能说明:忽略证书 创建:2016-8-11 by 朤朤先生 修改:日期 by 修改者 修改内容: @参数: @return @return
	 * CloseableHttpClient @throws
	 */
	@SuppressWarnings("deprecation")
	private static CloseableHttpClient defaultSSL() {
		try {
			SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
				// 信任所有
				public boolean isTrusted(X509Certificate[] chain, String authType) {
					return true;
				}
			}).build();
			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
			return HttpClients.custom().setSSLSocketFactory(sslsf).build();
		} catch (KeyManagementException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (KeyStoreException e) {
			e.printStackTrace();
		}
		return HttpClients.createDefault();
	}
}

 

© 著作权归作者所有

叫我老王好吗

叫我老王好吗

粉丝 15
博文 39
码字总数 37401
作品 0
焦作
后端工程师
私信 提问
微信企业号登录授权Java实现获取员工userid根据userid换openid

微信企业号登录授权Java实现获取员工userid根据userid换openid 2016年1月8日 为了方便测试 。debug 建议大家搞个花生壳或者其他的可以映射公网IP的软件。 貌似涨价了8元一个。鄙人捡了个便宜...

小帅帅丶
2015/08/26
4.9K
1
第三方微信登录 | 静默授权与网页授权的实现

一:介绍 第三方登录有QQ、微信、微博、支付宝等等,如果现在自己的项目中实现这些登录,即可以使用友盟的sdk,也可以一个一个接入,各有各的有点,这里不做赘述。 今天和大家分享的是,在项...

展菲
2018/12/13
0
0
微信公众平台开发 OAuth2.0网页授权认证

一、什么是OAuth2.0 官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, m......

大道至精
2014/10/22
14.5K
1
微信公众号开发纪要(3)-获取用户openid

项目要求做扫描功能前需要进行用户绑定,不是所有的用户都能盘点扫描。这就要求先获取用户的openid(微信公众号的用户唯一凭证),然后与业务系统的用户信息进行验证和绑定。如何获取用户的ope...

pdzhsy
2018/07/13
0
0
微信公众号开发之网页中及时获取当前用户Openid及注意事项

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众...

micahel
2017/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
48分钟前
4
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
59分钟前
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
6
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部