From 0240fffa1c85715ac203071d0c42545f3f4fd55f Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Thu, 21 Dec 2017 23:49:57 +0800 Subject: [PATCH] =?UTF-8?q?#392=20=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BC=81=E4=B8=9A=E4=BB=98=E6=AC=BE=E5=88=B0?= =?UTF-8?q?=E9=93=B6=E8=A1=8C=E5=8D=A1=E7=9A=84=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/entpay/EntPayBankQueryRequest.java | 28 ++++++ .../bean/entpay/EntPayBankQueryResult.java | 96 +++++++++++++++++++ .../wxpay/bean/entpay/EntPayBankResult.java | 4 +- .../wxpay/bean/entpay/EntPayQueryRequest.java | 4 +- .../wxpay/bean/entpay/EntPayQueryResult.java | 1 + .../wxpay/bean/request/BaseWxPayRequest.java | 9 +- .../wxpay/bean/result/BaseWxPayResult.java | 8 +- .../wxpay/service/EntPayService.java | 14 ++- .../wxpay/service/impl/EntPayServiceImpl.java | 15 ++- .../service/impl/EntPayServiceImplTest.java | 13 ++- 10 files changed, 178 insertions(+), 14 deletions(-) create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryRequest.java create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryResult.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryRequest.java new file mode 100644 index 00000000..804d305b --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryRequest.java @@ -0,0 +1,28 @@ +package com.github.binarywang.wxpay.bean.entpay; + +import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.*; +import me.chanjar.weixin.common.annotation.Required; +import me.chanjar.weixin.common.util.ToStringUtils; + +/** + *
+ * 企业付款到银行卡的请求对象
+ * Created by Binary Wang on 2017/12/21.
+ * 
+ * + * @author Binary Wang + */ +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@XStreamAlias("xml") +public class EntPayBankQueryRequest extends EntPayQueryRequest { + private static final long serialVersionUID = -479088843124447119L; + + @Override + protected boolean ignoreAppid() { + return true; + } +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryResult.java new file mode 100644 index 00000000..6020dbed --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankQueryResult.java @@ -0,0 +1,96 @@ +package com.github.binarywang.wxpay.bean.entpay; + +import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + *
+ * 企业付款到银行卡查询返回结果.
+ * Created by Binary Wang on 2017/12/21.
+ * 
+ * + * @author Binary Wang + */ +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@XStreamAlias("xml") +public class EntPayBankQueryResult extends BaseWxPayResult { + private static final long serialVersionUID = -8336631015989500746L; + + /** + * 商户企业付款单号 + */ + @XStreamAlias("partner_trade_no") + private String partnerTradeNo; + + /** + * 微信企业付款单号. + * 即为微信内部业务单号 + */ + @XStreamAlias("payment_no") + private String paymentNo; + + /** + * 银行卡号. + * 收款用户银行卡号(MD5加密) + */ + @XStreamAlias("bank_no_md5") + private String bankNoMd5; + + /** + * 用户真实姓名. + * 收款人真实姓名(MD5加密) + */ + @XStreamAlias("true_name_md5") + private String trueNameMd5; + + /** + * 付款金额. + */ + @XStreamAlias("amount") + private Integer amount; + + /** + * 代付单状态. + *
+   * PROCESSING(处理中,如有明确失败,则返回额外失败原因;否则没有错误原因)
+   * SUCCESS(付款成功)
+   * FAILED(付款失败)
+   * BANK_FAIL(银行退票,订单状态由付款成功流转至退票,退票时付款金额和手续费会自动退还)
+   * 
+ */ + @XStreamAlias("status") + private String status; + + /** + * 手续费金额 + */ + @XStreamAlias("cmms_amt") + private Integer cmmsAmount; + + /** + * 商户下单时间. + * 微信侧订单创建时间 + */ + @XStreamAlias("create_time") + private String createTime; + + /** + * 成功付款时间. + * 微信侧付款成功时间(但无法保证银行不会退票) + */ + @XStreamAlias("pay_succ_time") + private String paySuccessTime; + + /** + * 失败原因. + * 订单失败原因(如:余额不足) + */ + @XStreamAlias("reason") + private String failReason; + +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankResult.java index 6cddaab6..ef75b814 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayBankResult.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; /** *
- * 企业付款到银行卡的响应结果
+ * 企业付款到银行卡的响应结果.
  * Created by Binary Wang on 2017/12/21.
  * 
* @@ -19,6 +19,8 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @XStreamAlias("xml") public class EntPayBankResult extends BaseWxPayResult { + private static final long serialVersionUID = 3449707749935227689L; + /** * 代付金额. */ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java index 190d6706..9dc74e75 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryRequest.java @@ -8,7 +8,7 @@ import me.chanjar.weixin.common.util.ToStringUtils; /** *
- * 企业付款请求对象
+ * 企业付款请求对象.
  * Created by Binary Wang on 2016/10/19.
  * 
* @@ -21,6 +21,8 @@ import me.chanjar.weixin.common.util.ToStringUtils; @AllArgsConstructor @XStreamAlias("xml") public class EntPayQueryRequest extends BaseWxPayRequest { + private static final long serialVersionUID = 1972288742207813985L; + /** *
    * 字段名:商户订单号.
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryResult.java
index f9b195bf..e3cdba3b 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/entpay/EntPayQueryResult.java
@@ -19,6 +19,7 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @XStreamAlias("xml")
 public class EntPayQueryResult extends BaseWxPayResult {
+  private static final long serialVersionUID = 3948485732447456947L;
 
   /**
    * 商户订单号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java
index 9534aeb8..63f4337b 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/BaseWxPayRequest.java
@@ -12,20 +12,23 @@ import me.chanjar.weixin.common.util.ToStringUtils;
 import me.chanjar.weixin.common.util.xml.XStreamInitializer;
 import org.apache.commons.lang3.StringUtils;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 import static com.github.binarywang.wxpay.constant.WxPayConstants.SignType.ALL_SIGN_TYPES;
 
 /**
  * 
- * Created by Binary Wang on 2016-10-24.
  *  微信支付请求对象共用的参数存放类
+ * Created by Binary Wang on 2016-10-24.
  * 
* * @author Binary Wang */ @Data -public abstract class BaseWxPayRequest { +public abstract class BaseWxPayRequest implements Serializable { + private static final long serialVersionUID = -4766915659779847060L; + /** *
    * 字段名:公众账号ID
@@ -117,7 +120,7 @@ public abstract class BaseWxPayRequest {
    *
    * @param yuan 将要转换的元的数值字符串
    */
-  public static Integer yuanToFee(String yuan) {
+  public static Integer yuanToFen(String yuan) {
     return new BigDecimal(yuan).setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue();
   }
 
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
index 99e47997..3e4ae293 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java
@@ -2,7 +2,6 @@ package com.github.binarywang.wxpay.bean.result;
 
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
-import com.github.binarywang.wxpay.service.impl.BaseWxPayServiceImpl;
 import com.github.binarywang.wxpay.util.SignUtils;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
@@ -26,20 +25,23 @@ import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
 /**
  * 
- * 微信支付结果共用属性类
+ * 微信支付结果共用属性类.
  * Created by Binary Wang on 2016-10-24.
  * 
* * @author Binary Wang */ @Data -public abstract class BaseWxPayResult { +public abstract class BaseWxPayResult implements Serializable { + private static final long serialVersionUID = 2416778827989487412L; + /** * 返回状态码 */ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EntPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EntPayService.java index f68f7d37..4ab7f31b 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EntPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/EntPayService.java @@ -68,5 +68,17 @@ public interface EntPayService { * * @param request 请求对象 */ - EntPayBankResult payToBankCard(EntPayBankRequest request) throws WxPayException; + EntPayBankResult payBank(EntPayBankRequest request) throws WxPayException; + + /** + * 企业付款到银行卡查询. + *
+   * 用于对商户企业付款到银行卡操作进行结果查询,返回付款操作详细结果。
+   * 文档详见:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_3
+   * 接口链接:https://api.mch.weixin.qq.com/mmpaysptrans/query_bank
+   * 
+ * + * @param partnerTradeNo 商户订单号 + */ + EntPayBankQueryResult queryPayBank(String partnerTradeNo) throws WxPayException; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java index 5ab4c187..d97ca931 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImpl.java @@ -75,7 +75,7 @@ public class EntPayServiceImpl implements EntPayService { } @Override - public EntPayBankResult payToBankCard(EntPayBankRequest request) throws WxPayException { + public EntPayBankResult payBank(EntPayBankRequest request) throws WxPayException { File publicKeyFile = this.buildPublicKeyFile(); request.setEncBankNo(this.encryptRSA(publicKeyFile, request.getEncBankNo())); request.setEncTrueName(this.encryptRSA(publicKeyFile, request.getEncTrueName())); @@ -90,6 +90,19 @@ public class EntPayServiceImpl implements EntPayService { return result; } + @Override + public EntPayBankQueryResult queryPayBank(String partnerTradeNo) throws WxPayException { + EntPayBankQueryRequest request = new EntPayBankQueryRequest(); + request.setPartnerTradeNo(partnerTradeNo); + request.checkAndSign(this.payService.getConfig()); + + String url = this.payService.getPayBaseUrl() + "/mmpaysptrans/query_bank"; + String responseContent = this.payService.post(url, request.toXML(), true); + EntPayBankQueryResult result = BaseWxPayResult.fromXML(responseContent, EntPayBankQueryResult.class); + result.checkResult(this.payService, request.getSignType(), true); + return result; + } + private String encryptRSA(File publicKeyFile, String srcString) throws WxPayException { try { Security.addProvider(new BouncyCastleProvider()); diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImplTest.java index 8e35db8c..417bf276 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/EntPayServiceImplTest.java @@ -1,8 +1,8 @@ package com.github.binarywang.wxpay.service.impl; +import com.github.binarywang.wxpay.bean.entpay.EntPayRequest; import com.github.binarywang.wxpay.bean.entpay.EntPayBankRequest; import com.github.binarywang.wxpay.bean.entpay.EntPayBankResult; -import com.github.binarywang.wxpay.bean.entpay.EntPayRequest; import com.github.binarywang.wxpay.bean.request.WxEntPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; @@ -16,7 +16,7 @@ import org.testng.annotations.Test; /** *
- *  企业付款测试类
+ *  企业付款测试类.
  *  Created by BinaryWang on 2017/12/19.
  * 
* @@ -72,8 +72,8 @@ public class EntPayServiceImplTest { } @Test - public void testPayToBankCard() throws Exception { - EntPayBankResult result = this.payService.getEntPayService().payToBankCard(EntPayBankRequest.builder() + public void testPayBank() throws Exception { + EntPayBankResult result = this.payService.getEntPayService().payBank(EntPayBankRequest.builder() .bankCode("aa") .amount(1) .encBankNo("1") @@ -83,4 +83,9 @@ public class EntPayServiceImplTest { .build()); this.logger.info(result.toString()); } + + @Test + public void testQueryPayBank() throws Exception { + this.logger.info(this.payService.getEntPayService().queryPayBank("123").toString()); + } }