文档章节

java版微信支付(APP)--工具类

骚年_fighting
 骚年_fighting
发布于 2016/05/05 15:22
字数 924
阅读 69
收藏 5
public class HttpUtil {
 private static final Logger logger = Logger.getLogger(HttpUtil.class);
 /**
  * 发送https请求
  * 
  * @param requestUrl
  *            请求地址
  * @param requestMethod
  *            请求方式(GET、POST)
  * @param outputStr
  *            提交的数据
  * @return 返回微信服务器响应的信息
  */
 public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
  try {
   // 创建SSLContext对象,并使用我们指定的信任管理器初始化
   TrustManager[] tm = { new MyX509TrustManager() };
   SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
   sslContext.init(null, tm, new java.security.SecureRandom());
   // 从上述SSLContext对象中得到SSLSocketFactory对象
   SSLSocketFactory ssf = sslContext.getSocketFactory();
   URL url = new URL(requestUrl);
   HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
   conn.setSSLSocketFactory(ssf);
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setUseCaches(false);
   // 设置请求方式(GET/POST)
   conn.setRequestMethod(requestMethod);
   conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
   // 当outputStr不为null时向输出流写数据
   if (null != outputStr) {
    OutputStream outputStream = conn.getOutputStream();
    // 注意编码格式
    outputStream.write(outputStr.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 (ConnectException ce) {
   logger.error("连接超时:{}", ce);
  } catch (Exception e) {
   logger.error("https请求异常:{}", e);
  }
  return null;
 }
 
 /**
  * 发送https请求(双向认证)
  * 
  * @param requestUrl  请求路径
  * @param certPath    证书存放位置
  * @param paw         指定PKCS12的密码(商户ID)
  * @param reuqestXml  请求参数
  * @return            响应数据
  * @throws Exception
  */
 public static String httpsRequestCert(String requestUrl, String certPath,String paw, String reuqestXml) throws Exception {
  // 指定读取证书格式为PKCS12
  KeyStore keyStore = KeyStore.getInstance("PKCS12");
  // 读取本机存放的PKCS12证书文件
  FileInputStream instream = new FileInputStream(new File(certPath));
  try {
   // 指定PKCS12的密码(商户ID)
   keyStore.load(instream, paw.toCharArray());
  } finally {
   instream.close();
  }
  // Trust own CA and all self-signed certs
  SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, paw.toCharArray()).build();
  // 指定TLS版本
  SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,
    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
  // 设置httpclient的SSLSocketFactory
  CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
  StringBuffer buffer = new StringBuffer();
  try {
   HttpPost httpPost = new HttpPost(requestUrl);
   System.out.println("executing request" + httpPost.getRequestLine());
   StringEntity reqEntity = new StringEntity(reuqestXml);
   // 设置类型
   reqEntity.setContentType("application/x-www-form-urlencoded");
   httpPost.setEntity(reqEntity);
   CloseableHttpResponse response = httpclient.execute(httpPost);
   try {
    HttpEntity entity = response.getEntity();
    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    if (entity != null) {
     System.out.println("Response content length: " + entity.getContentLength());
     BufferedReader bufferedReader = new BufferedReader(
       new InputStreamReader(entity.getContent(), "utf-8"));
     String text;
     while ((text = bufferedReader.readLine()) != null) {
      buffer.append(text);
     }
    }
    EntityUtils.consume(entity);
   } finally {
    response.close();
   }
  } finally {
   httpclient.close();
  }
  return buffer.toString();
 }
 /**
  * 向指定URL发送GET方法的请求
  * 
  * @param url
  *            发送请求的URL
  * @param param
  *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  * @return URL 所代表远程资源的响应结果
  */
 public static String sendGet(String url, String param) {
  String result = "";
  BufferedReader in = null;
  try {
   String urlNameString = url + "?" + param;
   URL realUrl = new URL(urlNameString);
   // 打开和URL之间的连接
   URLConnection connection = realUrl.openConnection();
   // 设置通用的请求属性
   connection.setRequestProperty("accept", "*/*");
   connection.setRequestProperty("connection", "Keep-Alive");
   connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
   // 建立实际的连接
   connection.connect();
   // 获取所有响应头字段
   Map<String, List<String>> map = connection.getHeaderFields();
   // 遍历所有的响应头字段
   for (String key : map.keySet()) {
    System.out.println(key + "--->" + map.get(key));
   }
   // 定义 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally块来关闭输入流
  finally {
   try {
    if (in != null) {
     in.close();
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return result;
 }
 /**
  * 向指定 URL 发送POST方法的请求
  * 
  * @param url
  *            发送请求的 URL
  * @param param
  *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  * @return 所代表远程资源的响应结果
  */
 public static String sendPost(String url, String param) {
  PrintWriter out = null;
  BufferedReader in = null;
  String result = "";
  try {
   URL realUrl = new URL(url);
   // 打开和URL之间的连接
   URLConnection conn = realUrl.openConnection();
   // 设置通用的请求属性
   conn.setRequestProperty("accept", "*/*");
   conn.setRequestProperty("connection", "Keep-Alive");
   conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
   // 发送POST请求必须设置如下两行
   conn.setDoOutput(true);
   conn.setDoInput(true);
   // 获取URLConnection对象对应的输出流
   out = new PrintWriter(conn.getOutputStream());
   // 发送请求参数
   out.print(param);
   // flush输出流的缓冲
   out.flush();
   // 定义BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送 POST 请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally块来关闭输出流、输入流
  finally {
   try {
    if (out != null) {
     out.close();
    }
    if (in != null) {
     in.close();
    }
   } catch (IOException ex) {
    ex.printStackTrace();
   }
  }
  return result;
 }
}

© 著作权归作者所有

骚年_fighting
粉丝 0
博文 3
码字总数 1914
作品 0
朝阳
私信 提问
轻量级支付整合轻松嵌入任何系统 - pay-java-parent

轻量级支付模块集成(微信支付,友店扫码,支付宝,富友,银联, payoneer皮卡 )支付整合,app,扫码,即时到帐刷卡付条码付、支持多种支付类型多支付账户,支付与业务完全剥离,简单几行代码即可实...

egzosn
2017/02/17
16.2K
18
微信开发 Java SDK - Weixin Java Tools

微信开发 Java 开发工具包(SDK),支持包括微信支付、微信开放平台、小程序、企业号/企业微信、公众号(包括服务号和订阅号)等的后端开发。 本开发工具包基于chanjarster的同名SDK,增加了...

班纳睿
2016/12/22
119K
111
微信支付 SDK 惊爆漏洞:黑客可 0 元购买任意商品(转)

今天,国外安全社区 Seclists.Org 里一名白帽子披露了微信支付官方 SDK 存在严重的 XXE 漏洞,可导致商家服务器被入侵,且黑客可避开真实支付通道,用虚假的支付通知来购买任意产品。 值得一...

鉴客
2018/07/04
1K
3
互联网支付系统 roncoo-pay 2.0.0 版本发布

龙果开源支付系统 roncoo-pay已发布更新版本 更新说明: 1、更新支付宝sdk(alipay-sdk-java)版本,从20151021120052到20171201160035; 2、支付宝sdk添加本地引入,使用maven制作 alipay-sdk...

leslie52
2017/12/15
6.5K
2
POS机端应用无法调用微信支付宝支付,该怎么实现订单的支付

我有一个PHP的微信公众号内的商城,主要是做加油的。现在的业务场景是这样的:车主在平台上下了订单加完油产生一个二维码,加油工拿POS机上我们自己开发的应用去扫码核销该订单,核销完以后选...

披着羊皮的狼王
2018/12/04
675
1

没有更多内容

加载失败,请刷新页面

加载更多

手写RPC框架指北另送贴心注释代码一套

Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。 完整代码...

全菜工程师小辉
5分钟前
0
0
【Java】开发收货

简介 谨以此篇,记载开发过程中的一些tips。 编译器 【Shift + F6】可实现变量的联动修改。

Areya
21分钟前
2
0
DOM官方定义

DOM Document Object Model 文档对象模型 DOM的官方定义:W3C的DOM,可以使程序或者脚本(JS或AS\JScript),动态的访问或者操作文档的内容、结构、样式。 DOM只是一个标准,操作网页的标准。...

前端老手
27分钟前
4
0
IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词。需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱。另外,前端开发也会细分很多个开...

老码农的一亩三分地
29分钟前
4
0
可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部