From 93b3eee7d80b43b106662c516c6f372f9ef9d0e6 Mon Sep 17 00:00:00 2001 From: egzosn Date: Thu, 1 Feb 2018 13:57:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E8=BD=AC=E8=B4=A6=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/egzosn/pay/ali/api/AliPayService.java | 41 ++++++++++++++++++- .../pay/ali/bean/AliTransactionType.java | 11 ++++- .../egzosn/pay/common/api/BasePayService.java | 29 ++++++++++++- .../com/egzosn/pay/common/api/PayService.java | 23 +++++++++++ .../pay/common/util/sign/SignUtils.java | 1 + .../com/egzosn/pay/wx/api/WxPayService.java | 27 +++++++++++- .../egzosn/pay/wx/bean/WxTransactionType.java | 10 ++++- 7 files changed, 136 insertions(+), 6 deletions(-) diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java index b1e90a5..91dffb8 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayService.java @@ -458,7 +458,46 @@ public class AliPayService extends BasePayService { */ @Override public Map transfer(TransferOrder order) { - return null; + //获取公共参数 + Map parameters = getPublicParameters(AliTransactionType.TRANS); + + Map bizContent = new TreeMap(); + bizContent.put("out_biz_no", order.getOutNo()); + bizContent.put("payee_type", "ALIPAY_LOGONID"); + bizContent.put("payee_account", order.getPayeeAccount()); + bizContent.put("amount", order.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP)); + bizContent.put("payer_show_name", order.getPayerName()); + bizContent.put("payee_real_name", order.getPayeeName()); + bizContent.put("remark", order.getRemark()); + //设置请求参数的集合 + parameters.put("biz_content", JSON.toJSONString(bizContent)); + //设置签名 + setSign(parameters); + return getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), null, JSONObject.class); + } + + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @Override + public Map transferQuery(String outNo, String tradeNo) { + //获取公共参数 + Map parameters = getPublicParameters(AliTransactionType.TRANS_QUERY); + + Map bizContent = new TreeMap(); + if (StringUtils.isEmpty(outNo)){ + bizContent.put("order_id", tradeNo); + }else { + bizContent.put("out_biz_no", outNo); + } + //设置请求参数的集合 + parameters.put("biz_content", JSON.toJSONString(bizContent)); + return getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), null, JSONObject.class); } /** diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java index 56f0899..b7b5c6b 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/bean/AliTransactionType.java @@ -64,8 +64,15 @@ public enum AliTransactionType implements TransactionType { /** * 下载对账单 */ - DOWNLOADBILL("alipay.data.dataservice.bill.downloadurl.query") - + DOWNLOADBILL("alipay.data.dataservice.bill.downloadurl.query"), + /** + * 转账到支付宝 + */ + TRANS("alipay.fund.trans.toaccount.transfer"), + /** + * 转账查询 + */ + TRANS_QUERY("alipay.fund.trans.order.query") ; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java index c36a264..2c1a27e 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayService.java @@ -256,6 +256,33 @@ public abstract class BasePayService implements PayService { */ @Override public Map transfer(TransferOrder order) { - return new HashMap<>(); + return new HashMap<>(0); + } + + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @Override + public Map transferQuery(String outNo, String tradeNo){ + return new HashMap<>(0); + } + + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * @param callback 处理器 + * @param 返回类型 + * @return 对应的转账订单 + */ + @Override + public T transferQuery(String outNo, String tradeNo, Callback callback){ + return callback.perform(transferQuery(outNo, tradeNo)); } } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java index da7b386..8d8f9ad 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayService.java @@ -321,4 +321,27 @@ public interface PayService { + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + Map transferQuery(String outNo, String tradeNo); + + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * @param callback 处理器 + * @param 返回类型 + * @return 对应的转账订单 + */ + T transferQuery(String outNo, String tradeNo, Callback callback); + + + } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java index 37eb85e..7f1ce19 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java @@ -338,4 +338,5 @@ public enum SignUtils { */ public abstract boolean verify(String text, String sign, String key, String characterEncoding); + } diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java index bb72228..7b87a75 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java @@ -518,13 +518,35 @@ public class WxPayService extends BasePayService { public Map transfer(TransferOrder order) { Map parameters = new TreeMap(); parameters.put("mch_id", payConfigStorage.getPid()); + parameters.put("partner_trade_no", order.getOutNo()); parameters.put("nonce_str", SignUtils.randomStr()); + parameters.put("enc_bank_no", keyPublic(order.getPayeeAccount())); + parameters.put("enc_true_name", keyPublic(order.getPayeeName())); + parameters.put("bank_code", order.getBank().getCode()); parameters.put("amount", conversion(order.getAmount())); if (!StringUtils.isEmpty(order.getRemark())){ parameters.put("desc", order.getRemark()); } + parameters.put(SIGN, SignUtils.valueOf(payConfigStorage.getSignType()).sign(parameters, payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset())); + return getHttpRequestTemplate().postForObject(getUrl(WxTransactionType.BANK), parameters, JSONObject.class); + } - return null; + /** + * 转账 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @Override + public Map transferQuery(String outNo, String tradeNo) { + Map parameters = new TreeMap(); + parameters.put("mch_id", payConfigStorage.getPid()); + parameters.put("partner_trade_no", StringUtils.isEmpty(outNo) ? tradeNo : outNo); + parameters.put("nonce_str", SignUtils.randomStr()); + parameters.put(SIGN, SignUtils.valueOf(payConfigStorage.getSignType()).sign(parameters, payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset())); + return getHttpRequestTemplate().postForObject(getUrl(WxTransactionType.QUERY_BANK), parameters, JSONObject.class); } /** @@ -536,4 +558,7 @@ public class WxPayService extends BasePayService { return amount.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue(); } + public String keyPublic(String content){ + return SignUtils.RSA.createSign(content, payConfigStorage.getKeyPublic(), payConfigStorage.getInputCharset()); + } } diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java index 46b7e39..8ff8252 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxTransactionType.java @@ -86,7 +86,15 @@ public enum WxTransactionType implements TransactionType { /** * 下载对账单 */ - DOWNLOADBILL("pay/downloadbill") + DOWNLOADBILL("pay/downloadbill"), + /** + * 银行卡转账 + */ + BANK("mmpaysptrans/pay_bank"), + /** + * 转账查询 + */ + QUERY_BANK("mmpaysptrans/query_bank") ; WxTransactionType(String method) {