diff --git a/pay-java-ali/README.md b/pay-java-ali/README.md index 80d677d..37a4ad5 100644 --- a/pay-java-ali/README.md +++ b/pay-java-ali/README.md @@ -158,7 +158,7 @@ #### 交易关闭接口 ```java - Map result = service.query("支付宝单号", "我方系统单号"); + Map result = service.close("支付宝单号", "我方系统单号"); ``` @@ -189,3 +189,19 @@ ``` +#### 转账 + ```java + TransferOrder order = new TransferOrder(); + order.setOutNo("商户转账订单号"); + order.setPayeeAccount("收款方账户,支付宝登录号,支持邮箱和手机号格式"); + order.setAmount(new BigDecimal(10)); + order.setPayerName("付款方姓名, 非必填"); + order.setPayeeName("收款方真实姓名, 非必填"); + order.setRemark("转账备注, 非必填"); + Map result = service.transfer(order); + +``` +#### 转账查询 + ```java + Map result = service.transferQuery("商户转账订单号", "支付平台转账订单号"); +``` 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 7cc7945..4ac6fbb 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 @@ -379,15 +379,9 @@ public class AliPayService extends BasePayService { */ @Override public Map refundquery(String tradeNo, String outTradeNo) { - return refundquery(tradeNo, outTradeNo, new Callback>() { - @Override - public Map perform(Map map) { - return map; - } - }); + return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUNDQUERY); } - /** * 目前只支持日账单 * @param billDate 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; @@ -477,7 +471,7 @@ public class AliPayService extends BasePayService { } /** - * 转账 + * 转账查询 * * @param outNo 商户转账订单号 * @param tradeNo 支付平台转账订单号 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 2c1a27e..ea5638c 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 @@ -260,7 +260,7 @@ public abstract class BasePayService implements PayService { } /** - * 转账 + * 转账查询 * * @param outNo 商户转账订单号 * @param tradeNo 支付平台转账订单号 @@ -273,7 +273,7 @@ public abstract class BasePayService implements PayService { } /** - * 转账 + * 转账查询 * * @param outNo 商户转账订单号 * @param 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 8d8f9ad..155e2b8 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 @@ -322,7 +322,7 @@ public interface PayService { /** - * 转账 + * 转账查询 * * @param outNo 商户转账订单号 * @param tradeNo 支付平台转账订单号 @@ -332,7 +332,7 @@ public interface PayService { Map transferQuery(String outNo, String tradeNo); /** - * 转账 + * 转账查询 * * @param outNo 商户转账订单号 * @param tradeNo 支付平台转账订单号 diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/AliPayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/AliPayController.java index 9d90257..3c9d331 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/AliPayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/AliPayController.java @@ -248,11 +248,37 @@ public class AliPayController { @RequestMapping("secondaryInterface") public Map secondaryInterface(QueryOrder order) { TransactionType type = AliTransactionType.valueOf(order.getTransactionType()); - return service.secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type, new Callback>() { - @Override - public Map perform(Map map) { - return map; - } - }); + return service.secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type); + } + + /** + * 转账 + * + * @param order 转账订单 + * + * @return 对应的转账结果 + */ + @RequestMapping("transfer") + public Map transfer(TransferOrder order) { +// order.setOutNo("转账单号"); +// order.setPayeeAccount("收款方账户,支付宝登录号,支持邮箱和手机号格式"); +// order.setAmount(new BigDecimal(10)); +// order.setPayerName("付款方姓名, 非必填"); +// order.setPayeeName("收款方真实姓名, 非必填"); +// order.setRemark("转账备注, 非必填"); + return service.transfer(order); + } + + /** + * 转账查询 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @RequestMapping("transferQuery") + public Map transferQuery(String outNo, String tradeNo) { + return service.transferQuery(outNo, tradeNo); } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java index 4d228b9..a7b06bc 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java @@ -5,6 +5,7 @@ package com.egzosn.pay.demo.controller; import com.egzosn.pay.ali.bean.AliTransactionType; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; +import com.egzosn.pay.common.api.PayService; import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.util.MatrixToImageWriter; import com.egzosn.pay.common.util.str.StringUtils; @@ -52,21 +53,6 @@ public class PayController { return new ModelAndView("/index.html"); } - /** - * 获取授权页面 - * @param payId - * @param payeeId - * @return - */ - @RequestMapping("getAuthorizationPage.json") - public Map getAuthorizationPage(Integer payId,String payeeId ){ - PayResponse payResponse = service.getPayResponse(payId); - PayoneerPayService payoneerPayService = (PayoneerPayService) payResponse.getService(); - Map data = new LinkedHashMap<>(); - data.put("code", 0); - data.put("url", payoneerPayService.getAuthorizationPage(payeeId)); - return data; - } @@ -433,13 +419,35 @@ public class PayController { public Map secondaryInterface(QueryOrder order) { PayResponse payResponse = service.getPayResponse(order.getPayId()); TransactionType type = PayType.valueOf(payResponse.getStorage().getPayType()).getTransactionType(order.getTransactionType()); - return payResponse.getService().secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type, new Callback>() { - @Override - public Map perform(Map map) { - return map; - } - }); + return payResponse.getService().secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type); } + /** + * 转账 + * + * @param order 转账订单 + * + * @return 对应的转账结果 + */ + @RequestMapping("transfer") + public Map transfer(int payId, TransferOrder order) { + PayService service = this.service.getPayResponse(payId).getService(); + return service.transfer(order); + } + + /** + * 转账查询 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @RequestMapping("transferQuery") + public Map transferQuery(int payId, String outNo, String tradeNo) { + PayService service = this.service.getPayResponse(payId).getService(); + return service.transferQuery(outNo, tradeNo); + } + } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayoneerPayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayoneerPayController.java new file mode 100644 index 0000000..3f44923 --- /dev/null +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayoneerPayController.java @@ -0,0 +1,201 @@ +package com.egzosn.pay.demo.controller; + +import com.egzosn.pay.ali.bean.AliTransactionType; +import com.egzosn.pay.common.api.Callback; +import com.egzosn.pay.common.api.PayConfigStorage; +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.*; +import com.egzosn.pay.common.http.HttpConfigStorage; +import com.egzosn.pay.demo.request.QueryOrder; +import com.egzosn.pay.demo.service.PayResponse; +import com.egzosn.pay.payoneer.api.PayoneerConfigStorage; +import com.egzosn.pay.payoneer.api.PayoneerPayService; +import com.egzosn.pay.payoneer.bean.PayoneerTransactionType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +/** + * @author egan + * @email egzosn@gmail.com + * @date 2018/2/5 + */ +@RestController +@RequestMapping("payoneer") +public class PayoneerPayController { + + + private PayoneerPayService service = null; + + @PostConstruct + public void init() { + PayoneerConfigStorage configStorage = new PayoneerConfigStorage(); + configStorage.setProgramId("商户id"); + configStorage.setMsgType(MsgType.json); + configStorage.setInputCharset("utf-8"); + configStorage.setTest(true); + + //Basic Auth + HttpConfigStorage httpConfigStorage = new HttpConfigStorage(); + httpConfigStorage.setAuthUsername("PayoneerPay 用户名"); + httpConfigStorage.setAuthPassword("PayoneerPay API password"); + service = new PayoneerPayService(configStorage, httpConfigStorage); + + + } + + + /** + * 获取授权页面 + * @param payeeId + * @return + */ + @RequestMapping("getAuthorizationPage.json") + public Map getAuthorizationPage( String payeeId ){ + + Map data = new LinkedHashMap<>(); + data.put("code", 0); + data.put("url", service.getAuthorizationPage(payeeId)); + return data; + } + + + /** + * 主动收款 + * @param price 金额 + * @param userId 付款用户 + * @return 支付结果 + */ + @ResponseBody + @RequestMapping(value = "microPay.json") + public Map microPay(BigDecimal price, String userId) throws IOException { + + PayOrder order = new PayOrder("Order_payment:", "Order payment", price, UUID.randomUUID().toString().replace("-", ""), PayoneerTransactionType.CHARGE); + //币种 + order.setCurType(CurType.USD); + //设置授权码,条码等 + order.setAuthCode( userId); + //支付结果 + Map params = service.microPay(order); + if (10700 == (Integer) params.get(PayoneerPayService.CODE)){ + System.out.println("未授权"); + }else if (0 == (Integer) params.get(PayoneerPayService.CODE)){ + System.out.println("收款成功"); + } + return params; + } + + + + /** + * 用户授权回调地址 + * + * @param request + * + * @return + */ + @RequestMapping(value = "payBack.json") + public String payBack(HttpServletRequest request) throws IOException { + + //获取支付方返回的对应参数 + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (null == params) { + return service.getPayOutMessage("fail", "失败").toMessage(); + } + + //校验 + if (service.verify(params)) { + //这里处理业务逻辑 + //......业务逻辑处理块........ + return service.getPayOutMessage("success", "成功").toMessage(); + } + + return service.getPayOutMessage("fail", "失败").toMessage(); + } + + /** + * 查询 + * + * @param order 订单的请求体 + * @return 返回查询回来的结果集,支付方原值返回 + */ + @RequestMapping("query") + public Map query(QueryOrder order) { + return service.query(order.getTradeNo(), order.getOutTradeNo()); + } + + + /** + * 交易关闭接口 + * + * @param order 订单的请求体 + * @return 返回支付方交易关闭后的结果 + */ + @RequestMapping("close") + public Map close(QueryOrder order) { + return service.close(order.getTradeNo(), order.getOutTradeNo()); + } + /** + * 申请退款接口 + * + * @param order 订单的请求体 + * @return 返回支付方申请退款后的结果 + */ + @RequestMapping("refund") + public Map refund(RefundOrder order) { + return service.refund(order); + } + + + /** + * 通用查询接口,根据 PayoneerTransactionType 类型进行实现 + * + * @param order 订单的请求体 + * @return 返回支付方对应接口的结果 + */ + @RequestMapping("secondaryInterface") + public Map secondaryInterface(QueryOrder order) { + TransactionType type = PayoneerTransactionType.valueOf(order.getTransactionType()); + return service.secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type); + } + + + /** + * 转账 + * + * @param order 转账订单 + * + * @return 对应的转账结果 + */ + @RequestMapping("transfer") + public Map transfer(TransferOrder order) { + order.setOutNo("商户转账订单号"); + order.setCurType(CurType.USD); + order.setPayeeAccount("收款方账户,用户授权所使用的userId"); + order.setAmount(new BigDecimal(10)); + order.setRemark("转账备注, 非必填"); + return service.transfer(order); + } + + /** + * 转账查询 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @RequestMapping("transferQuery") + public Map transferQuery(String outNo, String tradeNo) { + return service.transferQuery(outNo, tradeNo); + } + +} diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/WxPayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/WxPayController.java index 709a30d..c32d6db 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/WxPayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/WxPayController.java @@ -4,16 +4,14 @@ package com.egzosn.pay.demo.controller; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayService; -import com.egzosn.pay.common.bean.MethodType; -import com.egzosn.pay.common.bean.PayOrder; -import com.egzosn.pay.common.bean.RefundOrder; -import com.egzosn.pay.common.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.http.UriVariables; import com.egzosn.pay.demo.entity.PayType; import com.egzosn.pay.demo.request.QueryOrder; import com.egzosn.pay.demo.service.PayResponse; import com.egzosn.pay.wx.api.WxPayConfigStorage; import com.egzosn.pay.wx.api.WxPayService; +import com.egzosn.pay.wx.bean.WxBank; import com.egzosn.pay.wx.bean.WxTransactionType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -46,8 +44,8 @@ public class WxPayController { WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage(); wxPayConfigStorage.setMchId("合作者id(商户号)"); wxPayConfigStorage.setAppid("应用id"); - wxPayConfigStorage.setKeyPublic("密钥"); - wxPayConfigStorage.setKeyPrivate("密钥"); + wxPayConfigStorage.setKeyPublic("转账公钥,转账时必填"); + wxPayConfigStorage.setSecretKey("密钥"); wxPayConfigStorage.setNotifyUrl("异步回调地址"); wxPayConfigStorage.setReturnUrl("同步回调地址"); wxPayConfigStorage.setSignType("签名方式"); @@ -255,11 +253,40 @@ public class WxPayController { @RequestMapping("secondaryInterface") public Map secondaryInterface(QueryOrder order) { TransactionType type = WxTransactionType.valueOf(order.getTransactionType()); - return service.secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type, new Callback>() { - @Override - public Map perform(Map map) { - return map; - } - }); + return service.secondaryInterface(order.getTradeNoOrBillDate(), order.getOutTradeNoBillType(), type); + } + + + + /** + * 转账 + * + * @param order 转账订单 + * + * @return 对应的转账结果 + */ + @RequestMapping("transfer") + public Map transfer(TransferOrder order) { + order.setOutNo("partner_trade_no 商户转账订单号"); + //采用标准RSA算法,公钥由微信侧提供,将公钥信息配置在PayConfigStorage#setKeyPublic(String) + order.setPayeeAccount("enc_bank_no 收款方银行卡号"); + order.setPayeeName("收款方用户名"); + order.setBank(WxBank.ABC); + order.setRemark("转账备注, 非必填"); + order.setAmount(new BigDecimal(10)); + return service.transfer(order); + } + + /** + * 转账查询 + * + * @param outNo 商户转账订单号 + * @param tradeNo 支付平台转账订单号 + * + * @return 对应的转账订单 + */ + @RequestMapping("transferQuery") + public Map transferQuery(String outNo, String tradeNo) { + return service.transferQuery(outNo, tradeNo); } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/entity/PayType.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/entity/PayType.java index 31ba5a4..415b82f 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/entity/PayType.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/entity/PayType.java @@ -5,6 +5,7 @@ import com.egzosn.pay.ali.api.AliPayService; import com.egzosn.pay.ali.bean.AliTransactionType; import com.egzosn.pay.common.api.PayService; import com.egzosn.pay.common.bean.BasePayType; +import com.egzosn.pay.common.bean.MsgType; import com.egzosn.pay.common.bean.TransactionType; import com.egzosn.pay.common.http.HttpConfigStorage; import com.egzosn.pay.fuiou.api.FuiouPayConfigStorage; @@ -73,9 +74,10 @@ public enum PayType implements BasePayType { public PayService getPayService(ApyAccount apyAccount) { WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage(); wxPayConfigStorage.setMchId(apyAccount.getPartner()); - wxPayConfigStorage.setKeyPublic(apyAccount.getPublicKey()); wxPayConfigStorage.setAppid(apyAccount.getAppid()); - wxPayConfigStorage.setKeyPrivate(apyAccount.getPrivateKey()); + //转账公钥,转账时必填 + wxPayConfigStorage.setKeyPublic(apyAccount.getPublicKey()); + wxPayConfigStorage.setSecretKey(apyAccount.getPrivateKey()); wxPayConfigStorage.setNotifyUrl(apyAccount.getNotifyUrl()); wxPayConfigStorage.setReturnUrl(apyAccount.getReturnUrl()); wxPayConfigStorage.setSignType(apyAccount.getSignType()); @@ -177,23 +179,17 @@ public enum PayType implements BasePayType { },payoneer{ @Override public PayService getPayService(ApyAccount apyAccount) { - PayoneerConfigStorage payoneerConfigStorage = new PayoneerConfigStorage(); - payoneerConfigStorage.setProgramId(apyAccount.getPartner()); - payoneerConfigStorage.setKeyPublic(apyAccount.getPublicKey()); - payoneerConfigStorage.setKeyPrivate(apyAccount.getPrivateKey()); - payoneerConfigStorage.setNotifyUrl(apyAccount.getNotifyUrl()); - payoneerConfigStorage.setReturnUrl(apyAccount.getReturnUrl()); - payoneerConfigStorage.setSignType(apyAccount.getSignType()); - payoneerConfigStorage.setPayType(apyAccount.getPayType().toString()); - payoneerConfigStorage.setMsgType(apyAccount.getMsgType()); - payoneerConfigStorage.setInputCharset(apyAccount.getInputCharset()); - payoneerConfigStorage.setTest(apyAccount.isTest()); + PayoneerConfigStorage configStorage = new PayoneerConfigStorage(); + configStorage.setProgramId("商户id"); + configStorage.setMsgType(MsgType.json); + configStorage.setInputCharset("utf-8"); + configStorage.setTest(true); //Basic Auth HttpConfigStorage httpConfigStorage = new HttpConfigStorage(); - httpConfigStorage.setHttpProxyUsername(apyAccount.getSeller()); - httpConfigStorage.setHttpProxyPassword(apyAccount.getStorePassword()); - return new PayoneerPayService(payoneerConfigStorage,httpConfigStorage); + httpConfigStorage.setAuthUsername("PayoneerPay 用户名"); + httpConfigStorage.setAuthPassword("PayoneerPay API password"); + return new PayoneerPayService(configStorage, httpConfigStorage); } @Override diff --git a/pay-java-payoneer/README.md b/pay-java-payoneer/README.md index 23105d1..d7d2856 100644 --- a/pay-java-payoneer/README.md +++ b/pay-java-payoneer/README.md @@ -4,5 +4,133 @@ #### 支付配置 +```java + + PayoneerConfigStorage configStorage = new PayoneerConfigStorage(); + configStorage.setProgramId("商户id"); + configStorage.setMsgType(MsgType.json); + configStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 + configStorage.setTest(true); + +``` + +#### 网络请求配置 + +```java + + //Basic Auth + HttpConfigStorage httpConfigStorage = new HttpConfigStorage(); + httpConfigStorage.setAuthUsername("PayoneerPay 用户名"); + httpConfigStorage.setAuthPassword("PayoneerPay API password"); + +``` + + +#### 创建支付服务 + + +```java + //支付服务 + PayoneerPayService service = new PayoneerPayService(configStorage, httpConfigStorage); + +``` + +#### 用户授权 + +```java + //授权的地址 + String url = service.getAuthorizationPage("用户标识,一般为用户id或者账单id"); + +``` + + +#### 创建支付订单信息 + +```java + + //支付订单基础信息 + PayOrder order = new PayOrder("Order_payment:", "Order payment", price, UUID.randomUUID().toString().replace("-", ""), PayoneerTransactionType.CHARGE); + +``` + +#### 发起扣款 + +```java + + + //币种 + order.setCurType(CurType.USD); + //设置授权码,条码等 + order.setAuthCode( userId); + //支付结果 + Map params = service.microPay(order); + + if (10700 == (Integer) params.get(PayoneerPayService.CODE)){ + System.out.println("未授权"); + }else if (0 == (Integer) params.get(PayoneerPayService.CODE)){ + System.out.println("收款成功"); + } +``` + +#### 授权回调处理 + +```java + + /*-----------回调处理-------------------*/ + //HttpServletRequest request; + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + //这里自行处理, + + + /*-----------回调处理-------------------*/ + +``` + + + + +#### 支付订单查询 + +```java + + Map result = service..query(null, "我方系统单号"); + +``` + + +#### 取消交易接口(交易关闭接口) + ```java + + Map result = service.query(null, "我方系统单号"); + +``` + +#### 取消交易接口(退款) + ```java + //过时方法 + //Map result = service.refund(null, "我方系统单号", null, null); + //支付宝单号与我方系统单号二选一 + RefundOrder order = new RefundOrder(null, "我方系统单号", null, null); + Map result = service.refund(order); + +``` + + +#### 转账 + ```java + TransferOrder order = new TransferOrder(); + order.setOutNo("商户转账订单号"); + order.setCurType(CurType.USD); + order.setPayeeAccount("收款方账户,用户授权所使用的userId"); + order.setAmount(new BigDecimal(10)); + order.setRemark("转账备注, 非必填"); + Map result = service.transfer(order); + +``` +#### 转账查询 + ```java + Map result = service.transferQuery("商户转账订单号", null); +``` diff --git a/pay-java-wx/README.md b/pay-java-wx/README.md index 3f7ca57..5d7d77e 100644 --- a/pay-java-wx/README.md +++ b/pay-java-wx/README.md @@ -151,7 +151,7 @@ #### 交易关闭接口 ```java - Map result = service..query("微信单号", "我方系统单号"); + Map result = service..close("微信单号", "我方系统单号"); ``` @@ -181,4 +181,22 @@ Map result = service.downloadbill("账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM", "账单类型"); -``` \ No newline at end of file +``` + +#### 转账 + ```java + + order.setOutNo("partner_trade_no 商户转账订单号"); + //采用标准RSA算法,公钥由微信侧提供,将公钥信息配置在PayConfigStorage#setKeyPublic(String) + order.setPayeeAccount("enc_bank_no 收款方银行卡号"); + order.setPayeeName("收款方用户名"); + order.setBank(WxBank.ABC); + order.setRemark("转账备注, 非必填"); + order.setAmount(new BigDecimal(10)); + Map result = service.transfer(order); + +``` +#### 转账查询 + ```java + Map result = service.transferQuery("商户转账订单号", "支付平台转账订单号"); +``` 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 7b87a75..53a15b9 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 @@ -517,6 +517,8 @@ public class WxPayService extends BasePayService { @Override public Map transfer(TransferOrder order) { Map parameters = new TreeMap(); + //转账到余额 +// parameters.put("mch_appid", payConfigStorage.getAppid()); parameters.put("mch_id", payConfigStorage.getPid()); parameters.put("partner_trade_no", order.getOutNo()); parameters.put("nonce_str", SignUtils.randomStr()); diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/BankWx.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxBank.java similarity index 93% rename from pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/BankWx.java rename to pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxBank.java index efb5fc1..023145e 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/BankWx.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxBank.java @@ -10,7 +10,7 @@ import com.egzosn.pay.common.bean.Bank; * date 2018/1/31 * */ -public enum BankWx implements Bank{ +public enum WxBank implements Bank{ ICBC("工商银行","1002"), ABC("农业银行","1005"), BOC("中国银行","1026"), @@ -33,7 +33,7 @@ public enum BankWx implements Bank{ private String code; - BankWx(String name, String code) { + WxBank(String name, String code) { this.name = name; this.code = code; }