首页 > 微信应用  > 

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

小程序之红包接口开发实例代码
微信红包接口开发,其实不是很难,不要被他的表象吓到了,参考网上好几个版本的答案咯~,特地分享如下

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

分装 红包工具类 :

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 = ""; // 公众账号appidpublic 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"; // 调用接口的机器IPpublic 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;}}

小程序之红包接口开发实例代码由讯客互联微信应用栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“小程序之红包接口开发实例代码