From 96d72fe5424553141dc65e06d83ce7fa712f6c11 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Mon, 27 Mar 2017 14:22:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=BD=AC=E6=8D=A2=E7=9F=AD=E9=93=BE=E6=8E=A5API=20#10?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/request/WxPayShorturlRequest.java | 46 +++++++++++++++++++ .../bean/result/WxPayOrderReverseResult.java | 1 + .../bean/result/WxPayShorturlResult.java | 34 ++++++++++++++ .../wxpay/service/WxPayService.java | 33 +++++++++++-- .../wxpay/service/impl/WxPayServiceImpl.java | 16 +++++++ .../service/impl/WxPayServiceImplTest.java | 17 ++++++- 6 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayShorturlRequest.java create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayShorturlResult.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayShorturlRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayShorturlRequest.java new file mode 100644 index 00000000..849d9283 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayShorturlRequest.java @@ -0,0 +1,46 @@ +package com.github.binarywang.wxpay.bean.request; + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + *
+ * 转换短链接请求对象类
+ * Created by Binary Wang on 2017-3-27.
+ * @author binarywang(Binary Wang)
+ * 
+ */ +@XStreamAlias("xml") +public class WxPayShorturlRequest extends WxPayBaseRequest { + /** + *
+   * URL链接
+   * long_url
+   * 是
+   * String(512)
+   * weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
+   * 需要转换的URL,签名用原串,传输需URLencode
+   * 
+ */ + @XStreamAlias("long_url") + private String longUrl; + + public String getLongUrl() { + return this.longUrl; + } + + public void setLongUrl(String longUrl) { + this.longUrl = longUrl; + } + + public WxPayShorturlRequest() { + } + + public WxPayShorturlRequest(String longUrl) { + this.longUrl = longUrl; + } + + @Override + protected void checkConstraints() { + //do nothing + } +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayOrderReverseResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayOrderReverseResult.java index 7732a962..c80b72d2 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayOrderReverseResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayOrderReverseResult.java @@ -9,6 +9,7 @@ import com.thoughtworks.xstream.annotations.XStreamAlias; * @author binarywang(Binary Wang) * */ +@XStreamAlias("xml") public class WxPayOrderReverseResult extends WxPayBaseResult { /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayShorturlResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayShorturlResult.java new file mode 100644 index 00000000..2f93cb81 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayShorturlResult.java @@ -0,0 +1,34 @@ +package com.github.binarywang.wxpay.bean.result; + +import com.thoughtworks.xstream.annotations.XStreamAlias; + +/** + *
+ * 转换短链接结果对象类
+ * Created by Binary Wang on 2017-3-27.
+ * @author binarywang(Binary Wang)
+ * 
+ */ +@XStreamAlias("xml") +public class WxPayShorturlResult extends WxPayBaseResult { + /** + *
+   * URL链接
+   * short_url
+   * 是
+   * String(64)
+   * weixin://wxpay/s/XXXXXX
+   * 转换后的URL
+   * 
+ */ + @XStreamAlias("short_url") + private String shortUrl; + + public String getShortUrl() { + return this.shortUrl; + } + + public void setShortUrl(String shortUrl) { + this.shortUrl = shortUrl; + } +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index 902669e7..e61ff863 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -267,12 +267,39 @@ public interface WxPayService { * 撤销订单API * 文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_11&index=3 * 应用场景: - * 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。 - * 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。 + * 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭; + * 如果用户支付成功,微信支付系统会将此订单资金退还给用户。 + * 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。 + * 提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。 * 调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。 * 接口链接 :https://api.mch.weixin.qq.com/secapi/pay/reverse * 是否需要证书:请求需要双向证书。 - * + * */ WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxErrorException; + + /** + *
+   *  转换短链接
+   *  应用场景:
+   *     该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
+   *  接口地址:https://api.mch.weixin.qq.com/tools/shorturl
+   *  是否需要证书:否
+   * 
+ * @param request 请求对象 + */ + String shorturl(WxPayShorturlRequest request) throws WxErrorException; + + /** + *
+   *  转换短链接
+   *  应用场景:
+   *     该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
+   *  接口地址:https://api.mch.weixin.qq.com/tools/shorturl
+   *  是否需要证书:否
+   * 
+ * @param longUrl 需要被压缩的网址 + */ + String shorturl(String longUrl) throws WxErrorException; + } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java index 7ed530be..aea06943 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java @@ -328,6 +328,22 @@ public class WxPayServiceImpl implements WxPayService { return result; } + @Override + public String shorturl(WxPayShorturlRequest request) throws WxErrorException { + request.checkAndSign(this.getConfig()); + + String url = this.getPayBaseUrl() + "/tools/shorturl"; + String responseContent = this.post(url, request.toXML()); + WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class); + result.checkResult(this); + return result.getShortUrl(); + } + + @Override + public String shorturl(String longUrl) throws WxErrorException { + return this.shorturl(new WxPayShorturlRequest(longUrl)); + } + private String post(String url, String xmlParam) { String requestString = xmlParam; try { diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java index f668e96c..3898d137 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java @@ -28,10 +28,11 @@ import static org.testng.Assert.*; @Test @Guice(modules = ApiTestModule.class) public class WxPayServiceImplTest { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Inject - protected WxPayService payService; + private WxPayService payService; @Test public void testGetPayInfo() throws Exception { @@ -221,10 +222,12 @@ public class WxPayServiceImplTest { @Test public void testGetConfig() throws Exception { + // no need to test } @Test public void testSetConfig() throws Exception { + // no need to test } @Test @@ -236,4 +239,16 @@ public class WxPayServiceImplTest { this.logger.info(result.toString()); } + @Test + public void testShorturl() throws Exception { + String longUrl = "weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX"; + + String result = this.payService.shorturl(new WxPayShorturlRequest(longUrl)); + assertNotNull(result); + this.logger.info(result.toString()); + + result = this.payService.shorturl(longUrl); + assertNotNull(result); + this.logger.info(result.toString()); + } }