`

demo

 
阅读更多
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 clientdemo调试软件

    《clientDEMO:一款强大的监控调试工具》 在IT行业中,高效的监控与调试能力是确保系统稳定运行的关键。clientDEMO就是这样一款专为监控和调试而设计的专业软件,它在网络管理领域扮演着不可或缺的角色。这款工具以...

    微信小程序学习demo:基础接口演示demo(源代码+截图)

    微信小程序学习demo:基础接口演示demo(源代码+截图)微信小程序学习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(源代码+截图)微信小程序学习demo推荐:微赞社区(论坛demo)(适用1123(源代码+截图...

    各类网页设计项目demo演示

    增加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转盘抽奖...

    支付宝当面付开发PHP Demo官网DEMO

    一、免责申明:官网DEMO 此DEMO仅供参考,实际开发中需要结合具体业务场景修改使用。 二、扫码支付中,如果商户通过异步通知来判断支付结果:需要严格按照如下描述校验通知数据的正确性。 1、商户需要验证该...

    高德地图2d demo新版全修改正确的demo(官网提供的demo有各种毛病需要修改)

    高德地图官网的开发文档全部偏向于3d地图,而缺乏对2d地图的讲解,所以我们只能跑demo但是2d的demo各种各样的毛病,通过好久我才将其修改完全,现在的demo可以正常运行!(在2022最新的as上) 经过修改,处理了高德...

    条形码、二维码扫描、生成Demo 完整源码

    下面将详细阐述ZXing的工作原理以及如何利用其开发一个完整的条形码、二维码生成与扫描的Demo。 首先,让我们了解一下条形码和二维码。条形码是一种用黑白相间的条纹表示数字和字母的信息编码方式,通常包括UPC...

    一些html页面或是效果的demo

    一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果的demo 一些html页面或是效果...

    微信小程序 小程序官方Demo (源码)

    微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小...

    微信小程序demo:商城(源代码+截图)

    微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)微信小程序demo:商城(源代码+截图)...

    minio分片上传Demo.zip

    minio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片上传Demo.zipminio分片...

    全球DEMO大赛得奖作

    全球DEMO大赛得奖作品欣赏之一:幽灵古堡 (65K) &lt;br&gt;我们曾经给大家推荐过很多0DAY组织的自制DEMO,完全用源代码编写,是用来炫耀 &lt;br&gt;本组织技术的。而各组织之间的竞争也会通过全球DEMO大赛来进行,比赛规则...

    微信小程序学习demo:表单练习(源代码+截图)

    微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+截图)微信小程序学习demo:表单练习(源代码+...

    Android TCP Socket通信实例Demo源码Apk下载

    最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...

    微信小程序服务端开发demo(源代码+截图)

    微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序服务端开发demo(源代码+截图)微信小程序...

    android 串口测试demo 代码简单 无bug 完美运行

    android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...

    通联支付官方demo_DEMO_通联支付DEMO_通联支付官方demo_

    通联支付官方demo

    微信小程序demo:简易抽奖(源代码+截图)

    微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo...

Global site tag (gtag.js) - Google Analytics