Skip to content

Commit 96d72fe

Browse files
committed
增加微信支付转换短链接API #101
1 parent d7d5b16 commit 96d72fe

File tree

6 files changed

+143
-4
lines changed

6 files changed

+143
-4
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.binarywang.wxpay.bean.request;
2+
3+
import com.thoughtworks.xstream.annotations.XStreamAlias;
4+
5+
/**
6+
* <pre>
7+
* 转换短链接请求对象类
8+
* Created by Binary Wang on 2017-3-27.
9+
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
10+
* </pre>
11+
*/
12+
@XStreamAlias("xml")
13+
public class WxPayShorturlRequest extends WxPayBaseRequest {
14+
/**
15+
* <pre>
16+
* URL链接
17+
* long_url
18+
* 是
19+
* String(512)
20+
* weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
21+
* 需要转换的URL,签名用原串,传输需URLencode
22+
* </pre>
23+
*/
24+
@XStreamAlias("long_url")
25+
private String longUrl;
26+
27+
public String getLongUrl() {
28+
return this.longUrl;
29+
}
30+
31+
public void setLongUrl(String longUrl) {
32+
this.longUrl = longUrl;
33+
}
34+
35+
public WxPayShorturlRequest() {
36+
}
37+
38+
public WxPayShorturlRequest(String longUrl) {
39+
this.longUrl = longUrl;
40+
}
41+
42+
@Override
43+
protected void checkConstraints() {
44+
//do nothing
45+
}
46+
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayOrderReverseResult.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
1010
* </pre>
1111
*/
12+
@XStreamAlias("xml")
1213
public class WxPayOrderReverseResult extends WxPayBaseResult {
1314

1415
/**
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.github.binarywang.wxpay.bean.result;
2+
3+
import com.thoughtworks.xstream.annotations.XStreamAlias;
4+
5+
/**
6+
* <pre>
7+
* 转换短链接结果对象类
8+
* Created by Binary Wang on 2017-3-27.
9+
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
10+
* </pre>
11+
*/
12+
@XStreamAlias("xml")
13+
public class WxPayShorturlResult extends WxPayBaseResult {
14+
/**
15+
* <pre>
16+
* URL链接
17+
* short_url
18+
* 是
19+
* String(64)
20+
* weixin://wxpay/s/XXXXXX
21+
* 转换后的URL
22+
* </pre>
23+
*/
24+
@XStreamAlias("short_url")
25+
private String shortUrl;
26+
27+
public String getShortUrl() {
28+
return this.shortUrl;
29+
}
30+
31+
public void setShortUrl(String shortUrl) {
32+
this.shortUrl = shortUrl;
33+
}
34+
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,39 @@ WxPayRefundQueryResult refundQuery(String transactionId, String outTradeNo, Stri
267267
* 撤销订单API
268268
* 文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_11&index=3
269269
* 应用场景:
270-
* 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。
271-
* 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。
270+
* 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;
271+
* 如果用户支付成功,微信支付系统会将此订单资金退还给用户。
272+
* 注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。
273+
* 提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。
272274
* 调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。
273275
* 接口链接 :https://api.mch.weixin.qq.com/secapi/pay/reverse
274276
* 是否需要证书:请求需要双向证书。
275-
*</pre>
277+
* </pre>
276278
*/
277279
WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxErrorException;
280+
281+
/**
282+
* <pre>
283+
* 转换短链接
284+
* 应用场景:
285+
* 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
286+
* 接口地址:https://api.mch.weixin.qq.com/tools/shorturl
287+
* 是否需要证书:否
288+
* </pre>
289+
* @param request 请求对象
290+
*/
291+
String shorturl(WxPayShorturlRequest request) throws WxErrorException;
292+
293+
/**
294+
* <pre>
295+
* 转换短链接
296+
* 应用场景:
297+
* 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
298+
* 接口地址:https://api.mch.weixin.qq.com/tools/shorturl
299+
* 是否需要证书:否
300+
* </pre>
301+
* @param longUrl 需要被压缩的网址
302+
*/
303+
String shorturl(String longUrl) throws WxErrorException;
304+
278305
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,22 @@ public WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) th
328328
return result;
329329
}
330330

331+
@Override
332+
public String shorturl(WxPayShorturlRequest request) throws WxErrorException {
333+
request.checkAndSign(this.getConfig());
334+
335+
String url = this.getPayBaseUrl() + "/tools/shorturl";
336+
String responseContent = this.post(url, request.toXML());
337+
WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class);
338+
result.checkResult(this);
339+
return result.getShortUrl();
340+
}
341+
342+
@Override
343+
public String shorturl(String longUrl) throws WxErrorException {
344+
return this.shorturl(new WxPayShorturlRequest(longUrl));
345+
}
346+
331347
private String post(String url, String xmlParam) {
332348
String requestString = xmlParam;
333349
try {

weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@
2828
@Test
2929
@Guice(modules = ApiTestModule.class)
3030
public class WxPayServiceImplTest {
31+
3132
private final Logger logger = LoggerFactory.getLogger(this.getClass());
3233

3334
@Inject
34-
protected WxPayService payService;
35+
private WxPayService payService;
3536

3637
@Test
3738
public void testGetPayInfo() throws Exception {
@@ -221,10 +222,12 @@ public void testMicropay() throws Exception {
221222

222223
@Test
223224
public void testGetConfig() throws Exception {
225+
// no need to test
224226
}
225227

226228
@Test
227229
public void testSetConfig() throws Exception {
230+
// no need to test
228231
}
229232

230233
@Test
@@ -236,4 +239,16 @@ public void testReverseOrder() throws Exception {
236239
this.logger.info(result.toString());
237240
}
238241

242+
@Test
243+
public void testShorturl() throws Exception {
244+
String longUrl = "weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX";
245+
246+
String result = this.payService.shorturl(new WxPayShorturlRequest(longUrl));
247+
assertNotNull(result);
248+
this.logger.info(result.toString());
249+
250+
result = this.payService.shorturl(longUrl);
251+
assertNotNull(result);
252+
this.logger.info(result.toString());
253+
}
239254
}

0 commit comments

Comments
 (0)