mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	#178 实现发送代金券接口
This commit is contained in:
		| @ -0,0 +1,311 @@ | |||||||
|  | package com.github.binarywang.wxpay.bean.coupon; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.request.WxPayBaseRequest; | ||||||
|  | import com.thoughtworks.xstream.annotations.XStreamAlias; | ||||||
|  | import me.chanjar.weixin.common.annotation.Required; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  * 发送代金券请求对象类 | ||||||
|  |  * Created by Binary Wang on 2017-7-15. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | @XStreamAlias("xml") | ||||||
|  | public class WxPayCouponSendRequest extends WxPayBaseRequest { | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:代金券批次id | ||||||
|  |    * 变量名:coupon_stock_id | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1757 | ||||||
|  |    * 类型:String | ||||||
|  |    * 说明:代金券批次id | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @Required | ||||||
|  |   @XStreamAlias("coupon_stock_id") | ||||||
|  |   private String couponStockId; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:openid记录数 | ||||||
|  |    * 变量名:openid_count | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1 | ||||||
|  |    * 类型:int | ||||||
|  |    * 说明:openid记录数(目前支持num=1) | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @Required | ||||||
|  |   @XStreamAlias("openid_count") | ||||||
|  |   private Integer openidCount; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:商户单据号 | ||||||
|  |    * 变量名:partner_trade_no | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1000009820141203515766 | ||||||
|  |    * 类型:String | ||||||
|  |    * 说明:商户此次发放凭据号(格式:商户id+日期+流水号),商户侧需保持唯一性 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @Required | ||||||
|  |   @XStreamAlias("partner_trade_no") | ||||||
|  |   private String partnerTradeNo; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:用户openid | ||||||
|  |    * 变量名:openid | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:onqOjjrXT-776SpHnfexGm1_P7iE | ||||||
|  |    * 类型:String | ||||||
|  |    * 说明:Openid信息,用户在appid下的openid。 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @Required | ||||||
|  |   @XStreamAlias("openid") | ||||||
|  |   private String openid; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:操作员 | ||||||
|  |    * 变量名:op_user_id | ||||||
|  |    * 是否必填:否 | ||||||
|  |    * 示例值:10000098 | ||||||
|  |    * 类型:String(32) | ||||||
|  |    * 说明:操作员帐号, 默认为商户号,可在商户平台配置操作员对应的api权限 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("op_user_id") | ||||||
|  |   private String opUserId; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:设备号 | ||||||
|  |    * 变量名:device_info | ||||||
|  |    * 是否必填:否 | ||||||
|  |    * 示例值: | ||||||
|  |    * 类型:String(32) | ||||||
|  |    * 说明:微信支付分配的终端设备号 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("device_info") | ||||||
|  |   private String deviceInfo; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:协议版本 | ||||||
|  |    * 变量名:version | ||||||
|  |    * 是否必填:否 | ||||||
|  |    * 示例值:1.0 | ||||||
|  |    * 类型:String(32) | ||||||
|  |    * 说明:默认1.0 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("version") | ||||||
|  |   private String version; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:协议类型 | ||||||
|  |    * 变量名:type | ||||||
|  |    * 是否必填:否 | ||||||
|  |    * 示例值:XML | ||||||
|  |    * 类型:String(32) | ||||||
|  |    * 说明:XML【目前仅支持默认XML】 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("type") | ||||||
|  |   private String type; | ||||||
|  |  | ||||||
|  |   public WxPayCouponSendRequest() { | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   private WxPayCouponSendRequest(Builder builder) { | ||||||
|  |     setAppid(builder.appid); | ||||||
|  |     setMchId(builder.mchId); | ||||||
|  |     setSubAppId(builder.subAppId); | ||||||
|  |     setSubMchId(builder.subMchId); | ||||||
|  |     setNonceStr(builder.nonceStr); | ||||||
|  |     setSign(builder.sign); | ||||||
|  |     setCouponStockId(builder.couponStockId); | ||||||
|  |     setOpenidCount(builder.openidCount); | ||||||
|  |     setPartnerTradeNo(builder.partnerTradeNo); | ||||||
|  |     setOpenid(builder.openid); | ||||||
|  |     setOpUserId(builder.opUserId); | ||||||
|  |     setDeviceInfo(builder.deviceInfo); | ||||||
|  |     setVersion(builder.version); | ||||||
|  |     setType(builder.type); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public static Builder newBuilder() { | ||||||
|  |     return new Builder(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getCouponStockId() { | ||||||
|  |     return this.couponStockId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setCouponStockId(String couponStockId) { | ||||||
|  |     this.couponStockId = couponStockId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public Integer getOpenidCount() { | ||||||
|  |     return this.openidCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setOpenidCount(Integer openidCount) { | ||||||
|  |     this.openidCount = openidCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getPartnerTradeNo() { | ||||||
|  |     return this.partnerTradeNo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setPartnerTradeNo(String partnerTradeNo) { | ||||||
|  |     this.partnerTradeNo = partnerTradeNo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getOpenid() { | ||||||
|  |     return this.openid; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setOpenid(String openid) { | ||||||
|  |     this.openid = openid; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getOpUserId() { | ||||||
|  |     return this.opUserId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setOpUserId(String opUserId) { | ||||||
|  |     this.opUserId = opUserId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getDeviceInfo() { | ||||||
|  |     return this.deviceInfo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setDeviceInfo(String deviceInfo) { | ||||||
|  |     this.deviceInfo = deviceInfo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getVersion() { | ||||||
|  |     return this.version; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setVersion(String version) { | ||||||
|  |     this.version = version; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getType() { | ||||||
|  |     return this.type; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setType(String type) { | ||||||
|  |     this.type = type; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   protected void checkConstraints() { | ||||||
|  |     //do nothing | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public static final class Builder { | ||||||
|  |     private String appid; | ||||||
|  |     private String mchId; | ||||||
|  |     private String subAppId; | ||||||
|  |     private String subMchId; | ||||||
|  |     private String nonceStr; | ||||||
|  |     private String sign; | ||||||
|  |     private String couponStockId; | ||||||
|  |     private Integer openidCount; | ||||||
|  |     private String partnerTradeNo; | ||||||
|  |     private String openid; | ||||||
|  |     private String opUserId; | ||||||
|  |     private String deviceInfo; | ||||||
|  |     private String version; | ||||||
|  |     private String type; | ||||||
|  |  | ||||||
|  |     private Builder() { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder appid(String appid) { | ||||||
|  |       this.appid = appid; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder mchId(String mchId) { | ||||||
|  |       this.mchId = mchId; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder subAppId(String subAppId) { | ||||||
|  |       this.subAppId = subAppId; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder subMchId(String subMchId) { | ||||||
|  |       this.subMchId = subMchId; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder nonceStr(String nonceStr) { | ||||||
|  |       this.nonceStr = nonceStr; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder sign(String sign) { | ||||||
|  |       this.sign = sign; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder couponStockId(String couponStockId) { | ||||||
|  |       this.couponStockId = couponStockId; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder openidCount(Integer openidCount) { | ||||||
|  |       this.openidCount = openidCount; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder partnerTradeNo(String partnerTradeNo) { | ||||||
|  |       this.partnerTradeNo = partnerTradeNo; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder openid(String openid) { | ||||||
|  |       this.openid = openid; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder opUserId(String opUserId) { | ||||||
|  |       this.opUserId = opUserId; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder deviceInfo(String deviceInfo) { | ||||||
|  |       this.deviceInfo = deviceInfo; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder version(String version) { | ||||||
|  |       this.version = version; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Builder type(String type) { | ||||||
|  |       this.type = type; | ||||||
|  |       return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public WxPayCouponSendRequest build() { | ||||||
|  |       return new WxPayCouponSendRequest(this); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,204 @@ | |||||||
|  | package com.github.binarywang.wxpay.bean.coupon; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.result.WxPayBaseResult; | ||||||
|  | import com.thoughtworks.xstream.annotations.XStreamAlias; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  * 发送代金券响应结果类 | ||||||
|  |  * Created by Binary Wang on 2017-7-15. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | @XStreamAlias("xml") | ||||||
|  | public class WxPayCouponSendResult extends WxPayBaseResult { | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:设备号 | ||||||
|  |    * 变量名:device_info | ||||||
|  |    * 是否必填:否 | ||||||
|  |    * 示例值:123456sb | ||||||
|  |    * 类型:String(32) | ||||||
|  |    * 描述:微信支付分配的终端设备号, | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("device_info") | ||||||
|  |   private String deviceInfo; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:代金券批次id | ||||||
|  |    * 变量名:coupon_stock_id | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1757 | ||||||
|  |    * 类型:String | ||||||
|  |    * 描述:用户在商户appid下的唯一标识 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("coupon_stock_id") | ||||||
|  |   private String couponStockId; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:返回记录数 | ||||||
|  |    * 变量名:resp_count | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1 | ||||||
|  |    * 类型:Int | ||||||
|  |    * 描述:返回记录数 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("resp_count") | ||||||
|  |   private Integer respCount; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:成功记录数 | ||||||
|  |    * 变量名:success_count | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1或者0 | ||||||
|  |    * 类型:Int | ||||||
|  |    * 描述:成功记录数 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("success_count") | ||||||
|  |   private Integer successCount; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:失败记录数 | ||||||
|  |    * 变量名:failed_count | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1或者0 | ||||||
|  |    * 类型:Int | ||||||
|  |    * 描述:失败记录数 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("failed_count") | ||||||
|  |   private Integer failedCount; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:用户标识 | ||||||
|  |    * 变量名:openid | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:onqOjjrXT-776SpHnfexGm1_P7iE | ||||||
|  |    * 类型:String | ||||||
|  |    * 描述:用户在商户appid下的唯一标识 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("openid") | ||||||
|  |   private String openid; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:返回码 | ||||||
|  |    * 变量名:ret_code | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:SUCCESS或者FAILED | ||||||
|  |    * 类型:String | ||||||
|  |    * 描述:返回码,SUCCESS/FAILED | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("ret_code") | ||||||
|  |   private String retCode; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:代金券id | ||||||
|  |    * 变量名:coupon_id | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:1870 | ||||||
|  |    * 类型:String | ||||||
|  |    * 描述:对一个用户成功发放代金券则返回代金券id,即ret_code为SUCCESS的时候;如果ret_code为FAILED则填写空串"" | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("coupon_id") | ||||||
|  |   private String couponId; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 字段名:返回信息 | ||||||
|  |    * 变量名:ret_msg | ||||||
|  |    * 是否必填:是 | ||||||
|  |    * 示例值:失败描述信息,例如:“用户已达领用上限” | ||||||
|  |    * 类型:String | ||||||
|  |    * 描述:返回信息,当返回码是FAILED的时候填写,否则填空串“” | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   @XStreamAlias("ret_msg") | ||||||
|  |   private String retMsg; | ||||||
|  |  | ||||||
|  |   public String getDeviceInfo() { | ||||||
|  |     return this.deviceInfo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setDeviceInfo(String deviceInfo) { | ||||||
|  |     this.deviceInfo = deviceInfo; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getCouponStockId() { | ||||||
|  |     return this.couponStockId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setCouponStockId(String couponStockId) { | ||||||
|  |     this.couponStockId = couponStockId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public Integer getRespCount() { | ||||||
|  |     return this.respCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setRespCount(Integer respCount) { | ||||||
|  |     this.respCount = respCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public Integer getSuccessCount() { | ||||||
|  |     return this.successCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setSuccessCount(Integer successCount) { | ||||||
|  |     this.successCount = successCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public Integer getFailedCount() { | ||||||
|  |     return this.failedCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setFailedCount(Integer failedCount) { | ||||||
|  |     this.failedCount = failedCount; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getOpenid() { | ||||||
|  |     return this.openid; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setOpenid(String openid) { | ||||||
|  |     this.openid = openid; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getRetCode() { | ||||||
|  |     return this.retCode; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setRetCode(String retCode) { | ||||||
|  |     this.retCode = retCode; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getCouponId() { | ||||||
|  |     return this.couponId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setCouponId(String couponId) { | ||||||
|  |     this.couponId = couponId; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getRetMsg() { | ||||||
|  |     return this.retMsg; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setRetMsg(String retMsg) { | ||||||
|  |     this.retMsg = retMsg; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -17,13 +17,6 @@ import java.math.BigDecimal; | |||||||
|  * <pre> |  * <pre> | ||||||
|  * Created by Binary Wang on 2016-10-24. |  * Created by Binary Wang on 2016-10-24. | ||||||
|  *  微信支付请求对象共用的参数存放类 |  *  微信支付请求对象共用的参数存放类 | ||||||
|  * 注释中各行每个字段描述对应如下: |  | ||||||
|  * <li>字段名 |  | ||||||
|  * <li>变量名 |  | ||||||
|  * <li>是否必填 |  | ||||||
|  * <li>类型 |  | ||||||
|  * <li>示例值 |  | ||||||
|  * <li>描述 |  | ||||||
|  * </pre> |  * </pre> | ||||||
|  * |  * | ||||||
|  * @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a> |  * @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a> | ||||||
| @ -31,72 +24,72 @@ import java.math.BigDecimal; | |||||||
| public abstract class WxPayBaseRequest { | public abstract class WxPayBaseRequest { | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 公众账号ID |    * 字段名:公众账号ID | ||||||
|    * appid |    * 变量名:appid | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * wxd678efh567hg6787 |    * 示例值:wxd678efh567hg6787 | ||||||
|    * 微信分配的公众账号ID(企业号corpid即为此appId) |    * 描述:微信分配的公众账号ID(企业号corpid即为此appId) | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("appid") |   @XStreamAlias("appid") | ||||||
|   protected String appid; |   protected String appid; | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 商户号 |    * 字段名:商户号 | ||||||
|    * mch_id |    * 变量名:mch_id | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * 1230000109 |    * 示例值:1230000109 | ||||||
|    * 微信支付分配的商户号 |    * 描述:微信支付分配的商户号 | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("mch_id") |   @XStreamAlias("mch_id") | ||||||
|   protected String mchId; |   protected String mchId; | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 服务商模式下的子商户公众账号ID |    * 字段名:服务商模式下的子商户公众账号ID | ||||||
|    * sub_appid |    * 变量名:sub_appid | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * wxd678efh567hg6787 |    * 示例值:wxd678efh567hg6787 | ||||||
|    * 微信分配的子商户公众账号ID |    * 描述:微信分配的子商户公众账号ID | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("sub_appid") |   @XStreamAlias("sub_appid") | ||||||
|   protected String subAppId; |   protected String subAppId; | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 服务商模式下的子商户号 |    * 字段名:服务商模式下的子商户号 | ||||||
|    * sub_mch_id |    * 变量名:sub_mch_id | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * 1230000109 |    * 示例值:1230000109 | ||||||
|    * 微信支付分配的子商户号,开发者模式下必填 |    * 描述:微信支付分配的子商户号,开发者模式下必填 | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("sub_mch_id") |   @XStreamAlias("sub_mch_id") | ||||||
|   protected String subMchId; |   protected String subMchId; | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 随机字符串 |    * 字段名:随机字符串 | ||||||
|    * nonce_str |    * 变量名:nonce_str | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * 5K8264ILTKCH16CQ2502SI8ZNMTM67VS |    * 示例值:5K8264ILTKCH16CQ2502SI8ZNMTM67VS | ||||||
|    * 随机字符串,不长于32位。推荐随机数生成算法 |    * 描述:随机字符串,不长于32位。推荐随机数生成算法 | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("nonce_str") |   @XStreamAlias("nonce_str") | ||||||
|   protected String nonceStr; |   protected String nonceStr; | ||||||
|   /** |   /** | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 签名 |    * 字段名:签名 | ||||||
|    * sign |    * 变量名:sign | ||||||
|    * 是 |    * 是否必填:是 | ||||||
|    * String(32) |    * 类型:String(32) | ||||||
|    * C380BEC2BFD727A4B6845133519F3AD6 |    * 示例值:C380BEC2BFD727A4B6845133519F3AD6 | ||||||
|    * 签名,详见签名生成算法 |    * 描述:签名,详见签名生成算法 | ||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   @XStreamAlias("sign") |   @XStreamAlias("sign") | ||||||
|  | |||||||
| @ -1,5 +1,7 @@ | |||||||
| package com.github.binarywang.wxpay.service; | package com.github.binarywang.wxpay.service; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; | ||||||
| import com.github.binarywang.wxpay.bean.request.*; | import com.github.binarywang.wxpay.bean.request.*; | ||||||
| import com.github.binarywang.wxpay.bean.result.*; | import com.github.binarywang.wxpay.bean.result.*; | ||||||
| import com.github.binarywang.wxpay.config.WxPayConfig; | import com.github.binarywang.wxpay.config.WxPayConfig; | ||||||
| @ -339,4 +341,14 @@ public interface WxPayService { | |||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   String getSandboxSignKey() throws WxPayException; |   String getSandboxSignKey() throws WxPayException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 发放代金券 | ||||||
|  |    * 接口请求链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/send_coupon | ||||||
|  |    * 是否需要证书:请求需要双向证书。 | ||||||
|  |    * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3 | ||||||
|  |    * </pre> | ||||||
|  |    */ | ||||||
|  |   WxPayCouponSendResult sendCoupon(WxPayCouponSendRequest request) throws WxPayException; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,8 @@ | |||||||
| package com.github.binarywang.wxpay.service.impl; | package com.github.binarywang.wxpay.service.impl; | ||||||
|  |  | ||||||
| import com.github.binarywang.utils.qrcode.QrcodeUtils; | import com.github.binarywang.utils.qrcode.QrcodeUtils; | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; | ||||||
| import com.github.binarywang.wxpay.bean.request.*; | import com.github.binarywang.wxpay.bean.request.*; | ||||||
| import com.github.binarywang.wxpay.bean.result.*; | import com.github.binarywang.wxpay.bean.result.*; | ||||||
| import com.github.binarywang.wxpay.config.WxPayConfig; | import com.github.binarywang.wxpay.config.WxPayConfig; | ||||||
| @ -463,4 +465,15 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | |||||||
|     result.checkResult(this); |     result.checkResult(this); | ||||||
|     return result.getSandboxSignKey(); |     return result.getSandboxSignKey(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxPayCouponSendResult sendCoupon(WxPayCouponSendRequest request) throws WxPayException { | ||||||
|  |     request.checkAndSign(this.getConfig()); | ||||||
|  |  | ||||||
|  |     String url = this.getPayBaseUrl() + "/mmpaymkttransfers/send_coupon"; | ||||||
|  |     String responseContent = this.post(url, request.toXML(), true); | ||||||
|  |     WxPayCouponSendResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponSendResult.class); | ||||||
|  |     result.checkResult(this); | ||||||
|  |     return result; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,8 @@ | |||||||
| package com.github.binarywang.wxpay.service.impl; | package com.github.binarywang.wxpay.service.impl; | ||||||
| 
 | 
 | ||||||
| import com.github.binarywang.utils.qrcode.QrcodeUtils; | import com.github.binarywang.utils.qrcode.QrcodeUtils; | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; | ||||||
|  | import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; | ||||||
| import com.github.binarywang.wxpay.bean.request.*; | import com.github.binarywang.wxpay.bean.request.*; | ||||||
| import com.github.binarywang.wxpay.bean.result.*; | import com.github.binarywang.wxpay.bean.result.*; | ||||||
| import com.github.binarywang.wxpay.exception.WxPayException; | import com.github.binarywang.wxpay.exception.WxPayException; | ||||||
| @ -26,7 +28,7 @@ import static org.testng.Assert.*; | |||||||
|  */ |  */ | ||||||
| @Test | @Test | ||||||
| @Guice(modules = ApiTestModule.class) | @Guice(modules = ApiTestModule.class) | ||||||
| public class WxPayServiceImplTest { | public class WxPayServiceAbstractImplTest { | ||||||
|   private final Logger logger = LoggerFactory.getLogger(this.getClass()); |   private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||||
| 
 | 
 | ||||||
|   @Inject |   @Inject | ||||||
| @ -271,4 +273,14 @@ public class WxPayServiceImplTest { | |||||||
|     this.logger.info(signKey); |     this.logger.info(signKey); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Test | ||||||
|  |   public void testSendCoupon() throws Exception { | ||||||
|  |     WxPayCouponSendResult result = this.payService.sendCoupon(WxPayCouponSendRequest.newBuilder() | ||||||
|  |       .couponStockId("123") | ||||||
|  |       .openid("122") | ||||||
|  |       .partnerTradeNo("1212") | ||||||
|  |       .openidCount(1) | ||||||
|  |       .build()); | ||||||
|  |     this.logger.info(result.toString()); | ||||||
|  |   } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang