1、接口文档

https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5

2、证书下载及证书安装

首先,商户调用微信红包接口时,服务器会进行证书验证,所以要在商户平台下载证书。在管理后台的“账户信息”里找到“安全设置”就可以下载了证书了。

商户平台:https://pay.weixin.qq.com

我们把下载好的证书解压放到目录D:/certs下。SSL接口中使用到这些证书。 

接着就是向帐号中充值,因为发放现金红包将扣除商户的可用余额,所以需要预先充值,确保可用余额充足。进入“资金管理”菜单找到“现金管理”,在此进行充值,保证帐号有余额可以进行红包发放。 

3、业务代码

3.1红包实体类

package com.benben.timetable.wechat.entity;/*** 现金红包* * @ClassName: SendRedPack* @Description: TODO* @author 潘广伟(笨笨)* @date 2015年12月11日**/
public class SendRedPack {private String nonce_str;// 随机字符串private String sign;// 签名private String mch_billno;// 商户订单号private String mch_id;// 商户号private String wxappid;// 公众账号private String send_name;// 商户名称private String re_openid;// 用户private int total_amount;// 付款金额private int total_num;// 红包发放总人数private String wishing;// 红包祝福语private String client_ip;// Ip地址private String act_name;// 活动名称private String remark;// 备注public int getTotal_amount() {return total_amount;}public void setTotal_amount(int total_amount) {this.total_amount = total_amount;}public int getTotal_num() {return total_num;}public void setTotal_num(int total_num) {this.total_num = total_num;}public String getNonce_str() {return nonce_str;}public void setNonce_str(String nonce_str) {this.nonce_str = nonce_str;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}public String getMch_billno() {return mch_billno;}public void setMch_billno(String mch_billno) {this.mch_billno = mch_billno;}public String getMch_id() {return mch_id;}public void setMch_id(String mch_id) {this.mch_id = mch_id;}public String getWxappid() {return wxappid;}public void setWxappid(String wxappid) {this.wxappid = wxappid;}public String getSend_name() {return send_name;}public void setSend_name(String send_name) {this.send_name = send_name;}public String getRe_openid() {return re_openid;}public void setRe_openid(String re_openid) {this.re_openid = re_openid;}public String getWishing() {return wishing;}public void setWishing(String wishing) {this.wishing = wishing;}public String getClient_ip() {return client_ip;}public void setClient_ip(String client_ip) {this.client_ip = client_ip;}public String getAct_name() {return act_name;}public void setAct_name(String act_name) {this.act_name = act_name;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134

再次吐槽微信的xml格式。下划线啊!!!

3.2、生成红包数据签名

    public String createSendRedPackOrderSign(SendRedPack redPack){StringBuffer sign = new StringBuffer();sign.append("act_name=").append(redPack.getAct_name());sign.append("&client_ip=").append(redPack.getClient_ip());sign.append("&mch_billno=").append(redPack.getMch_billno());sign.append("&mch_id=").append(redPack.getMch_id());sign.append("&nonce_str=").append(redPack.getNonce_str());sign.append("&re_openid=").append(redPack.getRe_openid());sign.append("&remark=").append(redPack.getRemark());sign.append("&send_name=").append(redPack.getSend_name());sign.append("&total_amount=").append(redPack.getTotal_amount());sign.append("&total_num=").append(redPack.getTotal_num());sign.append("&wishing=").append(redPack.getWishing());sign.append("&wxappid=").append(redPack.getWxappid());sign.append("&key=").append(payKey);return DigestUtils.md5Hex(sign.toString()).toUpperCase();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

签名算法请参考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3 
之前微信支付也用到相同的签名方式:http://blog.csdn.net/jrainbow/article/details/49904065

3.3、SSL接口

private String ssl(String url,String data){StringBuffer message = new StringBuffer();try {KeyStore keyStore  = KeyStore.getInstance("PKCS12");FileInputStream instream = new FileInputStream(new File("D:/certs/apiclient_cert.p12"));keyStore.load(instream, mchId.toCharArray());// Trust own CA and all self-signed certsSSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchId.toCharArray()).build();// Allow TLSv1 protocol onlySSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();HttpPost httpost = new HttpPost(url);httpost.addHeader("Connection", "keep-alive");httpost.addHeader("Accept", "*/*");httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");httpost.addHeader("Host", "api.mch.weixin.qq.com");httpost.addHeader("X-Requested-With", "XMLHttpRequest");httpost.addHeader("Cache-Control", "max-age=0");httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");httpost.setEntity(new StringEntity(data, "UTF-8"));System.out.println("executing request" + httpost.getRequestLine());CloseableHttpResponse response = httpclient.execute(httpost);try {HttpEntity entity = response.getEntity();System.out.println("----------------------------------------");System.out.println(response.getStatusLine());if (entity != null) {System.out.println("Response content length: " + entity.getContentLength());BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent(),"UTF-8"));String text;while ((text = bufferedReader.readLine()) != null) {message.append(text);}}EntityUtils.consume(entity);} catch (IOException e) {e.printStackTrace();} finally {response.close();}} catch (Exception e1) {e1.printStackTrace();} return message.toString();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

注意:微信本身提供的demo中的ssl程序是不正确的。

3.4 发送红包

    /*** 现金红包* @Title: bindDevice * @return String   * @throws*/public Map<String, String> sendRedPack(SendRedPack redPack) throws Exception{String sign = createSendRedPackOrderSign(redPack);redPack.setSign(sign);xmlUtil.xstream().alias("xml", redPack.getClass());String xml = xmlUtil.xstream().toXML(redPack);String response = ssl(sendEedPackUrl,xml);Map<String, String> responseMap = xmlUtil.parseXml(response);return responseMap;}

java 开发微信红包相关推荐

  1. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  2. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  3. java开发微信公众号支付

    这篇文章主要给大家结合微信支付接口开发的实践,从获取用户授权到各主要接口的使用方法等方面介绍微信支付的关键点技术,有需要的小伙伴可以参考下 最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时 ...

  4. Java开发微信公众号之被动回复用户消息-回复图片消息

    一.前言 hello小伙伴们,大家好,做微信开发两年了,最近看到微信方面的文章阅读量和关注量上升的比较快速,激发了我满满的动力啊,所以就滋生了一个想法,从头开始整理一下微信公众号开发,写一个简易的教程 ...

  5. 新课重磅发布-Java开发微信朋友圈PC版系统(架构2.0+分布式中间件)

    继"Java开发微信朋友圈PC版系统-架构1.0" 课程之后,debug这段时间日撸夜撸,终于赶在春节放假前给诸位带来了这一系统的架构2.0版本,特此分享给诸位进行学习,以掌握.巩 ...

  6. JAVA开发微信 AIRKISS 一键WIFI功能(测试账户)

    最近使用JAVA开发微信的AIRKISS功能,因为没有经验参考了比较多的网站,其中受益比较多的除了微信官方网站外,特别感谢以下几位大神的经验分享. https://blog.csdn.net/jrai ...

  7. java开发微信抢红包挂_「高并发秒杀」微信抢红包实战案例

    推荐阅读: ( i' [9 Q6 ?7 K/ p+ B% ~ 8 L$ _" R- y- v  s1 p. e7 Y( }* M, l6 T+ R 阿里二面凉经:设计模式+缓存+Spring ...

  8. java开发微信第三方平台 模板消息发送消息案例

    今天利用自己的一点休息时间来编写了一个利用java开发的微信第三方平台,这次开发的目地是利用微信的模板消息无限的向关注用户推送消息.经过反复的测试,无BUG出现. 开发语言:java,数据库:mysq ...

  9. 用Java模拟微信红包的实现

    用Java模拟微信发红包的实现 大家好,又到了一周一次的分享环节,今天我分享的是模拟微信红包的实现,话不多说,见代码如下: 红包类 public class RedPacket {/**红包ID*/p ...

最新文章

  1. Android开发RSS阅读器
  2. 中心扩散算法--最长回文子串
  3. 数据结构-荷兰国旗问题
  4. PyQt5 技术篇 - Qt Designer怎么用styleSheet设置按钮的背景
  5. int类型的实参与int*类型的形参不兼容_谁告诉的你们Python是强类型语言!站出来,保证不打你!...
  6. c++电费管理系统_能耗管理系统
  7. 复杂电路简化经典例题_【中考物理】电路简化的10大原则和7大步骤
  8. Mr.J--重拾Ajax(二)-- 本地服务器配置测试
  9. android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
  10. I/O----复制文本文件
  11. SQL Server 2008 安装或卸载时提示“重启计算机失败的解决办法(转)
  12. epoll的两种触发模式ET和LT
  13. ATSC和DVB数字电视系统的比较
  14. form表单中@submit.prevent作用
  15. 读《激荡三十年》有感
  16. 分享下最近的Nvidia GPU 3060 laptop GPU、linzhi、Tesla算力曲线
  17. ICCV2021:Structure-Preserving Deraining with Residue Channel Prior Guidance
  18. mac os x使用Git简易入门教程
  19. 500kV某变电站红外测温 检测技术方案
  20. 【Python技能】如丝滑般控制键盘鼠标

热门文章

  1. 服务器信息备份后如何转移,云服务器到期了怎么迁移数据
  2. SQL 有条件地筛选重复数据
  3. C# winfrom 增值税票识别程序,可识别照片、扫描件、电子票、形成电子台帐。
  4. 勤哲excel服务器与oracle集成,勤哲Excel服务器-学习与下载园地 Excel Server是由勤哲软件于2003年发明的。...
  5. 【技术分享】使用YOLOv4跑通VOC官方数据集
  6. ubuntu使用chromedp截图 发现中文乱码显示框框
  7. 搞机:AS自带模拟器AVD Root 和 Xposed安装
  8. 易语言 剪切板 html,易语言剪切板操作源码
  9. 虚拟机 全局代理 主机代理_比较虚拟代理与真实代理的性能
  10. 电刺激器学习电源升压模块设计