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; } }
java请求https
// 这是微信的请求发红包的接口,需要下载秘钥文件的
猜你喜欢
转载自lijie-insist.iteye.com/blog/2236364
今日推荐
周排行