黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

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

来源:黔优媒体网   时间:2024-09-19

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

分装 红包工具类 :

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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。


上一篇: 没有了
下一篇:没有了
【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:小程序之红包接口开发实例代码;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)