mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-08-24 16:18:51 +08:00
🆕 #1532 微信支付模块增加汇率查询的接口
This commit is contained in:
parent
4eb1d1d71a
commit
06c8ae81d2
@ -170,6 +170,13 @@ public abstract class BaseWxPayRequest implements Serializable {
|
|||||||
*/
|
*/
|
||||||
protected abstract void checkConstraints() throws WxPayException;
|
protected abstract void checkConstraints() throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否需要nonce_str
|
||||||
|
*/
|
||||||
|
protected boolean needNonceStr() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 如果配置中已经设置,可以不设置值.
|
* 如果配置中已经设置,可以不设置值.
|
||||||
*
|
*
|
||||||
@ -363,7 +370,7 @@ public abstract class BaseWxPayRequest implements Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isBlank(getNonceStr())) {
|
if (needNonceStr() && StringUtils.isBlank(getNonceStr())) {
|
||||||
this.setNonceStr(String.valueOf(System.currentTimeMillis()));
|
this.setNonceStr(String.valueOf(System.currentTimeMillis()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.request;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询汇率请求.
|
||||||
|
*
|
||||||
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
|
* @date 2020-05-23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class WxPayQueryExchangeRateRequest extends BaseWxPayRequest {
|
||||||
|
private static final long serialVersionUID = -8796516942563060554L;
|
||||||
|
/**
|
||||||
|
* 币种
|
||||||
|
* fee_type
|
||||||
|
* 是
|
||||||
|
* String(10)
|
||||||
|
* USD
|
||||||
|
* 外币币种
|
||||||
|
*/
|
||||||
|
@XStreamAlias("fee_type")
|
||||||
|
private String feeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期
|
||||||
|
* date
|
||||||
|
* 是
|
||||||
|
* String(14)
|
||||||
|
* 20150807
|
||||||
|
* 格式为yyyyMMdd,如2009年12月25日表示为20091225。时区为GMT+8 beijing
|
||||||
|
*/
|
||||||
|
@XStreamAlias("date")
|
||||||
|
private String date;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void storeMap(Map<String, String> map) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean needNonceStr() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.result;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇率查询响应.
|
||||||
|
*
|
||||||
|
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||||
|
* @date 2020-05-23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class WxPayQueryExchangeRateResult extends BaseWxPayResult {
|
||||||
|
private static final long serialVersionUID = 2269734222658532364L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 币种
|
||||||
|
* fee_type
|
||||||
|
* 是
|
||||||
|
* String(10)
|
||||||
|
* SUCCESS 外币币种,详细请见参数规定
|
||||||
|
*/
|
||||||
|
@XStreamAlias("fee_type")
|
||||||
|
private String feeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇率时间
|
||||||
|
* rate_time
|
||||||
|
* 是
|
||||||
|
* String(14)
|
||||||
|
* 20150807131545
|
||||||
|
* 格式:yyyyMMddhhmmss
|
||||||
|
*/
|
||||||
|
@XStreamAlias("rate_time")
|
||||||
|
private String rateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 现汇卖出价
|
||||||
|
* rate
|
||||||
|
* 是
|
||||||
|
* String(15)
|
||||||
|
* 系统错误
|
||||||
|
* 外币标准单位乘以100折算为人民币的金额,保留4位小数(如:100美元按当时汇率折算返回的先汇卖出价是628.2100)
|
||||||
|
*/
|
||||||
|
@XStreamAlias("rate")
|
||||||
|
private String rate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void loadXML(Document d) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -65,12 +65,10 @@ public interface WxPayService {
|
|||||||
*/
|
*/
|
||||||
String postV3(String url, String requestStr) throws WxPayException;
|
String postV3(String url, String requestStr) throws WxPayException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送get V3请求,得到响应字符串.
|
* 发送get V3请求,得到响应字符串.
|
||||||
*
|
*
|
||||||
* @param url 请求地址
|
* @param url 请求地址
|
||||||
* @param param 请求信息
|
|
||||||
* @return 返回请求结果字符串 string
|
* @return 返回请求结果字符串 string
|
||||||
* @throws WxPayException the wx pay exception
|
* @throws WxPayException the wx pay exception
|
||||||
*/
|
*/
|
||||||
@ -200,11 +198,11 @@ public interface WxPayService {
|
|||||||
/**
|
/**
|
||||||
* 调用统一下单接口,并组装生成支付所需参数对象.
|
* 调用统一下单接口,并组装生成支付所需参数对象.
|
||||||
*
|
*
|
||||||
* @see WxPayService#createOrder(WxPayUnifiedOrderRequest)
|
|
||||||
* @param specificTradeType 将使用的交易方式,不能为 null
|
* @param specificTradeType 将使用的交易方式,不能为 null
|
||||||
* @param request 统一下单请求参数,设定的 tradeType 及配置里的 tradeType 将被忽略,转而使用 specificTradeType
|
* @param request 统一下单请求参数,设定的 tradeType 及配置里的 tradeType 将被忽略,转而使用 specificTradeType
|
||||||
* @return 返回 {@link WxPayConstants.TradeType.Specific} 指定的类
|
* @return 返回 {@link WxPayConstants.TradeType.Specific} 指定的类
|
||||||
* @throws WxPayException the wx pay exception
|
* @throws WxPayException the wx pay exception
|
||||||
|
* @see WxPayService#createOrder(WxPayUnifiedOrderRequest)
|
||||||
*/
|
*/
|
||||||
<T> T createOrder(WxPayConstants.TradeType.Specific<T> specificTradeType, WxPayUnifiedOrderRequest request) throws WxPayException;
|
<T> T createOrder(WxPayConstants.TradeType.Specific<T> specificTradeType, WxPayUnifiedOrderRequest request) throws WxPayException;
|
||||||
|
|
||||||
@ -759,5 +757,18 @@ public interface WxPayService {
|
|||||||
*/
|
*/
|
||||||
WxPayFacepayResult facepay(WxPayFacepayRequest request) throws WxPayException;
|
WxPayFacepayResult facepay(WxPayFacepayRequest request) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询汇率
|
||||||
|
* <pre>
|
||||||
|
* 应用场景:商户网站的商品以外币标价时,通过该接口可以实时查询到微信使用的转换汇率。汇率更新时间为北京时间上午10:00,一天更新一次。
|
||||||
|
* 文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app_jw.php?chapter=9_15&index=12
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/pay/queryexchagerate
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param feeType 外币币种
|
||||||
|
* @param date 日期,格式为yyyyMMdd,如2009年12月25日表示为20091225。时区为GMT+8 beijing
|
||||||
|
* @return .
|
||||||
|
* @throws WxPayException .
|
||||||
|
*/
|
||||||
|
WxPayQueryExchangeRateResult queryExchangeRate(String feeType, String date) throws WxPayException;
|
||||||
}
|
}
|
||||||
|
@ -831,4 +831,18 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxPayQueryExchangeRateResult queryExchangeRate(String feeType, String date) throws WxPayException {
|
||||||
|
WxPayQueryExchangeRateRequest request = new WxPayQueryExchangeRateRequest();
|
||||||
|
request.setFeeType(feeType);
|
||||||
|
request.setDate(date);
|
||||||
|
|
||||||
|
request.checkAndSign(this.getConfig());
|
||||||
|
|
||||||
|
String url = this.getPayBaseUrl() + "/pay/queryexchagerate";
|
||||||
|
String responseContent = this.post(url, request.toXML(), false);
|
||||||
|
WxPayQueryExchangeRateResult result = BaseWxPayResult.fromXML(responseContent, WxPayQueryExchangeRateResult.class);
|
||||||
|
result.checkResult(this, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,8 @@ public class BaseWxPayServiceImplTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFacepay() {
|
public void testFacepay() throws WxPayException {
|
||||||
|
final WxPayFacepayResult result = this.payService.facepay(WxPayFacepayRequest.newBuilder().build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -673,4 +674,16 @@ public class BaseWxPayServiceImplTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testTestQueryRedpack() {
|
public void testTestQueryRedpack() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetPayScoreService() {
|
||||||
|
// no need to test
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testQueryExchangeRate() throws WxPayException {
|
||||||
|
final WxPayQueryExchangeRateResult result = this.payService.queryExchangeRate("USD", "20200425");
|
||||||
|
assertThat(result).isNotNull();
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user