小程序之红包接口开发实例代码

互联网 17-5-27
微信红包接口开发,其实不是很难,不要被他的表象吓到了,参考网上好几个版本的答案咯~,特地分享如下

package com.tepusoft.web.weixin.utils;  import java.io.BufferedReader;  import java.io.IOException;  import java.io.InputStream;  import java.io.InputStreamReader;  import java.security.KeyStore;  import java.security.NoSuchAlgorithmException;  import java.text.SimpleDateFormat;  import java.util.Date;  import java.util.Iterator;  import java.util.Map;  import java.util.Map.Entry;  import java.util.Random;  import java.util.Set;  import java.util.SortedMap;  import java.util.TreeMap;  import java.util.UUID;  import javax.net.ssl.SSLContext;  import org.apache.commons.codec.digest.DigestUtils;  import org.apache.http.HttpEntity;  import org.apache.http.client.methods.CloseableHttpResponse;  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;  /**   * @author wangiegie   * @date 2015年10月19日下午2:07:11   * @description   */  public class HongBaoUtil {  public static final String MCH_ID = ""; // 商户号  public static final String WXAPPID = ""; // 公众账号appid  public static final String NICK_NAME = "潍坊特普软件开发有限公司"; // 提供方名称  public static final String SEND_NAME = "潍坊特普软件"; // 商户名称  public static final int MIN_VALUE = ; // 红包最小金额 单位:分  public static final int MAX_VALUE = ; // 红包最大金额 单位:分  public static final int TOTAL_NUM = 1; // 红包发放人数  public static final String WISHING = "生日快乐"; // 红包祝福语  public static final String CLIENT_IP = "182.41.214.82"; // 调用接口的机器IP  public static final String ACT_NAME = "??"; // 活动名称  public static final String REMARK = "红包测试"; // 备注  public static final String KEY = ""; // 秘钥  public static final int FAIL = 0; // 领取失败  public static final int SUCCESS = 1; // 领取成功  public static final int LOCK = 2; // 已在余额表中锁定该用户的余额,防止领取的红包金额大于预算  /**   * 对请求参数名ASCII码从小到大排序后签名   *    * @param params   */  public static void sign(SortedMap<String, String> params) {  Set<Entry<String, String>> entrys = params.entrySet();  Iterator<Entry<String, String>> it = entrys.iterator();  StringBuffer result = new StringBuffer();  while (it.hasNext()) {  Entry<String, String> entry = it.next();  result.append(entry.getKey()).append("=").append(entry.getValue()).append("&");  }  result.append("key=").append(KEY);  params.put("sign", DigestUtils.md5Hex(result.toString()));  }  /**   * 生成提交给微信服务器的xml格式参数   *    * @param params   * @return   */  public static String getRequestXml(SortedMap<String, String> params) {  StringBuffer sb = new StringBuffer();  sb.append("<xml>");  Set es = params.entrySet();  Iterator it = es.iterator();  while (it.hasNext()) {  Map.Entry entry = (Map.Entry) it.next();  String k = (String) entry.getKey();  String v = (String) entry.getValue();  if ("nick_name".equalsIgnoreCase(k) || "send_name".equalsIgnoreCase(k) || "wishing".equalsIgnoreCase(k)  || "act_name".equalsIgnoreCase(k) || "remark".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {  sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");  } else {  sb.append("<" + k + ">" + v + "</" + k + ">");  }  }  sb.append("</xml>");  return sb.toString();  }  /**   * 创建map   *    * @param billNo   * @param openid   * @param userId   * @param amount   * @return   */  public static SortedMap<String, String> createMap(String openid, String userId, int amount) {  SortedMap<String, String> params = new TreeMap<String, String>();  params.put("wxappid", WXAPPID);  params.put("nonce_str", createNonceStr());  params.put("mch_billno", createBillNo(userId));  params.put("mch_id", MCH_ID);  params.put("nick_name", NICK_NAME);  params.put("send_name", SEND_NAME);  params.put("re_openid", openid);  params.put("total_amount", amount + "");  params.put("min_value", amount + "");  params.put("max_value", amount + "");  params.put("total_num", TOTAL_NUM + "");  params.put("wishing", WISHING);  params.put("client_ip", CLIENT_IP);  params.put("act_name", ACT_NAME);  params.put("remark", REMARK);  return params;  }  /**   * 生成随机字符串   *    * @return   */  public static String createNonceStr() {  return UUID.randomUUID().toString().toUpperCase().replace("-", "");  }  /**   * 生成商户订单号   *    * @param mch_id   *            商户号   * @param userId   *            该用户的userID   * @return   */  public static String createBillNo(String userId) {  // 组成: mch_id+yyyymmdd+10位一天内不能重复的数字  // 10位一天内不能重复的数字实现方法如下:  // 因为每个用户绑定了userId,他们的userId不同,加上随机生成的(10-length(userId))可保证这10位数字不一样  Date dt = new Date();  SimpleDateFormat df = new SimpleDateFormat("yyyymmdd");  String nowTime = df.format(dt);  int length = 10 - userId.length();  return MCH_ID + nowTime + userId + getRandomNum(length);  }  /**   * 生成特定位数的随机数字   *    * @param length   * @return   */  private static String getRandomNum(int length) {  String val = "";  Random random = new Random();  for (int i = 0; i < length; i++) {  val += String.valueOf(random.nextInt(10));  }  return val;  }  /**   * post提交到微信服务器   *   * @param requestXML   * @param instream  传入的在微信支付的PKCS12证书的位置   * @return   * @throws NoSuchAlgorithmException   * @throws CertificateException   * @throws IOException   * @throws KeyManagementException   * @throws UnrecoverableKeyException   * @throws KeyStoreException   */  public static String post(String requestXML, InputStream instream) throws Exception {  KeyStore keyStore = KeyStore.getInstance("PKCS12");  try {  keyStore.load(instream, MCH_ID.toCharArray());  } finally {  instream.close();  }  SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, MCH_ID.toCharArray()).build();  SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,  SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);  CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();  String result = "";  try {  HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack");  StringEntity reqEntity = new StringEntity(requestXML, "utf-8"); // 如果此处编码不对,可能导致客户端签名跟微信的签名不一致  reqEntity.setContentType("application/x-www-form-urlencoded");  httpPost.setEntity(reqEntity);  CloseableHttpResponse response = httpclient.execute(httpPost);  try {  HttpEntity entity = response.getEntity();  if (entity != null) {  BufferedReader bufferedReader = new BufferedReader(  new InputStreamReader(entity.getContent(), "UTF-8"));  String text;  while ((text = bufferedReader.readLine()) != null) {  result += text;  }  }  EntityUtils.consume(entity);  } finally {  response.close();  }  } finally {  httpclient.close();  }  return result;  }  }
@Test  public void testHongBao() throws Exception {  SortedMap<String, String> sortedMap = HongBaoUtil.createMap(openId, userId, money);  HongBaoUtil.sign(sortedMap);  String postXML = HongBaoUtil.getRequestXml(sortedMap);  FileInputStream instream = new FileInputStream(new File("证书文件地址"));  HongBaoUtil.post(postXML, instream);  }

好咯 ...别被微信支付后台的那么多的配置和参数侠盗 ,微信红包开发就是这么简单 ~

【相关推荐】

1. 分享小程序开发调用接口的实例教程

2. 微信小程序支付接口的实例详解

3. 微信开发之微信支付

以上就是小程序之红包接口开发实例代码的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:小程序开发之详解使用Underscore.js

相关资讯