From 2a6e5eec701a07df0e6dcd2e38d5de2ed86feb94 Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 15 Jan 2016 15:15:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E8=A3=82=E5=8F=98=E7=BA=A2=E5=8C=85?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81=20&=20=E5=8E=BB=E9=99=A4=E5=BA=9F?= =?UTF-8?q?=E5=BC=83=E7=9A=84=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/foxinmy/weixin4j/api/CashApi.java | 8 +- .../weixin4j/payment/PayURLConsts.java | 7 +- .../weixin4j/payment/mch/Redpacket.java | 148 +++--------------- .../weixin4j/payment/mch/RedpacketRecord.java | 1 - .../payment/mch/RedpacketSendResult.java | 28 ++++ 5 files changed, 65 insertions(+), 127 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java index 675286b7..97aab882 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java @@ -72,8 +72,9 @@ public class CashApi { try { WeixinRequestExecutor weixinExecutor = new WeixinSSLRequestExecutor( weixinAccount.getMchId(), ca); - response = weixinExecutor.post(PayURLConsts.MCH_REDPACKSEND_URL, - param); + response = weixinExecutor + .post(redpacket.getTotalNum() > 1 ? PayURLConsts.MCH_REDPACK_GROUPSEND_URL + : PayURLConsts.MCH_REDPACKSEND_URL, param); } finally { if (ca != null) { try { @@ -108,7 +109,8 @@ public class CashApi { para.put("bill_type", "MCHT"); para.put("appid", weixinAccount.getId()); para.put("mch_billno", outTradeNo); - String sign = DigestUtil.paysignMd5(para, weixinAccount.getPaySignKey()); + String sign = DigestUtil + .paysignMd5(para, weixinAccount.getPaySignKey()); para.put("sign", sign); String param = XmlStream.map2xml(para); WeixinResponse response = null; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java index fd1b786b..401b2038 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java @@ -69,10 +69,15 @@ public final class PayURLConsts { public static final String MCH_PAYREPORT_URL = MCH_BASE_URL + "/payitil/report"; /** - * 发送现金红包(商户平台) + * 发送现金红包-普通红包(商户平台) */ public static final String MCH_REDPACKSEND_URL = MCH_BASE_URL + "/mmpaymkttransfers/sendredpack"; + /** + * 发送现金红包-裂变红包(商户平台) + */ + public static final String MCH_REDPACK_GROUPSEND_URL = MCH_BASE_URL + + "/mmpaymkttransfers/sendgroupredpack"; /** * 查询现金红包(商户平台) */ diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java index e5004d2d..7e8ad95b 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/Redpacket.java @@ -18,7 +18,9 @@ import com.foxinmy.weixin4j.util.DateUtil; * @date 2015年3月28日 * @since JDK 1.6 * @see 红包简介 + * href="http://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_1">普通红包 + * @see 裂变红包 */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @@ -31,12 +33,6 @@ public class Redpacket implements Serializable { @XmlElement(name = "mch_billno") @JSONField(name = "mch_billno") private String outTradeNo; - /** - * 提供方名称 必填 - */ - @XmlElement(name = "nick_name") - @JSONField(name = "nick_name") - private String nickName; /** * 红包发送者名称 必填 */ @@ -55,24 +51,18 @@ public class Redpacket implements Serializable { @XmlElement(name = "total_amount") @JSONField(name = "total_amount") private String totalAmount; - /** - * 最小红包金额,单位分 - */ - @XmlElement(name = "min_value") - @JSONField(name = "min_value") - private String minValue; - /** - * 最大红包金额,单位分( 最小金额等于最大金额: min_value=max_value =total_amount) - */ - @XmlElement(name = "max_value") - @JSONField(name = "max_value") - private String maxValue; /** * 红包发放总人数 */ @XmlElement(name = "total_num") @JSONField(name = "total_num") private int totalNum; + /** + * 红包金额设置方式(裂变红包) ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额 + */ + @XmlElement(name = "amt_type") + @JSONField(name = "amt_type") + private String amtType; /** * 红包祝福语 */ @@ -93,30 +83,6 @@ public class Redpacket implements Serializable { * 备注 */ private String remark; - /** - * 商户logo的url 非必填 - */ - @XmlElement(name = "logo_imgurl") - @JSONField(name = "logo_imgurl") - private String logoUrl; - /** - * 分享文案 非必填 - */ - @XmlElement(name = "share_content") - @JSONField(name = "share_content") - private String shareContent; - /** - * 分享链接 非必填 - */ - @XmlElement(name = "share_url") - @JSONField(name = "share_url") - private String shareUrl; - /** - * 分享的图片 非必填 - */ - @XmlElement(name = "share_imgurl") - @JSONField(name = "share_imgurl") - private String shareImageUrl; protected Redpacket() { // jaxb required @@ -127,32 +93,29 @@ public class Redpacket implements Serializable { * * @param outTradeNo * 商户侧一天内不可重复的订单号 接口根据商户订单号支持重入 如出现超时可再调用 - * @param nickName - * 提供方名称 * @param sendName * 红包发送者名称 * @param openid * 接受收红包的用户的openid * @param totalAmount * 付款金额 单位为元,自动格式化为分 + * @param totalNum + * 红包发放总人数 大于1视为裂变红包 */ - public Redpacket(String outTradeNo, String nickName, String sendName, - String openid, double totalAmount) { + public Redpacket(String outTradeNo, String sendName, String openid, + double totalAmount, int totalNum) { this.outTradeNo = outTradeNo; - this.nickName = nickName; this.sendName = sendName; this.openid = openid; this.totalAmount = DateUtil.formaFee2Fen(totalAmount); + this.totalNum = totalNum; + this.amtType = totalNum > 1 ? "ALL_RAND" : null; } public String getOutTradeNo() { return outTradeNo; } - public String getNickName() { - return nickName; - } - public String getSendName() { return sendName; } @@ -165,42 +128,10 @@ public class Redpacket implements Serializable { return totalAmount; } - public String getMinValue() { - return minValue; - } - - /** - * 单位为元,自动格式化为分 - * - * @param minValue - * 最小红包 单位为元 - */ - public void setMinValue(double minValue) { - this.minValue = DateUtil.formaFee2Fen(minValue); - } - - public String getMaxValue() { - return maxValue; - } - - /** - * 单位为元,自动格式化为分 - * - * @param minValue - * 最大红包 单位为元 - */ - public void setMaxValue(double maxValue) { - this.maxValue = DateUtil.formaFee2Fen(maxValue); - } - public int getTotalNum() { return totalNum; } - public void setTotalNum(int totalNum) { - this.totalNum = totalNum; - } - public String getWishing() { return wishing; } @@ -209,6 +140,14 @@ public class Redpacket implements Serializable { this.wishing = wishing; } + public String getAmtType() { + return amtType; + } + + public void setAmtType(String amtType) { + this.amtType = amtType; + } + public String getClientIp() { return clientIp; } @@ -233,47 +172,12 @@ public class Redpacket implements Serializable { this.remark = remark; } - public String getLogoUrl() { - return logoUrl; - } - - public void setLogoUrl(String logoUrl) { - this.logoUrl = logoUrl; - } - - public String getShareContent() { - return shareContent; - } - - public void setShareContent(String shareContent) { - this.shareContent = shareContent; - } - - public String getShareUrl() { - return shareUrl; - } - - public void setShareUrl(String shareUrl) { - this.shareUrl = shareUrl; - } - - public String getShareImageUrl() { - return shareImageUrl; - } - - public void setShareImageUrl(String shareImageUrl) { - this.shareImageUrl = shareImageUrl; - } - @Override public String toString() { - return "Redpacket [ nickName=" + nickName + ", sendName=" + sendName - + ", openid=" + openid + ", totalAmount=" + totalAmount - + ", minValue=" + minValue + ", maxValue=" + maxValue + return "Redpacket [ sendName=" + sendName + ", openid=" + openid + + ", amtType=" + amtType + ", totalAmount=" + totalAmount + ", totalNum=" + totalNum + ", wishing=" + wishing + ", clientIp=" + clientIp + ", actName=" + actName - + ", remark=" + remark + ", logoUrl=" + logoUrl - + ", shareContent=" + shareContent + ", shareUrl=" + shareUrl - + ", shareImageUrl=" + shareImageUrl + "]"; + + ", remark=" + remark + "]"; } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java index 54777ad3..3a1f2fe5 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketRecord.java @@ -44,7 +44,6 @@ public class RedpacketRecord extends XmlResult { @XmlElement(name = "mch_id") @JSONField(name = "mch_id") private String mchId; - /** * 红包单号 */ diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java index bfbc07e5..b1733765 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/RedpacketSendResult.java @@ -1,5 +1,7 @@ package com.foxinmy.weixin4j.payment.mch; +import java.util.Date; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -7,6 +9,7 @@ import javax.xml.bind.annotation.XmlRootElement; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.http.weixin.XmlResult; +import com.foxinmy.weixin4j.util.DateUtil; /** * 发送红包结果 @@ -52,6 +55,18 @@ public class RedpacketSendResult extends XmlResult { @XmlElement(name = "total_amount") @JSONField(name = "total_amount") private int totalAmount; + /** + * 发放成功时间 + */ + @XmlElement(name = "send_time") + @JSONField(name = "send_time") + private String sendTime; + /** + * 微信单号 + */ + @XmlElement(name = "send_listid") + @JSONField(name = "send_listid") + private String sendListid; protected RedpacketSendResult() { // jaxb required @@ -87,6 +102,19 @@ public class RedpacketSendResult extends XmlResult { return totalAmount / 100d; } + public String getSendTime() { + return sendTime; + } + + @JSONField(serialize = false) + public Date getFormatSendTime() { + return DateUtil.parse2yyyyMMddHHmmss(sendTime); + } + + public String getSendListid() { + return sendListid; + } + @Override public String toString() { return "RedpacketSendResult [appId=" + appId + ", mchId=" + mchId