不敢标原创,感谢
柳峰老师和另一位dalao(http://my.csdn.net/wgyscsf)
/**
*
* 微信发红包
* @param openid 用户openid
* @param wishing 红包祝福语
* @param totalAmount 红包金额
* @param actName 活动名称
* @param remark 备注信息
* @return true/false
*/
public boolean sendredPack(String openid,String wishing,String totalAmount,String actName,String remark) {
boolean reCode = false;
Packets packets = new Packets();
String nostr = CreateNonceStr.getRandomString(32);
packets.setNonce_str(nostr);// 随机数
packets.setClient_ip(LOCALIP);// 本机IP
packets.setMch_id(MCID);// 商户号
packets.setWxappid(APPID);// appid
packets.setSend_name("有你");
packets.setRe_openid(openid);// openID
packets.setAct_name(actName);
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
// System.out.println("当前时间:" + sdf.format(d));
String numb = sdf.format(d);
packets.setMch_billno(MCID+numb);
packets.setTotal_num("1");// 红包发放总人数
packets.setWishing(wishing);// 红包祝福语
packets.setTotal_amount(totalAmount);// 金额
packets.setRemark(remark);//备注
// packets.setScene_id("场景ID");
// packets.setRisk_info("活动信息");
// packets.setConsume_mch_id("资金授权商户号");
Map<String, Object> params = new TreeMap<String, Object>(new Comparator<String>() {
public int compare(String obj1, String obj2) {
// 升序排序
return obj1.compareTo(obj2);
}
});
params.put("nonce_str", nostr);
params.put("mch_billno", packets.getMch_billno());
params.put("mch_id", MCID);
params.put("wxappid", APPID);
params.put("send_name", packets.getSend_name());
params.put("re_openid", packets.getRe_openid());
params.put("total_amount", packets.getTotal_amount());
params.put("total_num", packets.getTotal_num());
params.put("wishing", packets.getWishing());
params.put("client_ip", LOCALIP);
params.put("act_name", packets.getAct_name());
params.put("remark", packets.getRemark());
packets.setSign(MD5.createSign(params));// 签名
XMLUtil xmlUtil = new XMLUtil();
xmlUtil.xstream().alias("xml", Packets.class);
String sendPacketsXml = xmlUtil.xstream().toXML(packets);
System.out.println(sendPacketsXml);
try {
String returnCode = ClientCustomSSL.ssl("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack",sendPacketsXml, MCID);
//https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack
//System.out.println("返回的:" + returnCode);
Map<String, String> re = XMLUtil.parseXml(returnCode);
for (Map.Entry<String, String> entry : re.entrySet()) {
if (entry.getKey().equals("return_msg")) {
System.out.println( entry.getKey()+":"+entry.getValue());
if (entry.getValue().equals("发放成功.")) {
reCode = true;
}
}
}
} catch (Exception e) {
System.out.println("发红包出错了");
}
return reCode;
}
public class ClientCustomSSL { /** * 发送请求 * */ public static String ssl(String url,String data,String mchId){ StringBuffer message = new StringBuffer(); try { //String mchId = Global.getConfig("MCHId"); KeyStore keyStore = KeyStore.getInstance("PKCS12"); String certFilePath = "D:"+File.separator+"cert"+File.separator+"apiclient_cert.p12"; // linux下 /* if ("/".equals(File.separator)) { certFilePath = "//usr//local//certs//apiclient_cert.p12"; }*/ FileInputStream instream = new FileInputStream(new File(certFilePath)); keyStore.load(instream, mchId.toCharArray()); SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchId.toCharArray()).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); HttpPost httpost = new HttpPost(url); httpost.addHeader("Connection", "keep-alive"); httpost.addHeader("Accept", "*/*"); httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); httpost.addHeader("Host", "api.mch.weixin.qq.com"); httpost.addHeader("X-Requested-With", "XMLHttpRequest"); httpost.addHeader("Cache-Control", "max-age=0"); httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); httpost.setEntity(new StringEntity(data, "UTF-8")); // System.out.println("executing request" + httpost.getRequestLine()); CloseableHttpResponse response = httpclient.execute(httpost); 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) { message.append(text); } } EntityUtils.consume(entity); } catch (IOException e) { e.printStackTrace(); } finally { response.close(); } } catch (Exception e1) { e1.printStackTrace(); } return message.toString(); }}