// 这是微信的请求发红包的接口,需要下载秘钥文件的
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请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用...
### Java 发送 HTTPS 请求时遇到证书问题解析 在进行网络通信的过程中,HTTPS 协议由于其安全性被广泛应用。本文将围绕“Java 发送 HTTPS 请求证书问题”这一主题展开讨论,通过对给定文件中的代码示例及操作步骤...
在Java编程中,HTTPS(Hypertext ...总之,理解HTTPS的工作原理以及如何在Java中安全地或不安全地实现HTTPS请求是非常关键的。在开发过程中,合理使用这些技术可以极大地提高效率,但同时也必须注意潜在的安全风险。
本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...
在Java编程中,发送HTTP和HTTPS请求是常见的网络通信任务,尤其在开发Web服务客户端或者进行API测试时。本文将详细讲解如何使用Java发送GET和POST请求,以及涉及的HTTPS安全连接。 首先,理解HTTP和HTTPS的区别至关...
"JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...
java 发送https get请求工具类
HTTPS请求可能涉及重定向,你需要检查`HttpURLConnection`的响应代码,如果返回的是3xx,可能需要手动处理重定向。 4. **打开输入/输出流**: 调用`connect()`方法建立实际的网络连接,然后通过`getInputStream()...
4. **Java HTTPS工具类**: 工具类封装了HTTPS请求的实现细节,包括证书管理、SSL上下文配置等,使得开发者无需深入了解底层实现即可方便地发送HTTPS请求。 5. **SSL配置**: 在Java中,为了支持SSL,需要设置`SSL...
这个“Java Https工具类,Java Https Post请求”可能是一个自定义的类,用于简化发送HTTPS POST请求的过程。以下是对这个主题的详细讲解: 1. **HTTPS基础**: - HTTPS是在HTTP上添加了SSL/TLS(Secure Sockets ...
当你需要在Java程序中发送HTTPS请求时,可能会遇到证书相关的问题,特别是当服务器使用自签名证书或者非标准CA签发的证书时。本文将详细讲解如何在Java中处理这类问题,以及如何使用httpUtils工具进行HTTPS请求。 ...
在Java编程环境中,进行HTTPS POST请求是常见的网络通信任务,特别是在需要安全传输敏感数据时,如用户登录信息或支付详情。HTTPS(HTTP over SSL/TLS)提供了加密和身份验证机制,确保了数据的隐私和完整性。本文将...
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协议是常见的网络通信任务,主要涉及到网络安全和HTTP协议的升级版HTTPS。HTTPS(Hypertext Transfer Protocol Secure)是一种通过Internet进行安全通信的协议,它结合了HTTP和SSL/TLS协议,...
这个Java请求HTTPS工具类可能提供了以下功能: 1. **证书管理**:工具包可能包括证书加载、存储和管理的功能,方便开发者在程序中灵活地使用自定义证书或者系统默认的证书。 2. **SSL上下文配置**:工具包可能封装...
在Java编程语言中,发送HTTP和HTTPS请求是常见的任务,特别是在开发Web服务客户端或进行API交互时。HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是用于在客户端和服务器之间交换数据的标准。这里我们将深入...
在处理Java请求时,Node.js可以使用回调函数、Promise或async/await语法实现异步处理,避免阻塞其他请求。 8. **性能优化**: 为了提高Java到Node.js请求的性能,可以考虑缓存策略、连接池、压缩传输数据等技术。...
在Java编程中,发送HTTP和HTTPS请求是常见的网络通信任务,尤其在开发Web服务客户端或者进行API测试时。本文将详细解析如何使用Java实现HTTP和HTTPS的GET与POST请求,并结合提供的类文件名称(HttpsHandler.java、...