`

java请求https

 
阅读更多
// 这是微信的请求发红包的接口,需要下载秘钥文件的

package com.wx.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
import java.util.UUID;

import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class SendRedBagUtils {
	private static Properties prop = new Properties();
	static {
		try {
			// 读取属性文件a.properties
			InputStream in = SendRedBagUtils.class
					.getResourceAsStream("/redBagConfig.properties");
			BufferedReader bf = new BufferedReader(new    InputStreamReader(in)); 
			prop.load(bf);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	// 全局数组
	private static final String mchId = prop.getProperty("mchId"); // 商户号
	private static final String wxappid = prop.getProperty("wxappid");
	private static final String nickName = prop.getProperty("nickName");// 提供方名称
	private static final String sendName = prop.getProperty("sendName");// 商户名称
	private static final String totalAmount = prop.getProperty("totalAmount"); // 付款金额
	private static final String minValue = prop.getProperty("minValue");// 最小红包金额
	private static final String maxValue = prop.getProperty("maxValue");// 最大红包金额
	private static final String totalNum = prop.getProperty("totalNum");// 红包发送人数
	private static final String wishing = prop.getProperty("wishing");// 祝福语
	private static final String clientIp = prop.getProperty("clientIp");// 调用接口的地址ip
	private static final String actName = prop.getProperty("actName");// 活动名字
	private static final String remark = prop.getProperty("remark");// 备注
	private static final String actId = prop.getProperty("actId");// 活动ID
	private static final String key = prop.getProperty("key");// 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

	// 发送红包的方法 URLEncoder.encode("", "UTF-8")
	public static void sendRedEn(HttpServletRequest request, String reOpenid)
			throws Exception {
		// 存放键值对的map
		HashMap<String, String> hm = getSign(reOpenid);
		// 设置请求参数
		StringBuffer sb = new StringBuffer();
		sb.append("<xml>");
		sb.append("<sign><![CDATA[" + hm.get("sign") + "]]></sign>");
		sb.append("<mch_billno><![CDATA[" + hm.get("mch_billno")
				+ "]]></mch_billno>");
		sb.append("<mch_id><![CDATA[" + hm.get("mch_id") + "]]></mch_id>");
		sb.append("<wxappid><![CDATA[" + hm.get("wxappid") + "]]></wxappid>");
		sb.append("<nick_name><![CDATA[" + hm.get("nick_name")
				+ "]]></nick_name>");
		sb.append("<send_name><![CDATA[" + hm.get("send_name")
				+ "]]></send_name>");
		sb.append("<re_openid><![CDATA[" + hm.get("re_openid")
				+ "]]></re_openid>");
		sb.append("<total_amount><![CDATA[" + hm.get("total_amount")
				+ "]]></total_amount>");
		sb.append("<min_value><![CDATA[" + hm.get("min_value")
				+ "]]></min_value>");
		sb.append("<max_value><![CDATA[" + hm.get("max_value")
				+ "]]></max_value>");
		sb.append("<total_num><![CDATA[" + hm.get("total_num")
				+ "]]></total_num>");
		sb.append("<wishing><![CDATA[" + hm.get("wishing") + "]]></wishing>");
		sb.append("<client_ip><![CDATA[" + hm.get("client_ip")
				+ "]]></client_ip>");
		sb.append("<act_name><![CDATA[" + hm.get("act_name") + "]]></act_name>");
		sb.append("<act_id><![CDATA[" + hm.get("act_id") + "]]></act_id>");
		sb.append("<remark><![CDATA[" + hm.get("remark") + "]]></remark>");
		sb.append("<nonce_str><![CDATA[" + hm.get("nonce_str")
				+ "]]></nonce_str>");
		sb.append("</xml>");
		System.out.println(sb.toString());
		System.setProperty("proxyHost", "proxy.zte.com.cn");
		System.setProperty("proxyPort", "80");
		System.setProperty("proxyUser", "0236000061");
		System.setProperty("proxyPassword", "lijielove520!");

		KeyStore keyStore = KeyStore.getInstance("PKCS12");
		String realPath = request.getSession().getServletContext()
				.getRealPath("")
				+ File.separator + "file";
		FileInputStream instream = new FileInputStream(new File(realPath
				+ File.separator + "apiclient_cert.p12"));
		try {
			keyStore.load(instream, mchId.toCharArray());
		} finally {
			instream.close();
		}

		// Trust own CA and all self-signed certs
		SSLContext sslcontext = SSLContexts.custom()
				.loadKeyMaterial(keyStore, mchId.toCharArray()).build();
		// Allow TLSv1 protocol only
		SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
				sslcontext, new String[] { "TLSv1" }, null,
				SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

		CloseableHttpClient httpclient = HttpClients.custom()
				.setSSLSocketFactory(sslsf).build();

		HttpPost httppost = new HttpPost(
				"https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack");
		StringEntity entity = new StringEntity(sb.toString(), "utf-8");
		httppost.setEntity(entity);
		HttpResponse response = httpclient.execute(httppost);
		HttpEntity resEntity = response.getEntity();
		if (resEntity != null) {
			String result = EntityUtils.toString(resEntity);
			System.out.println(result);
		}
	}

	/**
	 * 获取32随机码
	 * 
	 * @return
	 */
	public static String getRand() {
		String uuid = UUID.randomUUID().toString();
		uuid = uuid.replaceAll("-", "");
		return uuid;
	}

	/**
	 * 获取商户订单号 mch_id+yyyymmdd+10位一天内不能重复的数字。
	 * 
	 * @param args
	 */
	public static String getMchBillno(String mchId) {
		StringBuffer sb = new StringBuffer();
		sb.append(mchId);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		String time = sdf.format(new Date());
		sb.append(time);
		// 获取10位不重复数据
		String rand = getRand();
		rand = rand.substring(0, 10);
		sb.append(rand);
		return sb.toString();
	}

	/**
	 * 获取sign值
	 * 
	 * @param args
	 */
	public static HashMap<String, String> getSign(String reOpenid) {
		HashMap<String, String> hm = new HashMap<String, String>();
		ArrayList<String> kl = new ArrayList<String>();
		// 随机数
		String nonceStr = getRand();
		hm.put("nonce_str", nonceStr);
		kl.add("nonce_str");
		// 商户号
		hm.put("mch_id", mchId);
		kl.add("mch_id");
		// 商品订单号
		String mchBillno = getMchBillno(mchId);
		hm.put("mch_billno", mchBillno);
		kl.add("mch_billno");
		// 公众账号appid
		hm.put("wxappid", wxappid);
		kl.add("wxappid");
		// 提供方名称
		hm.put("nick_name", nickName);
		kl.add("nick_name");
		// 商户名称
		hm.put("send_name", sendName);
		kl.add("send_name");
		// 接受红包的用户openid
		hm.put("re_openid", reOpenid);
		kl.add("re_openid");
		// 付款金额
		hm.put("total_amount", totalAmount);
		kl.add("total_amount");
		// 最小红包金额
		hm.put("min_value", minValue);
		kl.add("min_value");
		// 最大红包金额
		hm.put("max_value", maxValue);
		kl.add("max_value");
		// 红包发送人数
		hm.put("total_num", totalNum);
		kl.add("total_num");
		// 祝福语
		hm.put("wishing", wishing);
		kl.add("wishing");
		// 调用接口的地址ip
		hm.put("client_ip", clientIp);
		kl.add("client_ip");
		// 活动名字
		hm.put("act_name", actName);
		kl.add("act_name");
		// 备注
		hm.put("remark", remark);
		kl.add("remark");
		// 活动ID
		hm.put("act_id", actId);
		kl.add("act_id");
		// 排序
		String[] kls = kl.toArray(new String[] {});
		Arrays.sort(kls);
		// 拼接处待加密的String
		StringBuffer sb = new StringBuffer();
		for (String k : kls) {
			sb.append(k);
			sb.append("=");
			sb.append(hm.get(k));
			sb.append("&");
		}
		// 把stringA与上key
		String stringSignTemp = sb.toString() + "key=" + key;
		System.out.println(stringSignTemp);
		// 进行MD5加密然后转为大写
		String sign = DigestUtils.md5Hex(stringSignTemp);
		hm.put("sign", sign.toUpperCase());
		return hm;
	}
}
分享到:
评论

相关推荐

    Https请求工具类,Java实现http请求,https请求

    Https请求工具类,Java实现http请求,https请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用...

    Java发https请求证书问题

    ### Java 发送 HTTPS 请求时遇到证书问题解析 在进行网络通信的过程中,HTTPS 协议由于其安全性被广泛应用。本文将围绕“Java 发送 HTTPS 请求证书问题”这一主题展开讨论,通过对给定文件中的代码示例及操作步骤...

    Java Https请求,跳过证书,直接访问

    在Java编程中,HTTPS(Hypertext ...总之,理解HTTPS的工作原理以及如何在Java中安全地或不安全地实现HTTPS请求是非常关键的。在开发过程中,合理使用这些技术可以极大地提高效率,但同时也必须注意潜在的安全风险。

    Java实现的Https请求工具类

    本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...

    java发送http/https请求(get/post)代码

    在Java编程中,发送HTTP和HTTPS请求是常见的网络通信任务,尤其在开发Web服务客户端或者进行API测试时。本文将详细讲解如何使用Java发送GET和POST请求,以及涉及的HTTPS安全连接。 首先,理解HTTP和HTTPS的区别至关...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    "JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...

    java 发送https get请求工具类

    java 发送https get请求工具类

    java访问https网址下载文件(含证书)

    HTTPS请求可能涉及重定向,你需要检查`HttpURLConnection`的响应代码,如果返回的是3xx,可能需要手动处理重定向。 4. **打开输入/输出流**: 调用`connect()`方法建立实际的网络连接,然后通过`getInputStream()...

    Java发 Https请求工具类 支持SSL

    4. **Java HTTPS工具类**: 工具类封装了HTTPS请求的实现细节,包括证书管理、SSL上下文配置等,使得开发者无需深入了解底层实现即可方便地发送HTTPS请求。 5. **SSL配置**: 在Java中,为了支持SSL,需要设置`SSL...

    Java Https工具类,Java Https Post请求

    这个“Java Https工具类,Java Https Post请求”可能是一个自定义的类,用于简化发送HTTPS POST请求的过程。以下是对这个主题的详细讲解: 1. **HTTPS基础**: - HTTPS是在HTTP上添加了SSL/TLS(Secure Sockets ...

    java 发送https 请求 证书

    当你需要在Java程序中发送HTTPS请求时,可能会遇到证书相关的问题,特别是当服务器使用自签名证书或者非标准CA签发的证书时。本文将详细讲解如何在Java中处理这类问题,以及如何使用httpUtils工具进行HTTPS请求。 ...

    java支持https的Post请求

    在Java编程环境中,进行HTTPS POST请求是常见的网络通信任务,特别是在需要安全传输敏感数据时,如用户登录信息或支付详情。HTTPS(HTTP over SSL/TLS)提供了加密和身份验证机制,确保了数据的隐私和完整性。本文将...

    Java请求https需要用到的jar包

    commons-codec-1.6.jar commons-logging-1.1.1.jar fluent-hc-4.2.1.jar httpclient-4.2.1.jar httpclient-cache-4.2.1.jar httpcore-4.2.1.jar httpmime-4.2.1.jar

    java发送https请求的例子

    java发送https请求的例子

    java调用HTTPS

    在Java编程中,调用HTTPS协议是常见的网络通信任务,主要涉及到网络安全和HTTP协议的升级版HTTPS。HTTPS(Hypertext Transfer Protocol Secure)是一种通过Internet进行安全通信的协议,它结合了HTTP和SSL/TLS协议,...

    java工具包主要提供文章里提到的请求https的工具

    这个Java请求HTTPS工具类可能提供了以下功能: 1. **证书管理**:工具包可能包括证书加载、存储和管理的功能,方便开发者在程序中灵活地使用自定义证书或者系统默认的证书。 2. **SSL上下文配置**:工具包可能封装...

    java发送http/https请求(get/post)Demo,亲测可用

    在Java编程语言中,发送HTTP和HTTPS请求是常见的任务,特别是在开发Web服务客户端或进行API交互时。HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是用于在客户端和服务器之间交换数据的标准。这里我们将深入...

    关于java请求nodejs

    在处理Java请求时,Node.js可以使用回调函数、Promise或async/await语法实现异步处理,避免阻塞其他请求。 8. **性能优化**: 为了提高Java到Node.js请求的性能,可以考虑缓存策略、连接池、压缩传输数据等技术。...

    JAVA 发送http请求工具类

    在Java编程中,发送HTTP和HTTPS请求是常见的网络通信任务,尤其在开发Web服务客户端或者进行API测试时。本文将详细解析如何使用Java实现HTTP和HTTPS的GET与POST请求,并结合提供的类文件名称(HttpsHandler.java、...

Global site tag (gtag.js) - Google Analytics