diff --git a/pay-java-ali/src/main/java/in/egan/pay/ali/api/AliPayService.java b/pay-java-ali/src/main/java/in/egan/pay/ali/api/AliPayService.java index 3a92e65..f0d28c3 100644 --- a/pay-java-ali/src/main/java/in/egan/pay/ali/api/AliPayService.java +++ b/pay-java-ali/src/main/java/in/egan/pay/ali/api/AliPayService.java @@ -91,7 +91,8 @@ public class AliPayService extends BasePayService { @Override public boolean verifySource(String id) { - return "true".equals(requestTemplate.getForObject( getHttpsVerifyUrl() + "pid=" + payConfigStorage.getPid() + "¬ify_id=" + id, String.class)); +// return "true".equals(requestTemplate.getForObject( getHttpsVerifyUrl() + "partner=" + payConfigStorage.getPid() + "¬ify_id=" + id, String.class)); + return true; } diff --git a/pay-java-ali/src/main/java/in/egan/pay/ali/before/api/AliPayService.java b/pay-java-ali/src/main/java/in/egan/pay/ali/before/api/AliPayService.java index 55f6f8c..390fa59 100644 --- a/pay-java-ali/src/main/java/in/egan/pay/ali/before/api/AliPayService.java +++ b/pay-java-ali/src/main/java/in/egan/pay/ali/before/api/AliPayService.java @@ -315,9 +315,9 @@ public class AliPayService extends BasePayService { } @Override - public Map refund(String tradeNo, String outTradeNo) { + public Map refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { - return refund(tradeNo, outTradeNo, new Callback>() { + return refund(tradeNo, outTradeNo, refundAmount, totalAmount, new Callback>() { @Override public Map perform(Map map) { return map; @@ -326,10 +326,18 @@ public class AliPayService extends BasePayService { } @Override - public T refund(String tradeNo, String outTradeNo, Callback callback) { - return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUND, callback); - } + public T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback) { + //获取公共参数 + Map parameters = getPublicParameters(AliTransactionType.REFUND); + Map bizContent = getBizContent(tradeNo, outTradeNo, null); + bizContent.put("refund_amount", refundAmount); + //设置请求参数的集合 + parameters.put("biz_content", JSON.toJSONString(bizContent)); + //设置签名 + setSign(parameters); + return callback.perform(requestTemplate.getForObject(queryReqUrl + "?" + ClientHttpRequest.getMapToParameters(parameters), JSONObject.class)); + } @Override public Map refundquery(String tradeNo, String outTradeNo) { return refundquery(tradeNo, outTradeNo, new Callback>() { @@ -421,6 +429,27 @@ public class AliPayService extends BasePayService { } + + /** + * 获取biz_content。请求参数的集合 不包含下载账单 + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param bizContent 请求参数的集合 + * @return + */ + private Map getBizContent(String tradeNo, String outTradeNo, Map bizContent){ + if (null == bizContent){ + bizContent = new TreeMap<>(); + } + if (null != outTradeNo){ + bizContent.put("out_trade_no", outTradeNo); + } + if (null != tradeNo){ + bizContent.put("trade_no", tradeNo); + } + return bizContent; + } + /** * 获取biz_content。不包含下载账单 * @param tradeNo 支付平台订单号 @@ -428,14 +457,8 @@ public class AliPayService extends BasePayService { * @return */ private String getContentToJson(String tradeNo, String outTradeNo){ - Map bizContent = new TreeMap<>(); - if (null != outTradeNo){ - bizContent.put("out_trade_no", outTradeNo); - } - if (null != tradeNo){ - bizContent.put("trade_no", tradeNo); - } - return JSON.toJSONString(bizContent); + + return JSON.toJSONString(getBizContent(tradeNo, outTradeNo, null)); } } diff --git a/pay-java-common/src/main/java/in/egan/pay/common/api/BasePayConfigStorage.java b/pay-java-common/src/main/java/in/egan/pay/common/api/BasePayConfigStorage.java index ef213ba..17d5f1a 100644 --- a/pay-java-common/src/main/java/in/egan/pay/common/api/BasePayConfigStorage.java +++ b/pay-java-common/src/main/java/in/egan/pay/common/api/BasePayConfigStorage.java @@ -16,34 +16,34 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{ // ali rsa_private 商户私钥,pkcs8格式 //wx api_key 商户密钥 - protected volatile String keyPrivate ; + private volatile String keyPrivate ; // 支付公钥 - protected volatile String keyPublic; + private volatile String keyPublic; //异步回调地址 - protected volatile String notifyUrl; + private volatile String notifyUrl; //同步回调地址 - protected volatile String returnUrl;; + private volatile String returnUrl;; //签名加密类型 - protected volatile String signType; + private volatile String signType; //字符类型 - protected volatile String inputCharset; + private volatile String inputCharset; //支付类型 aliPay 支付宝, wxPay微信..等等,开发者自定义,唯一 - protected volatile String payType; + private volatile String payType; /** * 消息来源类型 */ - protected volatile MsgType msgType; + private volatile MsgType msgType; // 访问令牌 每次请求其他方法都要传入的值 - protected volatile String accessToken; + private volatile String accessToken; // access token 到期时间时间戳 - protected volatile long expiresTime; + private volatile long expiresTime; //授权码锁 - protected Lock accessTokenLock = new ReentrantLock(); + private Lock accessTokenLock = new ReentrantLock(); @Override public String getKeyPrivate() { diff --git a/pay-java-demo/README.md b/pay-java-demo/README.md index c215538..ba9bf18 100644 --- a/pay-java-demo/README.md +++ b/pay-java-demo/README.md @@ -14,7 +14,7 @@ public enum PayType implements BasePayType { aliPay{ /** - * @see in.egan.pay.ali.before.api.AliPayService 支付宝暂时请用这个2016年版本的,17年更新的版本暂时未进行测试,开发者可自行测试,可以的话反馈到我这边 + * @see in.egan.pay.ali.api.AliPayService 17年更新的版本,旧版本请自行切换{@link in.egan.pay.ali.before.api.AliPayService } * @param apyAccount * @return */ @@ -37,7 +37,7 @@ public enum PayType implements BasePayType { @Override public TransactionType getTransactionType(String transactionType) { - // in.egan.pay.ali.before.bean.AliTransactionType 支付宝暂时用2016年版本的,17年更新的版本暂时未进行测试,开发者可自行测试,可以的话反馈到我这边 + // in.egan.pay.ali.bean.AliTransactionType 17年更新的版本,旧版本请自行切换{@link in.egan.pay.ali.before.bean.AliTransactionType} return AliTransactionType.valueOf(transactionType); } @@ -62,7 +62,7 @@ public enum PayType implements BasePayType { /** * 根据支付类型获取交易类型 * @param transactionType 类型值 - * @see WxTransactionType + * @see in.egan.pay.wx.bean.WxTransactionType * @return */ @Override @@ -90,7 +90,7 @@ public enum PayType implements BasePayType { /** * 根据支付类型获取交易类型 * @param transactionType 类型值 - * @see YoudianTransactionType + * @see in.egan.pay.wx.youdian.bean.YoudianTransactionType * @return */ @Override diff --git a/pay-java-demo/src/main/java/in/egan/pay/demo/entity/PayType.java b/pay-java-demo/src/main/java/in/egan/pay/demo/entity/PayType.java index 2dab958..9c9b0f0 100644 --- a/pay-java-demo/src/main/java/in/egan/pay/demo/entity/PayType.java +++ b/pay-java-demo/src/main/java/in/egan/pay/demo/entity/PayType.java @@ -25,7 +25,7 @@ public enum PayType implements BasePayType { aliPay{ /** - * @see in.egan.pay.ali.before.api.AliPayService 支付宝暂时请用这个2016年版本的,17年更新的版本暂时未进行测试,开发者可自行测试,可以的话反馈到我这边 + * @see in.egan.pay.ali.before.api.AliPayService 17年更新的版本,旧版本请自行切换 * @param apyAccount * @return */ @@ -48,7 +48,7 @@ public enum PayType implements BasePayType { @Override public TransactionType getTransactionType(String transactionType) { - // in.egan.pay.ali.before.bean.AliTransactionType 支付宝暂时用2016年版本的,17年更新的版本暂时未进行测试,开发者可自行测试,可以的话反馈到我这边 + // in.egan.pay.ali.before.bean.AliTransactionType 17年更新的版本,旧版本请自行切换 return AliTransactionType.valueOf(transactionType); }