diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResult.java index 373497f3..150cac38 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResult.java @@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.bean.pay.result; import com.google.common.collect.Lists; import com.thoughtworks.xstream.annotations.XStreamAlias; +import io.restassured.path.xml.XmlPath; import java.util.List; @@ -17,6 +18,7 @@ import java.util.List; *
  • 示例值 *
  • 描述 * + * * @author binarywang(Binary Wang) */ @XStreamAlias("xml") @@ -179,75 +181,6 @@ public class WxPayOrderQueryResult extends WxPayBaseResult { private Integer couponCount; private List coupons; - - public static class Coupon { - /** - *
    代金券类型
    -     * coupon_type_$n
    -     * 否
    -     * String
    -     * CASH
    -     * 
  • CASH--充值代金券 - *
  • NO_CASH---非充值代金券 - * 订单使用代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0 - *
  • - */ - private String couponType; - - /** - *
    代金券ID
    -     * coupon_id_$n
    -     * 否
    -     * String(20)
    -     * 10000
    -     * 代金券ID, $n为下标,从0开始编号
    -     * 
    - */ - private String couponId; - - /** - *
    单个代金券支付金额
    -     * coupon_fee_$n
    -     * 否
    -     * Int
    -     * 100
    -     * 单个代金券支付金额, $n为下标,从0开始编号
    -     * 
    - */ - private Integer couponFee; - - public Coupon(String couponType, String couponId, Integer couponFee) { - this.couponType = couponType; - this.couponId = couponId; - this.couponFee = couponFee; - } - - public String getCouponType() { - return this.couponType; - } - - public void setCouponType(String couponType) { - this.couponType = couponType; - } - - public String getCouponId() { - return this.couponId; - } - - public void setCouponId(String couponId) { - this.couponId = couponId; - } - - public Integer getCouponFee() { - return this.couponFee; - } - - public void setCouponFee(Integer couponFee) { - this.couponFee = couponFee; - } - - } - /** *
    微信支付订单号
        * transaction_id
    @@ -259,7 +192,6 @@ public class WxPayOrderQueryResult extends WxPayBaseResult {
        */
       @XStreamAlias("transaction_id")
       private String transactionId;
    -
       /**
        * 
    商户订单号
        * out_trade_no
    @@ -271,7 +203,6 @@ public class WxPayOrderQueryResult extends WxPayBaseResult {
        */
       @XStreamAlias("out_trade_no")
       private String outTradeNo;
    -
       /**
        * 
    附加数据
        * attach
    @@ -283,7 +214,6 @@ public class WxPayOrderQueryResult extends WxPayBaseResult {
        */
       @XStreamAlias("attach")
       private String attach;
    -
       /**
        * 
    支付完成时间
        * time_end
    @@ -295,7 +225,6 @@ public class WxPayOrderQueryResult extends WxPayBaseResult {
        */
       @XStreamAlias("time_end")
       private String timeEnd;
    -
       /**
        * 
    交易状态描述
        * trade_state_desc
    @@ -460,10 +389,86 @@ public class WxPayOrderQueryResult extends WxPayBaseResult {
         this.tradeStateDesc = tradeStateDesc;
       }
     
    -  public void composeCoupons(String xmlString){
    -    if(this.couponCount != null && this.couponCount > 0 ){
    +  /**
    +   * 通过xml组装coupons属性内容
    +   */
    +  public void composeCoupons() {
    +    if (this.couponCount != null && this.couponCount > 0) {
           this.coupons = Lists.newArrayList();
    -      //TODO 暂时待实现
    +      XmlPath xmlPath = new XmlPath(this.getXmlString());
    +      for (int i = 0; i < this.couponCount; i++){
    +        this.coupons.add(new Coupon(this.getXmlValueIfExists(xmlPath, "xml.coupon_type_" + i, String.class),
    +          this.getXmlValueIfExists(xmlPath, "xml.coupon_id_" + i, String.class),
    +          this.getXmlValueIfExists(xmlPath, "xml.coupon_fee_" + i, Integer.class)));
    +      }
    +    }
    +  }
    +
    +  public static class Coupon {
    +    /**
    +     * 
    代金券类型
    +     * coupon_type_$n
    +     * 否
    +     * String
    +     * CASH
    +     * 
  • CASH--充值代金券 + *
  • NO_CASH---非充值代金券 + * 订单使用代金券时有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0 + *
  • + */ + private String couponType; + + /** + *
    代金券ID
    +     * coupon_id_$n
    +     * 否
    +     * String(20)
    +     * 10000
    +     * 代金券ID, $n为下标,从0开始编号
    +     * 
    + */ + private String couponId; + + /** + *
    单个代金券支付金额
    +     * coupon_fee_$n
    +     * 否
    +     * Int
    +     * 100
    +     * 单个代金券支付金额, $n为下标,从0开始编号
    +     * 
    + */ + private Integer couponFee; + + public Coupon(String couponType, String couponId, Integer couponFee) { + this.couponType = couponType; + this.couponId = couponId; + this.couponFee = couponFee; + } + + public String getCouponType() { + return this.couponType; + } + + public void setCouponType(String couponType) { + this.couponType = couponType; } + + public String getCouponId() { + return this.couponId; + } + + public void setCouponId(String couponId) { + this.couponId = couponId; + } + + public Integer getCouponFee() { + return this.couponFee; + } + + public void setCouponFee(Integer couponFee) { + this.couponFee = couponFee; + } + } } diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResultTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResultTest.java new file mode 100644 index 00000000..1582ea17 --- /dev/null +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/pay/result/WxPayOrderQueryResultTest.java @@ -0,0 +1,65 @@ +package me.chanjar.weixin.mp.bean.pay.result; + +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + *
    + * Created by Binary Wang on 2017-01-04.
    + * @author binarywang(Binary Wang)
    + * 
    + */ +public class WxPayOrderQueryResultTest { + @Test + public void testComposeCoupons() throws Exception { + /** + * xml样例字符串来自于官方文档,并稍加改造加入了coupon相关的数据便于测试 + */ + String xmlString = "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 1\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 2\n" + + " \n" + + " 10000\n" + + " 100\n" + + " \n" + + " 10001\n" + + " 200\n" + + ""; + + WxPayOrderQueryResult orderQueryResult = WxPayOrderQueryResult.fromXML(xmlString, WxPayOrderQueryResult.class); + orderQueryResult.composeCoupons(); + + Assert.assertEquals(orderQueryResult.getCouponCount().intValue(), 2); + Assert.assertNotNull(orderQueryResult.getCoupons()); + Assert.assertEquals(orderQueryResult.getCoupons().size(), 2); + + Assert.assertEquals(orderQueryResult.getCoupons().get(0).getCouponFee().intValue(), 100); + Assert.assertEquals(orderQueryResult.getCoupons().get(1).getCouponFee().intValue(), 200); + + Assert.assertEquals(orderQueryResult.getCoupons().get(0).getCouponType(), "CASH"); + Assert.assertEquals(orderQueryResult.getCoupons().get(1).getCouponType(), "NO_CASH"); + + Assert.assertEquals(orderQueryResult.getCoupons().get(0).getCouponId(), "10000"); + Assert.assertEquals(orderQueryResult.getCoupons().get(1).getCouponId(), "10001"); + + } + +}