package com.demo.wx;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SendRedEnUtil {
private static class TrustAnyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
// 全局数组
private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
private static final String mchId = ""; // 商户号
private static final String wxappid = "";// 公众账号appid
private static final String nickName = "part";// 提供方名称
private static final String sendName = "oneDemo";// 商户名称
private static final String totalAmount = "2"; // 付款金额
private static final String reOpenid = "";// 接受红包的用户openid
private static final String minValue = "2";// 最小红包金额
private static final String maxValue = "2";// 最大红包金额
private static final String totalNum = "1";// 红包发送人数
private static final String wishing = "happy";// 祝福语
private static final String clientIp = "10.17.100.140";// 调用接口的地址ip
private static final String actName = "action";// 活动名字
private static final String remark = "actionRe";// 备注
private static final String actId = "63507 ";// 活动ID63507
private static final String key = "";// 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
// 发送红包的方法 URLEncoder.encode("", "UTF-8")
public static void sendRedEn() throws Exception {
// 存放键值对的map
HashMap<String, String> hm = getSign();
// 设置请求参数
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());
// HttpsUtils.post("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack",
// sb.toString(), "utf-8");
// 通用的请求属性
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[] { new TrustAnyTrustManager() },
new java.security.SecureRandom());
URL url = new URL(
"https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setDoOutput(true);
conn.connect();
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(sb.toString().getBytes("utf-8"));
// 刷新、关闭
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = "";
String result = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
out.close();
in.close();
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() {
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("clientIp");
// 活动名字
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;
System.out.println(stringSignTemp);
// 进行MD5加密然后转为大写
String sign = getMD5Code(stringSignTemp);
hm.put("sign", sign.toUpperCase());
return hm;
}
// 进行MD5加密
public static String getMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
// md.digest() 该函数返回值为存放哈希值结果的byte数组
resultString = byteToString(md.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return resultString;
}
// 转换字节数组为16进制字串
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}
// 返回形式为数字跟字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
public static void main(String[] args) throws Exception {
// 设置代理
System.setProperty("proxyHost", "");
System.setProperty("proxyPort", "");
System.setProperty("proxyUser", "");
System.setProperty("proxyPassword", "");
sendRedEn();
}
}
分享到:
相关推荐
《clientDEMO:一款强大的监控调试工具》 在IT行业中,高效的监控与调试能力是确保系统稳定运行的关键。clientDEMO就是这样一款专为监控和调试而设计的专业软件,它在网络管理领域扮演着不可或缺的角色。这款工具以...
微信小程序学习demo:基础接口演示demo(源代码+截图)微信小程序学习demo:基础接口演示demo(源代码+截图)微信小程序学习demo:基础接口演示demo(源代码+截图)微信小程序学习demo:基础接口演示demo(源代码+截图)微信...
小程序源码 移动端小商城DEMO (商城demo源码) (代码源)小程序源码 移动端小商城DEMO (商城demo源码) (代码源)小程序源码 移动端小商城DEMO (商城demo源码) (代码源)小程序源码 移动端小商城DEMO (商城demo源码) ...
微信小程序学习demo推荐:微赞社区(论坛demo)(适用1123(源代码+截图)微信小程序学习demo推荐:微赞社区(论坛demo)(适用1123(源代码+截图)微信小程序学习demo推荐:微赞社区(论坛demo)(适用1123(源代码+截图...
增加3D相片demo增加文章note_jekyll更正图片档名增加作品集:表单删除tab选项卡的背景图更改posts/rwd的文章更改导航栏更正图片档名更正图片档名添加RWD文章各类网页设计项目demo演示各类网页设计项目demo演示各类...
转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖demo转盘抽奖...
一、免责申明:官网DEMO 此DEMO仅供参考,实际开发中需要结合具体业务场景修改使用。 二、扫码支付中,如果商户通过异步通知来判断支付结果:需要严格按照如下描述校验通知数据的正确性。 1、商户需要验证该...
高德地图官网的开发文档全部偏向于3d地图,而缺乏对2d地图的讲解,所以我们只能跑demo但是2d的demo各种各样的毛病,通过好久我才将其修改完全,现在的demo可以正常运行!(在2022最新的as上) 经过修改,处理了高德...
下面将详细阐述ZXing的工作原理以及如何利用其开发一个完整的条形码、二维码生成与扫描的Demo。 首先,让我们了解一下条形码和二维码。条形码是一种用黑白相间的条纹表示数字和字母的信息编码方式,通常包括UPC...
一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果...
微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小...
微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)...
minio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片...
全球DEMO大赛得奖作品欣赏之一:幽灵古堡 (65K) <br>我们曾经给大家推荐过很多0DAY组织的自制DEMO,完全用源代码编写,是用来炫耀 <br>本组织技术的。而各组织之间的竞争也会通过全球DEMO大赛来进行,比赛规则...
微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+...
最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...
微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序...
android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...
通联支付官方demo
微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo...