争怎路由网/应用软件/内容

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

应用软件2024-02-21 阅读
微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新的小程序开发环境和开发者生态。
微信红包接口开发,其实不是很难,不要被他的表象吓到了,参考网上好几个版本的答案咯~,特地分享如下

分装 红包工具类 :

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. 微信开发之微信支付

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

  • 微信

  • 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。



    ……

    标签:小程序之红包接口开发案例代码
    相关阅读