mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-07-15 05:13:16 +08:00
增加微信支付转换短链接API #101
This commit is contained in:
parent
d7d5b169d1
commit
96d72fe542
@ -0,0 +1,46 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.request;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 转换短链接请求对象类
|
||||||
|
* Created by Binary Wang on 2017-3-27.
|
||||||
|
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class WxPayShorturlRequest extends WxPayBaseRequest {
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 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
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@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
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ import com.thoughtworks.xstream.annotations.XStreamAlias;
|
|||||||
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
|
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
|
@XStreamAlias("xml")
|
||||||
public class WxPayOrderReverseResult extends WxPayBaseResult {
|
public class WxPayOrderReverseResult extends WxPayBaseResult {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.result;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 转换短链接结果对象类
|
||||||
|
* Created by Binary Wang on 2017-3-27.
|
||||||
|
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class WxPayShorturlResult extends WxPayBaseResult {
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* URL链接
|
||||||
|
* short_url
|
||||||
|
* 是
|
||||||
|
* String(64)
|
||||||
|
* weixin://wxpay/s/XXXXXX
|
||||||
|
* 转换后的URL
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("short_url")
|
||||||
|
private String shortUrl;
|
||||||
|
|
||||||
|
public String getShortUrl() {
|
||||||
|
return this.shortUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShortUrl(String shortUrl) {
|
||||||
|
this.shortUrl = shortUrl;
|
||||||
|
}
|
||||||
|
}
|
@ -267,12 +267,39 @@ public interface WxPayService {
|
|||||||
* 撤销订单API
|
* 撤销订单API
|
||||||
* 文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_11&index=3
|
* 文档地址: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后再调用撤销订单接口。
|
* 调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。
|
||||||
* 接口链接 :https://api.mch.weixin.qq.com/secapi/pay/reverse
|
* 接口链接 :https://api.mch.weixin.qq.com/secapi/pay/reverse
|
||||||
* 是否需要证书:请求需要双向证书。
|
* 是否需要证书:请求需要双向证书。
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxErrorException;
|
WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 转换短链接
|
||||||
|
* 应用场景:
|
||||||
|
* 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
|
||||||
|
* 接口地址:https://api.mch.weixin.qq.com/tools/shorturl
|
||||||
|
* 是否需要证书:否
|
||||||
|
* </pre>
|
||||||
|
* @param request 请求对象
|
||||||
|
*/
|
||||||
|
String shorturl(WxPayShorturlRequest request) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 转换短链接
|
||||||
|
* 应用场景:
|
||||||
|
* 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量,提升扫描速度和精确度。
|
||||||
|
* 接口地址:https://api.mch.weixin.qq.com/tools/shorturl
|
||||||
|
* 是否需要证书:否
|
||||||
|
* </pre>
|
||||||
|
* @param longUrl 需要被压缩的网址
|
||||||
|
*/
|
||||||
|
String shorturl(String longUrl) throws WxErrorException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -328,6 +328,22 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
return result;
|
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) {
|
private String post(String url, String xmlParam) {
|
||||||
String requestString = xmlParam;
|
String requestString = xmlParam;
|
||||||
try {
|
try {
|
||||||
|
@ -28,10 +28,11 @@ import static org.testng.Assert.*;
|
|||||||
@Test
|
@Test
|
||||||
@Guice(modules = ApiTestModule.class)
|
@Guice(modules = ApiTestModule.class)
|
||||||
public class WxPayServiceImplTest {
|
public class WxPayServiceImplTest {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
protected WxPayService payService;
|
private WxPayService payService;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetPayInfo() throws Exception {
|
public void testGetPayInfo() throws Exception {
|
||||||
@ -221,10 +222,12 @@ public class WxPayServiceImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetConfig() throws Exception {
|
public void testGetConfig() throws Exception {
|
||||||
|
// no need to test
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetConfig() throws Exception {
|
public void testSetConfig() throws Exception {
|
||||||
|
// no need to test
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -236,4 +239,16 @@ public class WxPayServiceImplTest {
|
|||||||
this.logger.info(result.toString());
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user