From c3c23b836e74b157fb2169205194679d2eee6b76 Mon Sep 17 00:00:00 2001 From: egzosn Date: Tue, 25 Apr 2017 22:33:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/ali/api/AliPayConfigStorage.java | 11 +- .../com/egzosn/pay/ali/api/AliPayService.java | 136 ++++-- .../pay/ali/bean/AliTransactionType.java | 7 +- .../pay/ali/before/api/AliPayService.java | 141 ++++-- .../ali/before/bean/AliTransactionType.java | 8 +- .../before/util/SimpleGetRequestExecutor.java | 54 --- .../pay/common/api/BasePayConfigStorage.java | 6 +- .../egzosn/pay/common/api/BasePayService.java | 23 +- .../com/egzosn/pay/common/api/Callback.java | 12 +- .../pay/common/api/PayConfigStorage.java | 37 +- .../common/api/PayErrorExceptionHandler.java | 8 +- .../pay/common/api/PayMessageHandler.java | 17 +- .../pay/common/api/PayMessageInterceptor.java | 15 +- .../pay/common/api/PayMessageRouter.java | 21 +- .../pay/common/api/PayMessageRouterRule.java | 107 +++-- .../com/egzosn/pay/common/api/PayService.java | 73 +-- .../egzosn/pay/common/bean/BasePayType.java | 8 +- .../com/egzosn/pay/common/bean/CurType.java | 6 +- .../egzosn/pay/common/bean/MethodType.java | 6 +- .../com/egzosn/pay/common/bean/MsgType.java | 6 +- .../egzosn/pay/common/bean/PayMessage.java | 161 +------ .../com/egzosn/pay/common/bean/PayOrder.java | 19 +- .../egzosn/pay/common/bean/PayOutMessage.java | 13 +- .../pay/common/bean/TransactionType.java | 10 +- .../common/bean/outbuilder/BaseBuilder.java | 9 +- .../common/bean/outbuilder/JsonBuilder.java | 6 +- .../bean/outbuilder/PayJsonOutMessage.java | 6 +- .../bean/outbuilder/PayTextOutMessage.java | 6 +- .../bean/outbuilder/PayXmlOutMessage.java | 6 +- .../common/bean/outbuilder/TextBuilder.java | 8 +- .../common/bean/outbuilder/XmlBuilder.java | 8 +- .../pay/common/bean/result/PayError.java | 12 +- .../pay/common/bean/result/PayException.java | 7 +- .../before/api/BasePayConfigStorage.java | 238 ---------- .../pay/common/before/api/BasePayService.java | 109 ----- .../common/before/api/PayConfigStorage.java | 174 -------- .../pay/common/before/api/PayConsts.java | 37 -- .../common/before/api/PayMessageHandler.java | 30 -- .../before/api/PayMessageInterceptor.java | 29 -- .../common/before/api/PayMessageRouter.java | 166 ------- .../before/api/PayMessageRouterRule.java | 414 ------------------ .../pay/common/before/api/PayService.java | 169 ------- .../common/before/api/RequestExecutor.java | 31 -- .../common/before/bean/result/PayError.java | 107 ----- .../util/http/SimpleGetRequestExecutor.java | 50 --- .../util/http/SimplePostRequestExecutor.java | 62 --- .../before/util/http/Utf8ResponseHandler.java | 34 -- .../common/exception/PayErrorException.java | 6 +- .../pay/common/http/ClientHttpRequest.java | 10 +- .../pay/common/http/HttpConfigStorage.java | 14 +- .../pay/common/http/HttpRequestTemplate.java | 43 +- .../egzosn/pay/common/http/UriVariables.java | 34 +- .../pay/common/util/LogExceptionHandler.java | 10 +- .../pay/common/util/MatrixToImageWriter.java | 32 +- .../java/com/egzosn/pay/common/util/XML.java | 26 +- .../pay/common/util/sign/SignUtils.java | 87 +--- .../pay/common/util/sign/encrypt/MD5.java | 4 +- .../pay/common/util/sign/encrypt/RSA.java | 4 +- .../pay/common/util/sign/encrypt/RSA2.java | 4 +- .../pay/demo/controller/PayController.java | 24 +- .../api/WxYouDianPayConfigStorage.java | 5 +- .../wx/youdian/api/WxYouDianPayService.java | 101 ++--- .../pay/wx/youdian/bean/YdPayError.java | 5 +- .../youdian/bean/YoudianTransactionType.java | 9 +- .../egzosn/pay/wx/api/WxPayConfigStorage.java | 18 +- .../com/egzosn/pay/wx/api/WxPayService.java | 131 ++++-- .../com/egzosn/pay/wx/bean/WxPayError.java | 8 +- .../egzosn/pay/wx/bean/WxTransactionType.java | 5 +- pom.xml | 76 ++-- 69 files changed, 849 insertions(+), 2430 deletions(-) delete mode 100644 pay-java-ali/src/main/java/com/egzosn/pay/ali/before/util/SimpleGetRequestExecutor.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayConfigStorage.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayService.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConfigStorage.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConsts.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageHandler.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageInterceptor.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouter.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouterRule.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayService.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/api/RequestExecutor.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/bean/result/PayError.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimpleGetRequestExecutor.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimplePostRequestExecutor.java delete mode 100644 pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/Utf8ResponseHandler.java diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayConfigStorage.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayConfigStorage.java index 10c54b6..7198174 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayConfigStorage.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/api/AliPayConfigStorage.java @@ -4,9 +4,10 @@ import com.egzosn.pay.common.api.BasePayConfigStorage; /** * 支付客户端配置存储 - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + * author egan + * + * email egzosn@gmail.com + * date 2016-5-18 14:09:01 */ public class AliPayConfigStorage extends BasePayConfigStorage { @@ -57,9 +58,11 @@ public class AliPayConfigStorage extends BasePayConfigStorage { return pid; } + /** + * 设置合作者id * @see #setPid(String) - * @return 合作者id + * @param partner 合作者id */ @Deprecated public void setPartner(String partner) { 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 2c2da21..e7e9bdc 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 @@ -28,8 +28,9 @@ import java.util.*; /** * 支付宝支付通知 * @author egan - * @email egzosn@gmail.com - * @date 2017-2-22 20:09 + * + * email egzosn@gmail.com + * date 2017-2-22 20:09 */ public class AliPayService extends BasePayService { protected final Log log = LogFactory.getLog(AliPayService.class); @@ -44,7 +45,7 @@ public class AliPayService extends BasePayService { /** * 获取对应的请求地址 - * @return + * @return 请求地址 */ public String getReqUrl(){ return payConfigStorage.isTest() ? devReqUrl : httpsReqUrl; @@ -64,6 +65,12 @@ public class AliPayService extends BasePayService { return getReqUrl() + "?service=notify_verify"; } + /** + * 回调校验 + * + * @param params 回调回来的参数集 + * @return 签名校验 true通过 + */ @Override public boolean verify(Map params) { @@ -95,9 +102,10 @@ public class AliPayService extends BasePayService { /** + * 校验数据来源 * * @param id 业务id, 数据的真实性. - * @return + * @return true通过 */ @Override public boolean verifySource(String id) { @@ -110,7 +118,7 @@ public class AliPayService extends BasePayService { /** * 生成并设置签名 * @param parameters 请求参数 - * @return + * @return 请求参数 */ private Map setSign(Map parameters){ parameters.put("sign_type", payConfigStorage.getSignType()); @@ -120,12 +128,13 @@ public class AliPayService extends BasePayService { return parameters; } + /** * 返回创建的订单信息 * * @param order 支付订单 - * @return - * @see PayOrder + * @return 订单信息 + * @see PayOrder 支付订单信息 */ @Override public Map orderInfo(PayOrder order) { @@ -139,8 +148,8 @@ public class AliPayService extends BasePayService { * create the order info * * @param order 支付订单 - * @return - * @see PayOrder + * @return 返回支付宝预下单信息 + * @see PayOrder 支付订单信息 */ private Map getOrder(PayOrder order) { @@ -179,7 +188,7 @@ public class AliPayService extends BasePayService { /** * 获取公共请求参数 * @param transactionType 交易类型 - * @return + * @return 放回公共请求参数 */ private Map getPublicParameters(TransactionType transactionType ){ Map orderInfo = new TreeMap<>(); @@ -199,8 +208,8 @@ public class AliPayService extends BasePayService { * create the order info * * @param order 支付订单 - * @return - * @see PayOrder + * @return 返回过时的交易订单,兼容即时收款 + * @see PayOrder 支付订单信息 */ private Map getOrderBefore(PayOrder order) { Map orderInfo = new TreeMap<>(); @@ -254,8 +263,12 @@ public class AliPayService extends BasePayService { } - - + /** + * 将请求参数或者请求流转化为 Map + * @param parameterMap 请求参数 + * @param is 请求流 + * @return 获得回调的请求参数 + */ @Override public Map getParameter2Map(Map parameterMap, InputStream is) { @@ -273,11 +286,23 @@ public class AliPayService extends BasePayService { return params; } + /** + * 获取输出消息,用户返回给支付端 + * @param code 状态 + * @param message 消息 + * @return 返回输出消息 + */ @Override public PayOutMessage getPayOutMessage(String code, String message) { return PayOutMessage.TEXT().content(code.toLowerCase()).build(); } + /** + * + * @param orderInfo 发起支付的订单信息 + * @param method 请求方式 "post" "get", + * @return 获取输出消息,用户返回给支付端, 针对于web端 + */ @Override public String buildRequest(Map orderInfo, MethodType method) { @@ -322,7 +347,7 @@ public class AliPayService extends BasePayService { * 生成二维码支付 * 暂未实现或无此功能 * @param order 发起支付的订单信息 - * @return + * @return 返回图片信息,支付时需要的 */ @Override public BufferedImage genQrPay(PayOrder order) { @@ -344,7 +369,7 @@ public class AliPayService extends BasePayService { * 交易查询接口 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回查询回来的结果集,支付方原值返回 */ @Override public Map query(String tradeNo, String outTradeNo) { @@ -357,13 +382,14 @@ public class AliPayService extends BasePayService { }); } + /** - * + * 交易查询接口,带处理器 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回查询回来的结果集 */ @Override public T query(String tradeNo, String outTradeNo, Callback callback) { @@ -371,7 +397,13 @@ public class AliPayService extends BasePayService { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.QUERY, callback); } - + /** + * 交易关闭接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方交易关闭后的结果 + */ @Override public Map close(String tradeNo, String outTradeNo) { @@ -382,12 +414,28 @@ public class AliPayService extends BasePayService { } }); } - + /** + * 交易关闭接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方交易关闭后的结果 + */ @Override public T close(String tradeNo, String outTradeNo, Callback callback) { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.CLOSE, callback); } - + /** + * 申请退款接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param refundAmount 退款金额 + * @param totalAmount 总金额 + * @return 返回支付方申请退款后的结果 + */ @Override public Map refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { @@ -398,7 +446,17 @@ public class AliPayService extends BasePayService { } }); } - + /** + * 申请退款接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param refundAmount 退款金额 + * @param totalAmount 总金额 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方申请退款后的结果 + */ @Override public T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback) { //获取公共参数 @@ -412,7 +470,13 @@ public class AliPayService extends BasePayService { setSign(parameters); return callback.perform(requestTemplate.getForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class)); } - + /** + * 查询退款 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方查询退款后的结果 + */ @Override public Map refundquery(String tradeNo, String outTradeNo) { return refundquery(tradeNo, outTradeNo, new Callback>() { @@ -422,7 +486,15 @@ public class AliPayService extends BasePayService { } }); } - + /** + * 查询退款 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方查询退款后的结果 + */ @Override public T refundquery(String tradeNo, String outTradeNo, Callback callback) { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUNDQUERY, callback); @@ -432,7 +504,7 @@ public class AliPayService extends BasePayService { * 目前只支持日账单 * @param billDate 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; * @param billType 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。 - * @return + * @return 返回支付方下载对账单的结果 */ @Override public Map downloadbill(Date billDate, String billType) { @@ -449,8 +521,8 @@ public class AliPayService extends BasePayService { * @param billDate 账单时间:具体请查看对应支付平台 * @param billType 账单类型,具体请查看对应支付平台 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回支付方下载对账单的结果 */ @Override public T downloadbill(Date billDate, String billType, Callback callback) { @@ -478,8 +550,8 @@ public class AliPayService extends BasePayService { * @param outTradeNoBillType 商户单号或者 账单类型 * @param transactionType 交易类型 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回支付方对应接口的结果 */ @Override public T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback) { @@ -514,7 +586,7 @@ public class AliPayService extends BasePayService { * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 * @param bizContent 请求参数的集合 - * @return + * @return 请求参数的集合 不包含下载账单 */ private Map getBizContent(String tradeNo, String outTradeNo, Map bizContent){ if (null == bizContent){ @@ -533,7 +605,7 @@ public class AliPayService extends BasePayService { * 获取biz_content。不包含下载账单 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 获取biz_content。不包含下载账单 */ private String getContentToJson(String tradeNo, String outTradeNo){ 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 bc2d1eb..c678e0e 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 @@ -14,8 +14,9 @@ import com.egzosn.pay.common.bean.TransactionType; * * * @author egan - * @email egzosn@gmail.com - * @date 2016/10/19 22:58 + * + * email egzosn@gmail.com + * date 2016/10/19 22:58 */ public enum AliTransactionType implements TransactionType { //app支付 //手机网站支付 @@ -45,7 +46,7 @@ public enum AliTransactionType implements TransactionType { /** * 获取接口名称 - * @return + * @return 接口名称 */ @Override public String getMethod() { diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java index ed29276..41a8b17 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/api/AliPayService.java @@ -29,8 +29,10 @@ import java.util.*; /** * 支付宝支付通知 * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + * + * email egzosn@gmail.com + * date 2016-5-18 14:09:01 + * * @see com.egzosn.pay.ali.api.AliPayService */ public class AliPayService extends BasePayService { @@ -53,6 +55,12 @@ public class AliPayService extends BasePayService { return httpsReqUrl + "?service=notify_verify"; } + /** + * 回调校验 + * + * @param params 回调回来的参数集 + * @return 签名校验 true通过 + */ @Override public boolean verify(Map params) { @@ -69,7 +77,12 @@ public class AliPayService extends BasePayService { return false; } - + /** + * 校验数据来源 + * + * @param id 业务id, 数据的真实性. + * @return true通过 + */ @Override public boolean verifySource(String id) { return "true".equals(requestTemplate.getForObject( getHttpsVerifyUrl() + "partner=" + payConfigStorage.getPid() + "¬ify_id=" + id, String.class)); @@ -91,16 +104,11 @@ public class AliPayService extends BasePayService { /** * 生成并设置签名 * @param parameters 请求参数 - * @return + * @return 订单信息 */ private Map setSign(Map parameters){ parameters.put("sign_type", payConfigStorage.getSignType()); String sign = createSign(SignUtils.parameterText(parameters, "&", "sign", "appId"), payConfigStorage.getInputCharset()); - /* try { - sign = URLEncoder.encode(sign, payConfigStorage.getInputCharset()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - }*/ parameters.put("sign", sign); return parameters; @@ -109,7 +117,7 @@ public class AliPayService extends BasePayService { /** * 获取公共请求参数 * @param transactionType 交易类型 - * @return + * @return 公共请求参数 */ private Map getPublicParameters(TransactionType transactionType ){ Map orderInfo = new TreeMap<>(); @@ -127,12 +135,13 @@ public class AliPayService extends BasePayService { } + /** * 返回创建的订单信息 * * @param order 支付订单 - * @return - * @see PayOrder + * @return 订单信息 + * @see PayOrder 支付订单信息 */ @Override public Map orderInfo(PayOrder order) { @@ -156,7 +165,7 @@ public class AliPayService extends BasePayService { * create the order info * * @param order 支付订单 - * @return + * @return 订单信息 * @see PayOrder */ private Map getOrder(PayOrder order) { @@ -198,7 +207,13 @@ public class AliPayService extends BasePayService { } - + /** + * 将请求参数或者请求流转化为 Map + * + * @param parameterMap 请求参数 + * @param is 请求流 + * @return 获得回调的请求参数 + */ @Override public Map getParameter2Map(Map parameterMap, InputStream is) { @@ -218,12 +233,25 @@ public class AliPayService extends BasePayService { return params; } - + /** + * 获取输出消息,用户返回给支付端 + * + * @param code 状态 + * @param message 消息 + * @return 返回输出消息 + */ @Override public PayOutMessage getPayOutMessage(String code, String message) { return PayOutMessage.TEXT().content(code.toLowerCase()).build(); } - + /** + * 获取输出消息,用户返回给支付端, 针对于web端 + * + * @param orderInfo 发起支付的订单信息 + * @param method 请求方式 "post" "get", + * @return 获取输出消息,用户返回给支付端, 针对于web端 + * @see MethodType 请求类型 + */ @Override public String buildRequest(Map orderInfo, MethodType method) { @@ -258,7 +286,7 @@ public class AliPayService extends BasePayService { * 生成二维码支付 * 暂未实现或无此功能 * @param orderInfo 发起支付的订单信息 - * @return + * @return 返回图片信息,支付时需要的 */ @Override public BufferedImage genQrPay(PayOrder orderInfo) { @@ -270,7 +298,7 @@ public class AliPayService extends BasePayService { * 交易查询接口 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回查询回来的结果集,支付方原值返回 */ @Override public Map query(String tradeNo, String outTradeNo) { @@ -284,12 +312,12 @@ public class AliPayService extends BasePayService { } /** - * + * 交易查询接口,带处理器 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回查询回来的结果集 */ @Override public T query(String tradeNo, String outTradeNo, Callback callback) { @@ -297,7 +325,13 @@ public class AliPayService extends BasePayService { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.QUERY, callback); } - + /** + * 交易关闭接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方交易关闭后的结果 + */ @Override public Map close(String tradeNo, String outTradeNo) { @@ -308,12 +342,28 @@ public class AliPayService extends BasePayService { } }); } - + /** + * 交易关闭接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方交易关闭后的结果 + */ @Override public T close(String tradeNo, String outTradeNo, Callback callback) { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.CLOSE, callback); } - + /** + * 申请退款接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param refundAmount 退款金额 + * @param totalAmount 总金额 + * @return 返回支付方申请退款后的结果 + */ @Override public Map refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { @@ -324,7 +374,17 @@ public class AliPayService extends BasePayService { } }); } - + /** + * 申请退款接口 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param refundAmount 退款金额 + * @param totalAmount 总金额 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方申请退款后的结果 + */ @Override public T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback) { //获取公共参数 @@ -338,6 +398,14 @@ public class AliPayService extends BasePayService { setSign(parameters); return callback.perform(requestTemplate.getForObject(queryReqUrl + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class)); } + + /** + * 查询退款 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方查询退款后的结果 + */ @Override public Map refundquery(String tradeNo, String outTradeNo) { return refundquery(tradeNo, outTradeNo, new Callback>() { @@ -348,6 +416,15 @@ public class AliPayService extends BasePayService { }); } + /** + * 查询退款 + * + * @param tradeNo 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 返回支付方查询退款后的结果 + */ @Override public T refundquery(String tradeNo, String outTradeNo, Callback callback) { return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUNDQUERY, callback); @@ -357,7 +434,7 @@ public class AliPayService extends BasePayService { * 目前只支持日账单 * @param billDate 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; * @param billType 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。 - * @return + * @return 返回支付方下载对账单的结果 */ @Override public Map downloadbill(Date billDate, String billType) { @@ -374,8 +451,8 @@ public class AliPayService extends BasePayService { * @param billDate 账单时间:具体请查看对应支付平台 * @param billType 账单类型,具体请查看对应支付平台 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回支付方下载对账单的结果 */ @Override public T downloadbill(Date billDate, String billType, Callback callback) { @@ -403,8 +480,8 @@ public class AliPayService extends BasePayService { * @param outTradeNoBillType 商户单号或者 账单类型 * @param transactionType 交易类型 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回支付方对应接口的结果 */ @Override public T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback) { @@ -435,7 +512,7 @@ public class AliPayService extends BasePayService { * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 * @param bizContent 请求参数的集合 - * @return + * @return 请求参数的集合 不包含下载账单 */ private Map getBizContent(String tradeNo, String outTradeNo, Map bizContent){ if (null == bizContent){ @@ -454,7 +531,7 @@ public class AliPayService extends BasePayService { * 获取biz_content。不包含下载账单 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 请求参数的集合 不包含下载账单 */ private String getContentToJson(String tradeNo, String outTradeNo){ diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/bean/AliTransactionType.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/bean/AliTransactionType.java index 9fea37b..d3e2963 100644 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/bean/AliTransactionType.java +++ b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/bean/AliTransactionType.java @@ -14,8 +14,10 @@ import com.egzosn.pay.common.bean.TransactionType; * * * @author egan - * @email egzosn@gmail.com - * @date 2016/10/19 22:58 + * + * email egzosn@gmail.com + * date 2016/10/19 22:58 + * * @see com.egzosn.pay.ali.bean.AliTransactionType */ @Deprecated @@ -42,7 +44,7 @@ public enum AliTransactionType implements TransactionType { /** * 获取接口名称 - * @return + * @return 接口名称 */ @Override public String getMethod() { diff --git a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/util/SimpleGetRequestExecutor.java b/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/util/SimpleGetRequestExecutor.java deleted file mode 100644 index a78e83f..0000000 --- a/pay-java-ali/src/main/java/com/egzosn/pay/ali/before/util/SimpleGetRequestExecutor.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.egzosn.pay.ali.before.util; - -/** - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-24 - */ - -import com.egzosn.pay.common.before.api.RequestExecutor; -import com.egzosn.pay.common.before.bean.result.PayError; -import com.egzosn.pay.common.exception.PayErrorException; -import com.egzosn.pay.common.before.util.http.Utf8ResponseHandler; -import org.apache.http.HttpHost; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; - -import java.io.IOException; - -/** - * 简单的GET请求执行器,请求的参数是String, 返回的结果也是String - * @author Daniel Qian - * @source chanjarster/weixin-java-tools - * - */ -@Deprecated -public class SimpleGetRequestExecutor implements RequestExecutor { - - @Override - public String execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String queryParam) throws IOException, PayErrorException { - if (queryParam != null) { - if (uri.indexOf('?') == -1) { - uri += '?'; - } - uri += uri.endsWith("?") ? queryParam : '&' + queryParam; - } - HttpGet httpGet = new HttpGet(uri); - if (httpProxy != null) { - RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); - httpGet.setConfig(config); - } - - try (CloseableHttpResponse response = httpclient.execute(httpGet)) { - String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); - if ("true".equals(responseContent)){ return responseContent; } - - throw new PayErrorException(new PayError(100101, responseContent)); - } - - - } - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java index 808e9ac..9e31da8 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/BasePayConfigStorage.java @@ -8,8 +8,10 @@ import java.util.concurrent.locks.ReentrantLock; /** * 支付基础配置存储 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/5 20:33 + *
+ *     email egzosn@gmail.com
+ *     date 2017/3/5 20:33
+ *  
*/ public abstract class BasePayConfigStorage implements PayConfigStorage{ 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 4b28136..fbe4c2f 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 @@ -9,8 +9,10 @@ import java.util.Map; /** * 支付基础服务 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/5 20:36 + *
+ *      email egzosn@gmail.com
+ *      date 2017/3/5 20:36
+ *   
*/ public abstract class BasePayService implements PayService { @@ -42,7 +44,7 @@ public abstract class BasePayService implements PayService { /** * 设置并创建请求模版, 代理请求配置这里是否合理??, * @param configStorage http请求配置 - * @return + * @return 支付服务 */ @Override public BasePayService setRequestTemplateConfigStorage(HttpConfigStorage configStorage) { @@ -59,12 +61,25 @@ public abstract class BasePayService implements PayService { setPayConfigStorage(payConfigStorage); setRequestTemplateConfigStorage(configStorage); } + /** + * 创建签名 + * + * @param content 需要签名的内容 + * @param characterEncoding 字符编码 + * @return 签名 + */ @Override public String createSign(String content, String characterEncoding) { return SignUtils.valueOf(payConfigStorage.getSignType()).createSign(content, payConfigStorage.getKeyPrivate(),characterEncoding); } - + /** + * 创建签名 + * + * @param content 需要签名的内容 + * @param characterEncoding 字符编码 + * @return 签名 + */ @Override public String createSign(Map content, String characterEncoding) { return SignUtils.valueOf(payConfigStorage.getSignType()).sign(content, payConfigStorage.getKeyPrivate(),characterEncoding); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/Callback.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/Callback.java index b985024..fb519ae 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/Callback.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/Callback.java @@ -22,11 +22,17 @@ import java.util.Map; /** * 回调,可用于类型转换 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/7 18:55 + *
+ *     email egzosn@gmail.com
+ *     date 2017/3/7 18:55
+ *  
*/ public interface Callback { - + /** + * 执行者 + * @param map 需要转化的map + * @return 处理过后的类型对象 + */ T perform(Map map); } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java index e9bffdd..cecc27e 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayConfigStorage.java @@ -7,74 +7,88 @@ import java.util.concurrent.locks.Lock; /** * 支付客户端配置存储 * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 - * @source chanjarster/weixin-java-tools + *
+ *     email egzosn@gmail.com
+ *     date 2016-5-18 14:09:01
+ * 
*/ public interface PayConfigStorage { /* * 应用id + * @return 应用id */ String getAppid(); /** * 合作商唯一标识 * @see #getPid() 代替者 + * @return 合作商唯一标识 */ @Deprecated String getPartner(); /** * 合作商唯一标识 * @see #getPartner() 代替者 + * @return 合作商唯一标识 */ String getPid(); /** * 获取收款账号 + * @return 收款账号 */ String getSeller(); /** * 授权令牌 + * @return 授权令牌 */ String getToken(); /** * 服务端异步回调Url + * @return 异步回调Url */ String getNotifyUrl(); /** * 服务端同步回调Url + * @return 同步回调Url */ String getReturnUrl(); /** * 签名方式 + * @return 签名方式 */ String getSignType(); - // 字符编码格式 目前支持 gbk 或 utf-8 + + /** + * 字符编码格式 + * @return 字符编码 + */ String getInputCharset(); /** * 获取密钥 与 #getKeyPrivate 类似 + * @return 获取密钥 */ String getSecretKey(); /** * 公钥 - * @return + * @return 公钥 */ String getKeyPublic(); /** * 私钥 - * @return + * @return 私钥 */ String getKeyPrivate(); /** * 支付类型 自定义 * 这里暂定 aliPay 支付宝, wxPay微信支付 - * @return + * @return 支付类型 */ String getPayType(); @@ -89,18 +103,18 @@ import java.util.concurrent.locks.Lock; /** * 获取访问令牌 - * @return + * @return 访问令牌 */ String getAccessToken(); /** * 访问令牌是否过期 - * @return + * @return true过期 */ boolean isAccessTokenExpired(); /** * 获取access token锁 - * @return + * @return access token锁 */ Lock getAccessTokenLock(); @@ -110,6 +124,7 @@ import java.util.concurrent.locks.Lock; void expireAccessToken(); /** * 强制将access token过期掉 + * @return 过期时间 */ long getExpiresTime(); @@ -129,7 +144,7 @@ import java.util.concurrent.locks.Lock; /** * 是否为测试环境, true测试环境 - * @return + * @return true测试环境 */ boolean isTest(); } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayErrorExceptionHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayErrorExceptionHandler.java index 2981540..3f1a2d7 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayErrorExceptionHandler.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayErrorExceptionHandler.java @@ -7,14 +7,16 @@ import com.egzosn.pay.common.exception.PayErrorException; * PayErrorExceptionHandler处理器 * * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:33:01 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:33:01
+ *  
*/ public interface PayErrorExceptionHandler { /** * 异常统一处理器 - * @param e + * @param e 支付异常 */ void handle(PayErrorException e); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java index c8a738b..c0bab6a 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageHandler.java @@ -9,20 +9,25 @@ import java.util.Map; /** * 处理支付回调消息的处理器接口 - * @source Daniel Qian + * * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ *
+ *
+ *     source Daniel Qian
+ *  
*/ public interface PayMessageHandler { /** - * @param payMessage + * @param payMessage 支付消息 * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 - * @param payService + * @param payService 支付服务 * @return xml,text格式的消息,如果在异步规则里处理的话,可以返回null */ - public PayOutMessage handle(PayMessage payMessage, + PayOutMessage handle(PayMessage payMessage, Map context, PayService payService ) throws PayErrorException; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java index 56458f9..23a55d7 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageInterceptor.java @@ -8,19 +8,26 @@ import java.util.Map; /** * 支付消息拦截器,可以用来做验证 - * @author Daniel Qian + * @author egan + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ *
+ *
+ *     source Daniel Qian
+ *  
*/ public interface PayMessageInterceptor { /** * 拦截微信消息 * - * @param wxMessage + * @param payMessage 支付消息 * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 - * @param payService + * @param payService 支付服务 * @return true代表OK,false代表不OK */ - public boolean intercept(PayMessage wxMessage, + boolean intercept(PayMessage payMessage, Map context, PayService payService ) throws PayErrorException; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java index 074d089..0ed37f9 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouter.java @@ -36,16 +36,14 @@ import java.util.concurrent.Future; * * // 将PayMessage交给消息路由器 * router.route(message); - * + * source chanjarster/weixin-java-tools Daniel Qian * - * @source chanjarster/weixin-java-tools - * @source Daniel Qian * @author egan * */ public class PayMessageRouter { - protected final Log log = LogFactory.getLog(PayMessageRouter.class); + protected final Log log = LogFactory.getLog(PayMessageRouter.class); private static final int DEFAULT_THREAD_POOL_SIZE = 100; @@ -66,9 +64,9 @@ public class PayMessageRouter { /** *
    * 设置自定义的 {@link ExecutorService}
-   * 如果不调用该方法,默认使用 Executors.newFixedThreadPool(100)
+   * 如果不调用用该方法,默认使 Executors.newFixedThreadPool(100)
    * 
- * @param executorService + * @param executorService 异步线程处理器 */ public void setExecutorService(ExecutorService executorService) { this.executorService = executorService; @@ -81,19 +79,23 @@ public class PayMessageRouter { * 设置自定义的{@link PayErrorExceptionHandler} * 如果不调用该方法,默认使用 {@link LogExceptionHandler} * - * @param exceptionHandler + * @param exceptionHandler 异常处理器 */ public void setExceptionHandler(PayErrorExceptionHandler exceptionHandler) { this.exceptionHandler = exceptionHandler; } + /** + * 获取所有的规则 + * @return 规则 + */ List getRules() { return this.rules; } /** * 开始一个新的Route规则 - * @return + * @return 新的Route规则 */ public PayMessageRouterRule rule() { return new PayMessageRouterRule(this); @@ -101,7 +103,8 @@ public class PayMessageRouter { /** * 处理支付消息 - * @param payMessage + * @param payMessage 支付消息 + * @return 支付输出结果 */ public PayOutMessage route(final PayMessage payMessage) { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouterRule.java b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouterRule.java index c105582..d97a963 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouterRule.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/api/PayMessageRouterRule.java @@ -13,11 +13,15 @@ import java.util.regex.Pattern; /** - * + * Route规则 路由 * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:28:01 - * @source chanjarster/weixin-java-tools + *
+ *  email egzosn@gmail.com
+ *  date 2016-6-1 11:28:01
+ *
+ *
+ *  source chanjarster/weixin-java-tools
+ *  
*/ public class PayMessageRouterRule { @@ -56,8 +60,8 @@ public class PayMessageRouterRule { /** * 设置是否异步执行,默认是true * - * @param async - * @return + * @param async 是否异步执行,默认是true + * @return Route规则 */ public PayMessageRouterRule async(boolean async) { this.async = async; @@ -67,8 +71,8 @@ public class PayMessageRouterRule { /** * 如果msgType等于某值 * - * @param msgType - * @return + * @param msgType 消息类型 + * @return Route规则 */ public PayMessageRouterRule msgType(String msgType) { this.msgType = msgType; @@ -78,8 +82,8 @@ public class PayMessageRouterRule { /** * 如果payType等于某值 * - * @param payType - * @return + * @param payType 支付类型 + * @return Route规则 */ public PayMessageRouterRule payType(String payType) { this.payType = payType; @@ -89,8 +93,8 @@ public class PayMessageRouterRule { /** * 如果transactionType等于某值 * - * @param transactionType - * @return + * @param transactionType 交易类型 + * @return Route规则 */ public PayMessageRouterRule transactionType(String ... transactionType) { this.transactionType = transactionType; @@ -100,8 +104,8 @@ public class PayMessageRouterRule { /** * 如果discount等于某值 * - * @param discount - * @return + * @param discount discount等于某值 + * @return Route规则 */ public PayMessageRouterRule discount(String discount) { this.discount = discount; @@ -111,8 +115,8 @@ public class PayMessageRouterRule { /** * 如果discount匹配该正则表达式 * - * @param regex - * @return + * @param regex discount匹配该正则表达式 + * @return Route规则 */ public PayMessageRouterRule rDiscount(String regex) { this.rDiscount = regex; @@ -120,10 +124,10 @@ public class PayMessageRouterRule { } /** - * 如果discount等于某值 + * 如果subject等于某值 * - * @param subject - * @return + * @param subject 简介 + * @return Route规则 */ public PayMessageRouterRule subject(String subject) { this.subject = subject; @@ -131,10 +135,10 @@ public class PayMessageRouterRule { } /** - * 如果discount匹配该正则表达式 + * 如果subject匹配该正则表达式 * - * @param regex - * @return + * @param regex 简介正则 + * @return Route规则 */ public PayMessageRouterRule rSubject(String regex) { this.rSubject = regex; @@ -143,32 +147,21 @@ public class PayMessageRouterRule { /** - * 如果消息匹配某个matcher,用在用户需要自定义更复杂的匹配规则的时候 + * 设置消息拦截器 * - * @param matcher - * @return - */ - /* public PayMessageRouterRule matcher(WxMpMessageMatcher matcher) { - this.matcher = matcher; - return this; - }*/ - - /** - * 设置微信消息拦截器 - * - * @param interceptor - * @return + * @param interceptor 消息拦截器 + * @return Route规则 */ public PayMessageRouterRule interceptor(PayMessageInterceptor interceptor) { return interceptor(interceptor, (PayMessageInterceptor[]) null); } /** - * 设置微信消息拦截器 + * 设置消息拦截器 * - * @param interceptor - * @param otherInterceptors - * @return + * @param interceptor 消息拦截器 + * @param otherInterceptors 其他消息拦截器 + * @return Route规则 */ public PayMessageRouterRule interceptor(PayMessageInterceptor interceptor, PayMessageInterceptor... otherInterceptors) { this.interceptors.add(interceptor); @@ -181,21 +174,21 @@ public class PayMessageRouterRule { } /** - * 设置微信消息处理器 + * 设置消息处理器 * - * @param handler - * @return + * @param handler 消息处理器 + * @return Route规则 */ public PayMessageRouterRule handler(PayMessageHandler handler) { return handler(handler, (PayMessageHandler[]) null); } /** - * 设置微信消息处理器 + * 设置消息处理器 * - * @param handler - * @param otherHandlers - * @return + * @param handler 消息处理器 + * @param otherHandlers 其他消息处理器 + * @return Route规则 */ public PayMessageRouterRule handler(PayMessageHandler handler, PayMessageHandler... otherHandlers) { this.handlers.add(handler); @@ -210,7 +203,7 @@ public class PayMessageRouterRule { /** * 规则结束,代表如果一个消息匹配该规则,那么它将不再会进入其他规则 * - * @return + * @return Route规则 */ public PayMessageRouter end() { this.routerBuilder.getRules().add(this); @@ -220,7 +213,7 @@ public class PayMessageRouterRule { /** * 规则结束,但是消息还会进入其他规则 * - * @return + * @return Route规则 */ public PayMessageRouter next() { this.reEnter = true; @@ -230,8 +223,8 @@ public class PayMessageRouterRule { /** * 将支付事件修正为不区分大小写, * 比如框架定义的事件常量为 - * @param payMessage - * @return + * @param payMessage 支付消息 + * @return 是否匹配通过 */ protected boolean test(PayMessage payMessage) { return ( @@ -261,7 +254,7 @@ public class PayMessageRouterRule { /** * 匹配交易类型 * @param transactionType 交易类型 - * @return + * @return 匹配交易类型 */ public boolean equalsTransactionType(String transactionType) { if (null == transactionType){ @@ -278,12 +271,12 @@ public class PayMessageRouterRule { } - /** - * 处理支付回调过来的消息 - * - * @param payService - * @return true 代表继续执行别的router,false 代表停止执行别的router + * 返回支付响应消息 + * @param payMessage 支付消息 + * @param payService 支付服务 + * @param exceptionHandler 异常处理器 + * @return 支付响应消息 */ protected PayOutMessage service(PayMessage payMessage, PayService payService, 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 c297165..35dfed3 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 @@ -18,36 +18,39 @@ import java.util.Map; * 支付服务 * * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + *
+ * email egzosn@gmail.com
+ * date 2016-5-18 14:09:01
+ *
*/ public interface PayService { + /** * 设置支付配置 - * - * @param payConfigStorage + * @param payConfigStorage 支付配置 + * @return 支付服务 */ PayService setPayConfigStorage(PayConfigStorage payConfigStorage); /** * 获取支付配置 * - * @return + * @return 支付配置 */ PayConfigStorage getPayConfigStorage(); /** * 获取http请求工具 * - * @return + * @return http请求工具 */ HttpRequestTemplate getHttpRequestTemplate(); /** - * 设置 请求工具配置 + * 设置 请求工具配置 设置并创建请求模版, 代理请求配置这里是否合理??, * @param configStorage http请求配置 - * @return + * @return 支付服务 */ PayService setRequestTemplateConfigStorage(HttpConfigStorage configStorage); @@ -55,7 +58,7 @@ public interface PayService { * 回调校验 * * @param params 回调回来的参数集 - * @return + * @return 签名校验 true通过 */ boolean verify(Map params); @@ -64,16 +67,16 @@ public interface PayService { * * @param params 参数集 * @param sign 签名 - * @return + * @return 签名校验 true通过 */ boolean signVerify(Map params, String sign); /** + * 支付宝需要,微信是否也需要再次校验来源,进行订单查询 * 校验数据来源 - * * @param id 业务id, 数据的真实性. - * @return + * @return true通过 */ boolean verifySource(String id); @@ -82,8 +85,8 @@ public interface PayService { * 返回创建的订单信息 * * @param order 支付订单 - * @return - * @see PayOrder + * @return 订单信息 + * @see PayOrder 支付订单信息 */ Map orderInfo(PayOrder order); @@ -92,7 +95,7 @@ public interface PayService { * * @param content 需要签名的内容 * @param characterEncoding 字符编码 - * @return + * @return 签名 */ String createSign(String content, String characterEncoding); @@ -101,7 +104,7 @@ public interface PayService { * * @param content 需要签名的内容 * @param characterEncoding 字符编码 - * @return + * @return 签名 */ String createSign(Map content, String characterEncoding); @@ -110,16 +113,16 @@ public interface PayService { * * @param parameterMap 请求参数 * @param is 请求流 - * @return + * @return 获得回调的请求参数 */ Map getParameter2Map(Map parameterMap, InputStream is); /** * 获取输出消息,用户返回给支付端 * - * @param code - * @param message - * @return + * @param code 状态 + * @param message 消息 + * @return 返回输出消息 */ PayOutMessage getPayOutMessage(String code, String message); @@ -128,8 +131,8 @@ public interface PayService { * * @param orderInfo 发起支付的订单信息 * @param method 请求方式 "post" "get", - * @return - * @see MethodType + * @return 获取输出消息,用户返回给支付端, 针对于web端 + * @see MethodType 请求类型 */ String buildRequest(Map orderInfo, MethodType method); @@ -137,7 +140,7 @@ public interface PayService { * 获取输出二维码,用户返回给支付端, * * @param order 发起支付的订单信息 - * @return + * @return 返回图片信息,支付时需要的 */ BufferedImage genQrPay(PayOrder order); @@ -146,17 +149,17 @@ public interface PayService { * * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回查询回来的结果集,支付方原值返回 */ Map query(String tradeNo, String outTradeNo); /** - * 交易查询接口 + * 交易查询接口,带处理器 * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回查询回来的结果集 */ T query(String tradeNo, String outTradeNo, Callback callback); @@ -165,7 +168,7 @@ public interface PayService { * * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回支付方交易关闭后的结果 */ Map close(String tradeNo, String outTradeNo); @@ -176,7 +179,7 @@ public interface PayService { * @param outTradeNo 商户单号 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回支付方交易关闭后的结果 */ T close(String tradeNo, String outTradeNo, Callback callback); @@ -187,7 +190,7 @@ public interface PayService { * @param outTradeNo 商户单号 * @param refundAmount 退款金额 * @param totalAmount 总金额 - * @return + * @return 返回支付方申请退款后的结果 */ Map refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount); /** @@ -199,7 +202,7 @@ public interface PayService { * @param totalAmount 总金额 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回支付方申请退款后的结果 */ T refund(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback); @@ -208,7 +211,7 @@ public interface PayService { * * @param tradeNo 支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回支付方查询退款后的结果 */ Map refundquery(String tradeNo, String outTradeNo); /** @@ -218,7 +221,7 @@ public interface PayService { * @param outTradeNo 商户单号 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回支付方查询退款后的结果 */ T refundquery(String tradeNo, String outTradeNo, Callback callback); @@ -227,7 +230,7 @@ public interface PayService { * * @param billDate 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。 * @param billType 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; - * @return + * @return 返回支付方下载对账单的结果 */ Object downloadbill(Date billDate, String billType); @@ -238,7 +241,7 @@ public interface PayService { * @param billType 账单类型,具体请查看对应支付平台 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回支付方下载对账单的结果 */ T downloadbill(Date billDate, String billType, Callback callback); @@ -251,7 +254,7 @@ public interface PayService { * @param transactionType 交易类型 * @param callback 处理器 * @param 返回类型 - * @return + * @return 返回支付方对应接口的结果 */ T secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/BasePayType.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/BasePayType.java index 88f4b6b..fcfe7e7 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/BasePayType.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/BasePayType.java @@ -3,8 +3,10 @@ package com.egzosn.pay.common.bean; /** * 基础的支付类型 * @author egan - * @email egzosn@gmail.com - * @date 2016/11/20 0:47 + *
+ *     email egzosn@gmail.com
+ *     date 2016/11/20 0:47
+ *  
*/ public interface BasePayType { @@ -12,7 +14,7 @@ public interface BasePayType { /** * 根据支付类型获取交易类型 * @param transactionType 类型值 - * @return + * @return 交易类型 */ TransactionType getTransactionType(String transactionType); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/CurType.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/CurType.java index 0d91cea..e58f8cf 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/CurType.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/CurType.java @@ -4,9 +4,13 @@ package com.egzosn.pay.common.bean;/** /** * @author Fuzx 货币类型 - * @create 2017 2017/1/24 0024 + * create 2017 2017/1/24 0024 */ public interface CurType { + /** + * 货币类型 + * @return 货币类型 + */ String getCurType(); } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MethodType.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MethodType.java index 0214910..387bd63 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MethodType.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MethodType.java @@ -19,8 +19,10 @@ package com.egzosn.pay.common.bean; /** * @author: egan - * @email egzosn@gmail.com - * @date 2017/2/7 9:52 + *
+ *     email egzosn@gmail.com
+ *     date 2017/2/7 9:52
+ * 
*/ public enum MethodType { GET, POST diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MsgType.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MsgType.java index f79aa3a..c003040 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MsgType.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/MsgType.java @@ -20,8 +20,10 @@ package com.egzosn.pay.common.bean; /** * 消息类型 * @author: egan - * @email egzosn@gmail.com - * @date 2016/11/18 0:59 + *
+ *     email egzosn@gmail.com
+ *     date 2016/11/18 0:59
+ *  
*/ public enum MsgType { text, xml,json diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java index 3cf6e16..c6eceb1 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayMessage.java @@ -12,8 +12,10 @@ import java.util.Map; * 支付回调消息 * 基础实现,具体可根据具体支付回调的消息去实现 * @author egan - * @email egzosn@gmail.com - * @date 2017/3/7 16:37 + *
+ *     email egzosn@gmail.com
+ *     date 2017/3/7 16:37
+ *  
*/ public class PayMessage implements Serializable { private Map payMessage = null; @@ -87,161 +89,6 @@ public class PayMessage implements Serializable { public String getSubject(){ return payMessage.get("subject"); } - //////////////////支付宝 -/* public Date getNotifyTime(){ - return parseDate(payMessage.get("notify_time")); - } - - public String getNotifyType(){ - return payMessage.get("notify_type"); - } - public String getNotifyId(){ - return payMessage.get("notify_id"); - } - - public String getSignType(){ - return payMessage.get("sign_type"); - } - - - - - - public String getPaymentType(){ - return payMessage.get("payment_type"); - } - - public String getTradeNo(){ - return payMessage.get("trade_no"); - } - - public String getTradeStatus(){ - return payMessage.get("trade_status"); - } - public String getSellerId(){ - return payMessage.get("seller_id"); - } - public String getSellerEmail(){ - return payMessage.get("seller_email"); - } - public String getBuyerId(){ - return payMessage.get("buyer_id"); - } - - public String getBuyerEmail(){ - return payMessage.get("buyer_email"); - } - - - public Number getQuantity(){ - String quantity = payMessage.get("quantity"); - if (null == quantity || "".equals(quantity)){ return 1; } - if (isNumber(quantity)){ - return Integer.parseInt(quantity); - } - return 1; - } - - public Number getPrice(){ - String price = payMessage.get("price"); - if (null == price || "".equals(price)){ return 1; } - if (isNumber(price)){ - return new BigDecimal(price); - } - return 1; - } - - public String getBody(){ - return payMessage.get("body"); - } - - public Date getGmtCreate(){ - - return parseDate(payMessage.get("gmt_create")); - } - - public Date getGmtPayment(){ - - return parseDate(payMessage.get("gmt_payment")); - } - public String getIsTotalFeeAdjust (){ - return payMessage.get("is_total_fee_adjust"); - - } - - - public String getUseCoupon(){ - return payMessage.get("use_coupon"); - - } - - public String getRefundStatus(){ - return payMessage.get("refund_status"); - - } - public Date getGmtRefund(){ - return parseDate(payMessage.get("gmt_refund")); - - }*/ - /////////////////支付宝 - - - - //////////////////微信 - /* public String getIsSubscribe(){ - return payMessage.get("is_subscribe"); - } - public String getAppid(){ - return payMessage.get("appid"); - } - - public String getFeeType(){ - return payMessage.get("fee_type"); - } - public String getNonceStr(){ - return payMessage.get("nonce_str"); - } - public String getTransactionId(){ - return payMessage.get("transaction_id"); - } - - public String getTradeType(){ - return payMessage.get("trade_type"); - } - - public String getResultCode(){ - return payMessage.get("result_code"); - } - - public String getMchId(){ - return payMessage.get("mch_id"); - } - - public String getAttach(){ - return payMessage.get("attach"); - } - - public String getTimeEnd(){ - return payMessage.get("time_end"); - } - public String getBankType(){ - return payMessage.get("bank_type"); - } - public String getOpenid(){ - return payMessage.get("openid"); - } - public String getReturnCode(){ - return payMessage.get("return_code"); - } - public Number getCashFee(){ - String cashFee = payMessage.get("cash_fee"); - if (null == cashFee || "".equals(cashFee)){ return 0; } - if (isNumber(cashFee)){ - return new BigDecimal(cashFee).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP); - } - return 0; - }*/ - //////////////////微信 diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java index 0ee1b60..6e1cb0a 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java @@ -6,8 +6,10 @@ import java.math.BigDecimal; * 支付订单信息 * * @author egan - * @email egzosn@gmail.com - * @date 2016/10/19 22:34 + *
+ *      email egzosn@gmail.com
+ *      date 2016/10/19 22:34
+ *  
*/ public class PayOrder { //商品名称 @@ -64,7 +66,7 @@ public class PayOrder { /** * 获取商户订单号 - * @return + * @return 商户订单号 * @see #getOutTradeNo() */ @Deprecated @@ -72,8 +74,10 @@ public class PayOrder { return outTradeNo; } + /** - * 设置商户订单号 + * + * @param tradeNo 商户订单号 * @see #setOutTradeNo(String) */ @Deprecated @@ -83,14 +87,15 @@ public class PayOrder { /** * 获取商户订单号 - * @return + * @return 商户订单号 */ public String getOutTradeNo() { return outTradeNo; } + /** - * 设置商户订单号 - * @return + * 设置商户订单号 + * @param outTradeNo 商户订单号 */ public void setOutTradeNo(String outTradeNo) { this.outTradeNo = outTradeNo; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOutMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOutMessage.java index f4e52ae..97f686f 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOutMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOutMessage.java @@ -10,9 +10,10 @@ import java.io.Serializable; /** * 支付回调通知返回消息 * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 - * @source chanjarster/weixin-java-tools + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ * 
*/ public abstract class PayOutMessage implements Serializable { protected String content; @@ -37,21 +38,21 @@ public abstract class PayOutMessage implements Serializable { /** * 获得文本消息builder - * @return + * @return 文本消息builder */ public static TextBuilder TEXT() { return new TextBuilder(); } /** * 获得XML消息builder - * @return + * @return XML消息builder */ public static XmlBuilder XML() { return new XmlBuilder(); } /** * 获得Json消息builder - * @return + * @return Json消息builder */ public static JsonBuilder JSON() { return new JsonBuilder(new JSONObject()); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransactionType.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransactionType.java index 49df677..a17258a 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransactionType.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/TransactionType.java @@ -3,19 +3,21 @@ package com.egzosn.pay.common.bean; /** * 交易类型 * @author egan - * @email egzosn@gmail.com - * @date 2016/10/19 22:30 + *
+ *     email egzosn@gmail.com
+ *     date 2016/10/19 22:30
+ * 
*/ public interface TransactionType { /** * 获取交易类型 - * @return + * @return 交易类型 */ String getType(); /** * 获取接口 - * @return + * @return 接口 */ String getMethod(); } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/BaseBuilder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/BaseBuilder.java index 274886e..5206146 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/BaseBuilder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/BaseBuilder.java @@ -3,10 +3,13 @@ package com.egzosn.pay.common.bean.outbuilder; import com.egzosn.pay.common.bean.PayOutMessage; /** - * @source chanjarster/weixin-java-tools + * source chanjarster/weixin-java-tools + * * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ *  
*/ public abstract class BaseBuilder { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/JsonBuilder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/JsonBuilder.java index 9deca90..726a2ed 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/JsonBuilder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/JsonBuilder.java @@ -6,8 +6,10 @@ import com.egzosn.pay.common.bean.PayOutMessage; /** * @author: egan - * @email egzosn@gmail.com - * @date 2017/1/13 14:30 + *
+ *      email egzosn@gmail.com
+ *      date 2017/1/13 14:30
+ *   
*/ public class JsonBuilder extends BaseBuilder{ JSONObject json = null; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayJsonOutMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayJsonOutMessage.java index ff554c0..576134b 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayJsonOutMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayJsonOutMessage.java @@ -5,8 +5,10 @@ import com.egzosn.pay.common.bean.PayOutMessage; /** * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *      email egzosn@gmail.com
+ *      date 2016-6-1 11:40:30
+ *   
*/ public class PayJsonOutMessage extends PayOutMessage{ diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayTextOutMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayTextOutMessage.java index 20af460..7d31196 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayTextOutMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayTextOutMessage.java @@ -5,8 +5,10 @@ import com.egzosn.pay.common.bean.PayOutMessage; /** * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *      email egzosn@gmail.com
+ *      date 2016-6-1 11:40:30
+ *  
*/ public class PayTextOutMessage extends PayOutMessage{ diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayXmlOutMessage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayXmlOutMessage.java index 5f196f8..c4b96bd 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayXmlOutMessage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/PayXmlOutMessage.java @@ -5,8 +5,10 @@ import com.egzosn.pay.common.bean.PayOutMessage; /** * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 13:53:3 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 13:53:3
+ *  
*/ public class PayXmlOutMessage extends PayOutMessage{ diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/TextBuilder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/TextBuilder.java index 59b5ef5..16895ba 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/TextBuilder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/TextBuilder.java @@ -3,10 +3,12 @@ package com.egzosn.pay.common.bean.outbuilder; import com.egzosn.pay.common.bean.PayOutMessage; /** - * @source chanjarster/weixin-java-tools + *

source chanjarster/weixin-java-tools

* @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ *  
*/ public class TextBuilder extends BaseBuilder { private String content; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/XmlBuilder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/XmlBuilder.java index c0f67b6..3314b75 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/XmlBuilder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/outbuilder/XmlBuilder.java @@ -2,10 +2,12 @@ package com.egzosn.pay.common.bean.outbuilder; import com.egzosn.pay.common.bean.PayOutMessage; /** - * @source chanjarster/weixin-java-tools + *

source chanjarster/weixin-java-tools

* @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 + *
+ *     email egzosn@gmail.com
+ *     date 2016-6-1 11:40:30
+ *  
*/ public class XmlBuilder extends BaseBuilder { private String content; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayError.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayError.java index 5166e34..d392d58 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayError.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayError.java @@ -4,28 +4,30 @@ package com.egzosn.pay.common.bean.result; * 支付错误码说明 * * @author egan - * @email egzosn@gmail.com - * @date 2017-03-02 22:28:01 + *
+ *     email egzosn@gmail.com
+ *     date 2017-03-02 22:28:01
+ *  
*/ public interface PayError { /** * 获取错误码 * - * @return + * @return 错误码 */ String getErrorCode(); /** * 获取错误消息 * - * @return + * @return 错误消息 */ String getErrorMsg(); /** * 获取异常信息 - * @return + * @return 异常信息 */ String getString(); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayException.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayException.java index 887bada..db26fba 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayException.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/result/PayException.java @@ -18,9 +18,12 @@ package com.egzosn.pay.common.bean.result; /** + * 支付异常 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/7 12:32 + *
+ *      email egzosn@gmail.com
+ *      date 2017/3/7 12:32
+ *  
*/ public class PayException implements PayError { private String errorCode; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayConfigStorage.java deleted file mode 100644 index 2a22979..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayConfigStorage.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.bean.MsgType; - -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -/** - * 支付基础配置存储 - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 - */ -@Deprecated -public abstract class BasePayConfigStorage implements PayConfigStorage{ - - - // ali rsa_private 商户私钥,pkcs8格式 - //wx api_key 商户密钥 - protected volatile String keyPrivate ; - // 支付公钥 - protected volatile String keyPublic; - //异步回调地址 - protected volatile String notifyUrl; - //同步回调地址 - protected volatile String returnUrl;; - //签名加密类型 - protected volatile String signType; - //字符类型 - protected volatile String inputCharset; - - - //支付类型 aliPay 支付宝, wxPay微信..等等,开发者自定义,唯一 - protected volatile String payType; - /** - * 消息来源类型 - * @see PayConsts#MSG_XML - * @see PayConsts#MSG_TEXT - * @see PayConsts#MSG_JSON - */ - protected volatile MsgType msgType; - - - // 访问令牌 每次请求其他方法都要传入的值 - protected volatile String accessToken; - // access token 到期时间时间戳 - protected volatile long expiresTime; - //授权码锁 - protected Lock accessTokenLock = new ReentrantLock(); - - - protected volatile String httpProxyHost; - protected volatile int httpProxyPort; - protected volatile String httpProxyUsername; - protected volatile String httpProxyPassword; - - private boolean isTest = false; - - /** - * 合作商唯一标识 - * @see #getPartner 代替者 - */ - public String getPid(){ - throw null; - } - - @Override - public String getInputCharset() { - return inputCharset; - } - - public void setInputCharset(String inputCharset) { - this.inputCharset = inputCharset; - } - - - - @Override - public String getNotifyUrl() { - return notifyUrl; - } - - public void setNotifyUrl(String notifyUrl) { - this.notifyUrl = notifyUrl; - } - - @Override - public String getReturnUrl() { - return returnUrl; - } - - public void setReturnUrl(String returnUrl) { - this.returnUrl = returnUrl; - } - - public void setSignType(String signType) { - this.signType = signType; - } - - @Override - public String getSignType() { - return signType; - } - - - - @Override - public String getHttpProxyHost() { - return httpProxyHost; - } - - public void setHttpProxyHost(String httpProxyHost) { - this.httpProxyHost = httpProxyHost; - } - - @Override - public int getHttpProxyPort() { - return httpProxyPort; - } - - public void setHttpProxyPort(int httpProxyPort) { - this.httpProxyPort = httpProxyPort; - } - - @Override - public String getHttpProxyUsername() { - return httpProxyUsername; - } - - public void setHttpProxyUsername(String httpProxyUsername) { - this.httpProxyUsername = httpProxyUsername; - } - - @Override - public String getHttpProxyPassword() { - return httpProxyPassword; - } - - - public void setHttpProxyPassword(String httpProxyPassword) { - this.httpProxyPassword = httpProxyPassword; - } - - @Override - public String getKeyPrivate() { - return keyPrivate; - } - - public void setKeyPrivate(String keyPrivate) { - this.keyPrivate = keyPrivate; - } - - @Override - public String getKeyPublic() { - return keyPublic; - } - - public void setKeyPublic(String keyPublic) { - this.keyPublic = keyPublic; - } - - - - @Override - public String getToken() { - return null; - } - - - /** - * 支付类型 自定义 - * 这里暂定 aliPay 支付宝, wxPay微信支付 - * @return - */ - public String getPayType() { - return payType; - } - - public void setPayType(String payType) { - this.payType = payType; - } - - @Override - public MsgType getMsgType() { - return msgType; - } - - public void setMsgType(MsgType msgType) { - this.msgType = msgType; - } - - - @Override - public String getAccessToken() { - return this.accessToken; - } - - @Override - public Lock getAccessTokenLock() { - return this.accessTokenLock; - } - - @Override - public long getExpiresTime() { - return expiresTime; - } - - @Override - public boolean isAccessTokenExpired() { - return System.currentTimeMillis() > this.expiresTime; - } - - - @Override - public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { - this.accessToken = accessToken; - this.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 600) * 1000L; - } - - @Override - public synchronized void updateAccessToken(String accessToken, long expiresTime) { - this.accessToken = accessToken; - this.expiresTime = expiresTime; - } - - @Override - public void expireAccessToken() { - this.expiresTime = 0; - } - @Override - public boolean isTest() { - return isTest; - } - - public void setTest(boolean test) { - isTest = test; - } -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayService.java deleted file mode 100644 index 3fa2099..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/BasePayService.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.util.str.StringUtils; -import com.egzosn.pay.common.exception.PayErrorException; -import org.apache.http.HttpHost; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; - -import java.io.IOException; - -/** - * @author: egan - * @email egzosn@gmail.com - * @date 2017/1/12 20:09 - * @source chanjarster/weixin-java-tools - */ -@Deprecated -public abstract class BasePayService implements PayService { - - protected PayConfigStorage payConfigStorage; - - protected CloseableHttpClient httpClient; - - protected HttpHost httpProxy; - - protected int retrySleepMillis = 1000; - - protected int maxRetryTimes = 5; - - /** - * - * @param executor - * @param uri - * @param data - * @param - * @param - * @return - * @throws PayErrorException - */ - protected T executeInternal(RequestExecutor executor, String uri, E data) throws PayErrorException { - - try { - return executor.execute(getHttpClient(), httpProxy, uri, data); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public HttpHost getHttpProxy() { - return httpProxy; - } - - public CloseableHttpClient getHttpClient() { - return httpClient; - } - - /** - * 设置支付配置 - * @param payConfigStorage 支付配置 - */ - @Deprecated - public void setPayConfigStorage(PayConfigStorage payConfigStorage) { - this.payConfigStorage = payConfigStorage; - - String http_proxy_host = payConfigStorage.getHttpProxyHost(); - int http_proxy_port = payConfigStorage.getHttpProxyPort(); - String http_proxy_username = payConfigStorage.getHttpProxyUsername(); - String http_proxy_password = payConfigStorage.getHttpProxyPassword(); - - if (StringUtils.isNotBlank(http_proxy_host)) { - // 使用代理服务器 - if (StringUtils.isNotBlank(http_proxy_username)) { - // 需要用户认证的代理服务器 - CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials( - new AuthScope(http_proxy_host, http_proxy_port), - new UsernamePasswordCredentials(http_proxy_username, http_proxy_password)); - httpClient = HttpClients - .custom() - .setDefaultCredentialsProvider(credsProvider) - .build(); - } else { - // 无需用户认证的代理服务器 - httpClient = HttpClients.createDefault(); - } - httpProxy = new HttpHost(http_proxy_host, http_proxy_port); - } else { - httpClient = HttpClients.createDefault(); - } - } - - @Override - public PayConfigStorage getPayConfigStorage() { - return payConfigStorage; - } - - public BasePayService() { - } - - - public BasePayService(PayConfigStorage payConfigStorage) { - setPayConfigStorage(payConfigStorage); - } - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConfigStorage.java deleted file mode 100644 index 51ef4e5..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConfigStorage.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.bean.MsgType; -import com.egzosn.pay.common.http.HttpConfigStorage; - -import java.util.concurrent.locks.Lock; - -/** - * 支付客户端配置存储 - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 - * @source chanjarster/weixin-java-tools - * @see com.egzosn.pay.common.api.PayConfigStorage - */ -@Deprecated - public interface PayConfigStorage { - - /* - * 应用id - */ - String getAppid(); - /** - * 合作商唯一标识 - */ - @Deprecated - String getPartner(); - /** - * 合作商唯一标识 - * @see #getPartner 代替者 - */ - String getPid(); - - /** - * 获取收款账号 - */ - String getSeller(); - - /** - * 授权令牌 - */ - String getToken(); - - - /** - * 服务端异步回调Url - */ - String getNotifyUrl(); - /** - * 服务端同步回调Url - */ - String getReturnUrl(); - /** - * 签名方式 - */ - String getSignType(); - // 字符编码格式 目前支持 gbk 或 utf-8 - String getInputCharset(); - /** - * 获取密钥 与 #getKeyPrivate 类似 - */ - String getSecretKey(); - - /** - * 公钥 - * @return - */ - String getKeyPublic(); - - /** - * 私钥 - * @return - */ - String getKeyPrivate(); - - /** - * 支付类型 自定义 - * 这里暂定 aliPay 支付宝, wxPay微信支付 - * @return - */ - String getPayType(); - - /** - * 消息类型 - * @see #getMsgType - * @see MsgType - * @return "text" 或者 "xml" - * @see MsgType#text - * @see MsgType#xml - * @see MsgType#json - */ - MsgType getMsgType(); - - - /** - * 获取访问令牌 - * @return - */ - String getAccessToken(); - - /** - * 访问令牌是否过期 - * @return - */ - boolean isAccessTokenExpired(); - /** - * 获取access token锁 - * @return - */ - Lock getAccessTokenLock(); - - /** - * 强制将access token过期掉 - */ - void expireAccessToken(); - /** - * 强制将access token过期掉 - */ - long getExpiresTime(); - - /** - * 应该是线程安全的 - * @param accessToken 新的accessToken值 - * @param expiresInSeconds 过期时间,以秒为单位 多少秒 - */ - void updateAccessToken(String accessToken, int expiresInSeconds); - - /** - * 应该是线程安全的 - * @param accessToken 新的accessToken值 - * @param expiresTime 过期时间,时间戳 - */ - void updateAccessToken(String accessToken, long expiresTime); - - - /** - * http代理地址 - * @return - * @see HttpConfigStorage#getHttpProxyHost() - */ - @Deprecated - String getHttpProxyHost(); - - /** - * 代理端口 - * @return - * @see HttpConfigStorage#getHttpProxyPort() - */ - @Deprecated - int getHttpProxyPort(); - - /** - * 代理用户名 - * @return - * @see HttpConfigStorage#getHttpProxyUsername() - */ - @Deprecated - String getHttpProxyUsername(); - - /** - * 代理密码 - * @return - * @see HttpConfigStorage#getHttpProxyPassword() - */ - @Deprecated - String getHttpProxyPassword(); - - - /** - * 是否为测试环境, true测试环境 - * @return - */ - boolean isTest(); -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConsts.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConsts.java deleted file mode 100644 index c396d0a..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayConsts.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.egzosn.pay.common.before.api; - -/** - * 支付宝支付通知 - * @source chanjarster/weixin-java-tools - * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:45:31 - */ -public class PayConsts { - /////////////// - //支付回复消息类型 - ///////////// - public static final String OUT_MSG_TEXT = "text"; - public static final String OUT_MSG_XML = "xml"; - public static final String OUT_MSG_JSON = "json"; - /////////////// - //支付回调消息类型 - ///////////// - public static final String MSG_TEXT = "text"; - public static final String MSG_XML = "xml"; - public static final String MSG_JSON = "json"; - - /////////////// - //支付消息事件 - ///////////// - // TODO 2017/1/6 17:25 author: egan 移除此处 -// public static String MSG_ALIPAY = "aliPay"; -// public static String MSG_WXPAY = "wxPay"; - - - - - - - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageHandler.java deleted file mode 100644 index 25b787b..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.bean.PayMessage; -import com.egzosn.pay.common.bean.PayOutMessage; -import com.egzosn.pay.common.exception.PayErrorException; -import java.util.Map; - - -/** - * 处理支付回调消息的处理器接口 - * @source Daniel Qian - * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:40:30 - */ -@Deprecated -public interface PayMessageHandler { - - /** - * @param payMessage - * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 - * @param payService - * @return xml,text格式的消息,如果在异步规则里处理的话,可以返回null - */ - public PayOutMessage handle(PayMessage payMessage, - Map context, - PayService payService - ) throws PayErrorException; - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageInterceptor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageInterceptor.java deleted file mode 100644 index f5bf45b..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageInterceptor.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.egzosn.pay.common.before.api; - - -import com.egzosn.pay.common.bean.PayMessage; -import com.egzosn.pay.common.exception.PayErrorException; - -import java.util.Map; - -/** - * 支付消息拦截器,可以用来做验证 - * @author Daniel Qian - */ -@Deprecated -public interface PayMessageInterceptor { - - /** - * 拦截支付消息 - * - * @param wxMessage - * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 - * @param payService - * @return true代表OK,false代表不OK - */ - public boolean intercept(PayMessage wxMessage, - Map context, - PayService payService - ) throws PayErrorException; - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouter.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouter.java deleted file mode 100644 index eaae2b0..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouter.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.api.PayErrorExceptionHandler; -import com.egzosn.pay.common.bean.PayMessage; -import com.egzosn.pay.common.bean.PayOutMessage; -import com.egzosn.pay.common.util.LogExceptionHandler; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -/** - *
- * 支付消息路由器,通过代码化的配置,把来自支付的消息交给handler处理
- * 
- * 说明:
- * 1. 配置路由规则时要按照从细到粗的原则,否则可能消息可能会被提前处理
- * 2. 默认情况下消息只会被处理一次,除非使用 {@link PayMessageRouterRule#next()}
- * 3. 规则的结束必须用{@link PayMessageRouterRule#end()}或者{@link PayMessageRouterRule#next()},否则不会生效
- * 
- * 使用方法:
- * PayMessageRouter router = new PayMessageRouter();
- * router
- *   .rule()
- *       .msgType("MSG_TYPE").event("EVENT").eventKey("EVENT_KEY").content("CONTENT")
- *       .interceptor(interceptor, ...).handler(handler, ...)
- *   .end()
- *   .rule()
- *       // 另外一个匹配规则
- *   .end()
- * ;
- * 
- * // 将PayMessage交给消息路由器
- * router.route(message);
- * 
- * 
- * @source chanjarster/weixin-java-tools - * @source Daniel Qian - * @author egan - * - */ -@Deprecated -public class PayMessageRouter { - - protected final Log log = LogFactory.getLog(PayMessageRouter.class); - - private static final int DEFAULT_THREAD_POOL_SIZE = 100; - - private final List rules = new ArrayList(); - - private final PayService payService; - - private ExecutorService executorService; - - private PayErrorExceptionHandler exceptionHandler; - - public PayMessageRouter(PayService payService) { - this.payService = payService; - this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE); - this.exceptionHandler = new LogExceptionHandler(); - } - - /** - *
-   * 设置自定义的 {@link ExecutorService}
-   * 如果不调用该方法,默认使用 Executors.newFixedThreadPool(100)
-   * 
- * @param executorService - */ - public void setExecutorService(ExecutorService executorService) { - this.executorService = executorService; - } - - - - /** - *
-   * 设置自定义的{@link PayErrorExceptionHandler}
-   * 如果不调用该方法,默认使用 {@link LogExceptionHandler}
-   * 
- * @param exceptionHandler - */ - public void setExceptionHandler(PayErrorExceptionHandler exceptionHandler) { - this.exceptionHandler = exceptionHandler; - } - - List getRules() { - return this.rules; - } - - /** - * 开始一个新的Route规则 - * @return - */ - public PayMessageRouterRule rule() { - return new PayMessageRouterRule(this); - } - - /** - * 处理支付消息 - * @param payMessage - */ - public PayOutMessage route(final PayMessage payMessage) { - - final List matchRules = new ArrayList(); - // 收集匹配的规则 - for (final PayMessageRouterRule rule : rules) { - if (rule.test(payMessage)) { - matchRules.add(rule); - if(!rule.isReEnter()) { - break; - } - } - } - - if (matchRules.size() == 0) { - return null; - } - - PayOutMessage res = null; - final List futures = new ArrayList(); - for (final PayMessageRouterRule rule : matchRules) { - // 返回最后一个非异步的rule的执行结果 - if(rule.isAsync()) { - futures.add( - executorService.submit(new Runnable() { - public void run() { - rule.service(payMessage, payService, exceptionHandler); - } - }) - ); - } else { - res = rule.service(payMessage, payService, exceptionHandler); - // 在同步操作结束,session访问结束 - log.debug("End session access: async=false, fromPay=" + payMessage.getFromPay()); - } - } - - if (futures.size() > 0) { - executorService.submit(new Runnable() { - @Override - public void run() { - for (Future future : futures) { - try { - future.get(); - log.debug("End session access: async=true, fromPay=" + payMessage.getFromPay()); - - } catch (InterruptedException e) { - log.error("Error happened when wait task finish", e); - } catch (ExecutionException e) { - log.error("Error happened when wait task finish", e); - } - } - } - }); - } - return res; - } - - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouterRule.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouterRule.java deleted file mode 100644 index 3246d8c..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayMessageRouterRule.java +++ /dev/null @@ -1,414 +0,0 @@ -package com.egzosn.pay.common.before.api; - - -import com.egzosn.pay.common.api.PayErrorExceptionHandler; -import com.egzosn.pay.common.bean.PayMessage; -import com.egzosn.pay.common.bean.PayOutMessage; -import com.egzosn.pay.common.exception.PayErrorException; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - - -/** - * - * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:28:01 - * @source chanjarster/weixin-java-tools - */ -@Deprecated -public class PayMessageRouterRule { - - private final PayMessageRouter routerBuilder; - - private boolean async = true; - - private String fromPay; - - private String msgType; - - private String payType; - - private String[] transactionType; - - private String discount; - - private String rDiscount; - - private String subject; - - private String rSubject; - - - private boolean reEnter = false; - - private List handlers = new ArrayList(); - - private List interceptors = new ArrayList(); - - public PayMessageRouterRule(PayMessageRouter routerBuilder) { - this.routerBuilder = routerBuilder; - } - - /** - * 设置是否异步执行,默认是true - * - * @param async - * @return - */ - public PayMessageRouterRule async(boolean async) { - this.async = async; - return this; - } - - /** - * 如果msgType等于某值 - * - * @param msgType - * @return - */ - public PayMessageRouterRule msgType(String msgType) { - this.msgType = msgType; - return this; - } - - /** - * 如果payType等于某值 - * - * @param payType - * @return - */ - public PayMessageRouterRule payType(String payType) { - this.payType = payType; - return this; - } - - /** - * 如果transactionType等于某值 - * - * @param transactionType - * @return - */ - public PayMessageRouterRule transactionType(String... transactionType) { - this.transactionType = transactionType; - return this; - } - - /** - * 如果discount等于某值 - * - * @param discount - * @return - */ - public PayMessageRouterRule discount(String discount) { - this.discount = discount; - return this; - } - - /** - * 如果discount匹配该正则表达式 - * - * @param regex - * @return - */ - public PayMessageRouterRule rDiscount(String regex) { - this.rDiscount = regex; - return this; - } - - /** - * 如果discount等于某值 - * - * @param subject - * @return - */ - public PayMessageRouterRule subject(String subject) { - this.subject = subject; - return this; - } - - /** - * 如果discount匹配该正则表达式 - * - * @param regex - * @return - */ - public PayMessageRouterRule rSubject(String regex) { - this.rSubject = regex; - return this; - } - - - /** - * 如果消息匹配某个matcher,用在用户需要自定义更复杂的匹配规则的时候 - * - * @param matcher - * @return - */ - /* public PayMessageRouterRule matcher(WxMpMessageMatcher matcher) { - this.matcher = matcher; - return this; - }*/ - - /** - * 设置微信消息拦截器 - * - * @param interceptor - * @return - */ - public PayMessageRouterRule interceptor(PayMessageInterceptor interceptor) { - return interceptor(interceptor, (PayMessageInterceptor[]) null); - } - - /** - * 设置微信消息拦截器 - * - * @param interceptor - * @param otherInterceptors - * @return - */ - public PayMessageRouterRule interceptor(PayMessageInterceptor interceptor, PayMessageInterceptor... otherInterceptors) { - this.interceptors.add(interceptor); - if (otherInterceptors != null && otherInterceptors.length > 0) { - for (PayMessageInterceptor i : otherInterceptors) { - this.interceptors.add(i); - } - } - return this; - } - - /** - * 设置微信消息处理器 - * - * @param handler - * @return - */ - public PayMessageRouterRule handler(PayMessageHandler handler) { - return handler(handler, (PayMessageHandler[]) null); - } - - /** - * 设置微信消息处理器 - * - * @param handler - * @param otherHandlers - * @return - */ - public PayMessageRouterRule handler(PayMessageHandler handler, PayMessageHandler... otherHandlers) { - this.handlers.add(handler); - if (otherHandlers != null && otherHandlers.length > 0) { - for (PayMessageHandler i : otherHandlers) { - this.handlers.add(i); - } - } - return this; - } - - /** - * 规则结束,代表如果一个消息匹配该规则,那么它将不再会进入其他规则 - * - * @return - */ - public PayMessageRouter end() { - this.routerBuilder.getRules().add(this); - return this.routerBuilder; - } - - /** - * 规则结束,但是消息还会进入其他规则 - * - * @return - */ - public PayMessageRouter next() { - this.reEnter = true; - return end(); - } - - /** - * 将支付事件修正为不区分大小写, - * 比如框架定义的事件常量为 - * @param payMessage - * @return - */ - protected boolean test(PayMessage payMessage) { - return ( - (this.fromPay == null || this.fromPay.toLowerCase().equals((payMessage.getFromPay() ==null?null:payMessage.getFromPay().toLowerCase()))) - && - (this.msgType == null || this.msgType.toLowerCase().equals((payMessage.getMsgType() ==null?null:payMessage.getMsgType().toLowerCase()))) - && - (this.payType == null || this.payType.equals((payMessage.getPayType() == null ? null : payMessage.getPayType()))) - && - (this.transactionType == null || equalsTransactionType(payMessage.getTransactionType()) ) - && - (this.discount == null || this.discount.equals(payMessage.getDiscount() == null ? null : payMessage.getDiscount().trim())) - && - (this.rDiscount == null || Pattern - .matches(this.rDiscount, payMessage.getDiscount() == null ? "" : payMessage.getDiscount().trim())) - && - (this.subject == null || this.subject - .equals(payMessage.getSubject() == null ? null : payMessage.getSubject().trim())) - && - (this.rSubject == null || Pattern - .matches(this.rSubject, payMessage.getSubject() == null ? "" : payMessage.getSubject().trim())) - ) - ; - } - - - /** - * 匹配交易类型 - * @param transactionType 交易类型 - * @return - */ - public boolean equalsTransactionType(String transactionType) { - if (null == transactionType){ - return false; - } - - for (String type :this.getTransactionType()){ - if (type.toLowerCase().equals((transactionType.toLowerCase()))){ - return true; - } - } - return false; - - } - - /** - * 处理支付回调过来的消息 - * - * @param payService - * @return true 代表继续执行别的router,false 代表停止执行别的router - */ - protected PayOutMessage service(PayMessage payMessage, - PayService payService, - PayErrorExceptionHandler exceptionHandler) { - - try { - - Map context = new HashMap(); - // 如果拦截器不通过 - for (PayMessageInterceptor interceptor : this.interceptors) { - if (!interceptor.intercept(payMessage, context, payService)) { - return null; - } - } - - // 交给handler处理 - PayOutMessage res = null; - for (PayMessageHandler handler : this.handlers) { - // 返回最后handler的结果 - res = handler.handle(payMessage, context, payService); - } - return res; - } catch (PayErrorException e) { - exceptionHandler.handle(e); - } - return null; - - } - - public PayMessageRouter getRouterBuilder() { - return routerBuilder; - } - - public boolean isAsync() { - return async; - } - - public void setAsync(boolean async) { - this.async = async; - } - - public String getFromPay() { - return fromPay; - } - - public void setFromPay(String fromPay) { - this.fromPay = fromPay; - } - - public String getMsgType() { - return msgType; - } - - public void setMsgType(String msgType) { - this.msgType = msgType; - } - - public String getPayType() { - return payType; - } - - public void setPayType(String payType) { - this.payType = payType; - } - - public String[] getTransactionType() { - return transactionType; - } - - public void setTransactionType(String[] transactionType) { - this.transactionType = transactionType; - } - - public String getDiscount() { - return discount; - } - - public void setDiscount(String discount) { - this.discount = discount; - } - - public String getrDiscount() { - return rDiscount; - } - - public void setrDiscount(String rDiscount) { - this.rDiscount = rDiscount; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String getrSubject() { - return rSubject; - } - - public void setrSubject(String rSubject) { - this.rSubject = rSubject; - } - - public boolean isReEnter() { - return reEnter; - } - - public void setReEnter(boolean reEnter) { - this.reEnter = reEnter; - } - - public List getHandlers() { - return handlers; - } - - public void setHandlers(List handlers) { - this.handlers = handlers; - } - - public List getInterceptors() { - return interceptors; - } - - public void setInterceptors(List interceptors) { - this.interceptors = interceptors; - } -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayService.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayService.java deleted file mode 100644 index 8e9f9a1..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/PayService.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.egzosn.pay.common.before.api; - -import com.egzosn.pay.common.bean.MethodType; -import com.egzosn.pay.common.bean.PayOrder; -import com.egzosn.pay.common.bean.PayOutMessage; -import com.egzosn.pay.common.exception.PayErrorException; - -import java.awt.image.BufferedImage; -import java.io.InputStream; -import java.util.Date; -import java.util.Map; - -/** - * 支付服务 - * - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 - * @see com.egzosn.pay.common.api.PayService - */ -@Deprecated - public interface PayService { - - /** - * 回调校验URL - * @return - */ - String getHttpsVerifyUrl(); - - /** - * 设置支付配置 - * @param payConfigStorage - */ - void setPayConfigStorage(PayConfigStorage payConfigStorage); - - /** - * 获取支付配置 - * @return - */ - PayConfigStorage getPayConfigStorage(); - - /** - * 回调校验 - * @param params 回调回来的参数集 - * @return - */ - boolean verify(Map params); - - /** - * 签名校验 - * @param params 参数集 - * @param sign 签名 - * @return - */ - boolean getSignVerify(Map params, String sign); - - /** - * URL校验 - * @param notify_id - * @return - * @throws PayErrorException - */ - String verifyUrl(String notify_id) throws PayErrorException; - - /** - * 请求接口 - * @param executor 请求的具体执行者 - * @param uri 请求地址 - * @param data 请求数据 - * @param 返回类型 - * @param 请求数据类型 - * @return - * @throws PayErrorException - * @source - */ - T execute(RequestExecutor executor, String uri, E data) throws PayErrorException; - - /** - * 返回创建的订单信息 - * - * @param order 支付订单 - * @return - * @see PayOrder - */ - Map orderInfo(PayOrder order); - - /** - * 创建签名 - * - * @param content 需要签名的内容 - * @param characterEncoding 字符编码 - * @return - */ - String createSign(String content, String characterEncoding); - - /** - * 将请求参数或者请求流转化为 Map - * @param parameterMap 请求参数 - * @param is 请求流 - * @return - */ - Map getParameter2Map(Map parameterMap, InputStream is); - - /** - * 获取输出消息,用户返回给支付端 - * @param code - * @param message - * @return - */ - PayOutMessage getPayOutMessage(String code, String message); - - /** - * 获取输出消息,用户返回给支付端, 针对于web端 - * @param orderInfo 发起支付的订单信息 - * @param method 请求方式 "post" "get", - * @see MethodType - * @return - */ - String buildRequest(Map orderInfo, MethodType method); - - /** - * 获取输出二维码,用户返回给支付端, - * @param orderInfo 发起支付的订单信息 - * @return - */ - BufferedImage genQrPay(Map orderInfo); - - /** - * 交易查询接口 - * @param tradeNo 支付平台订单号 - * @param outTradeNo 商户单号 - * @return - */ - Map query(String tradeNo, String outTradeNo); - - /** - * 交易关闭接口 - * @param tradeNo 支付平台订单号 - * @param outTradeNo 商户单号 - * @return - */ - Map close(String tradeNo, String outTradeNo); - - /** - * 交易关闭接口 - * @param tradeNo 支付平台订单号 - * @param outTradeNo 商户单号 - * @return - */ - Map refund(String tradeNo, String outTradeNo); - - /** - * 查询退款 - * @param tradeNo 支付平台订单号 - * @param outTradeNo 商户单号 - * @return - */ - Map refundquery(String tradeNo, String outTradeNo); - - /** - * 下载对账单 - * @param billDate 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; - * @param billType 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。 - * @return - */ - Object downloadbill(Date billDate, String billType); - - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/RequestExecutor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/RequestExecutor.java deleted file mode 100644 index 4a8f46c..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/api/RequestExecutor.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.egzosn.pay.common.before.api; - - -import com.egzosn.pay.common.exception.PayErrorException; -import org.apache.http.HttpHost; -import org.apache.http.impl.client.CloseableHttpClient; - -import java.io.IOException; - -/** - * http请求执行器 - * - * @param 返回值类型 - * @param 请求参数类型 - * @source chanjarster/weixin-java-tools - */ -@Deprecated -public interface RequestExecutor { - - /** - * - * @param httpclient 传入的httpClient - * @param httpProxy http代理对象,如果没有配置代理则为空 - * @param uri uri - * @param data 数据 - * @return - * @throws java.io.IOException - */ - public T execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, E data) throws PayErrorException, IOException; - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/bean/result/PayError.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/bean/result/PayError.java deleted file mode 100644 index 559cd78..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/bean/result/PayError.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.egzosn.pay.common.before.bean.result; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.egzosn.pay.common.util.XML; - -import java.io.Serializable; - -/** - * 支付错误码说明 - * @author Daniel Qian - * @dete 2017/1/12 9:57 - * @author: egan - * @source chanjarster/weixin-java-tools - * @see com.egzosn.pay.common.bean.result.PayError - */ -@Deprecated -public class PayError implements com.egzosn.pay.common.bean.result.PayError, Serializable { - - private int errorCode; - - private String errorMsg; - - private JSONObject json; - private String responseContent; - - public PayError() { - } - public PayError(int errorCode, String errorMsg) { - this.errorCode = errorCode; - this.errorMsg = errorMsg; - } - - - public PayError(int errorCode, String errorMsg, String responseContent) { - this(errorCode, errorMsg); - this.responseContent = responseContent; - } - - - public String getErrorCode() { - return errorCode + ""; - } - - public void setErrorCode(int errorCode) { - this.errorCode = errorCode; - } - - public String getErrorMsg() { - return errorMsg; - } - - @Override - public String getString() { - return "支付错误: errcode=" + errorCode + ", errmsg=" + errorMsg + "\njson:" + json; - } - - public void setErrorMsg(String errorMsg) { - this.errorMsg = errorMsg; - } - - public JSONObject getJson() { - return json; - } - - public void setJson(JSONObject json) { - this.json = json; - } - - public String getResponseContent() { - return responseContent; - } - - public void setResponseContent(String responseContent) { - this.responseContent = responseContent; - } - - public static PayError fromJson(String json) { - - JSONObject jsonObject = JSON.parseObject(json); - PayError error = jsonObject.toJavaObject(PayError.class); - error.setJson(jsonObject); - error.setResponseContent(json); - return error; - } - - public static PayError fromXml(String xml) { - JSONObject jsonObject = XML.toJSONObject(xml); - if (null == jsonObject.get("return_code")){ - PayError error = new PayError(403, null == jsonObject.get("return_msg") ? "未知错误!" : jsonObject.get("return_msg").toString()); - return error; - } - - if ("FAIL".equals( jsonObject.get("return_code"))){ - PayError error = new PayError(-1, jsonObject.get("return_msg").toString()); - return error; - } - return null; - } - - - @Override - public String toString() { - return "支付错误: errcode=" + errorCode + ", errmsg=" + errorMsg + "\njson:" + json; - } - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimpleGetRequestExecutor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimpleGetRequestExecutor.java deleted file mode 100644 index 5787b95..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimpleGetRequestExecutor.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.egzosn.pay.common.before.util.http; - -/** - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-24 - * @source chanjarster/weixin-java-tools - */ - -import com.egzosn.pay.common.before.api.RequestExecutor; -import com.egzosn.pay.common.exception.PayErrorException; -import org.apache.http.HttpHost; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; - -import java.io.IOException; - -/** - * 简单的GET请求执行器,请求的参数是String, 返回的结果也是String - * @author Daniel Qian - * - */ -public class SimpleGetRequestExecutor implements RequestExecutor { - - @Override - public String execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String queryParam) throws IOException, PayErrorException { - if (queryParam != null) { - if (uri.indexOf('?') == -1) { - uri += '?'; - } - uri += uri.endsWith("?") ? queryParam : '&' + queryParam; - } - HttpGet httpGet = new HttpGet(uri); - if (httpProxy != null) { - RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); - httpGet.setConfig(config); - } - - try (CloseableHttpResponse response = httpclient.execute(httpGet)) { - String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); - return responseContent; - }finally { - httpGet.releaseConnection(); - } - - } - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimplePostRequestExecutor.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimplePostRequestExecutor.java deleted file mode 100644 index fd4741a..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/SimplePostRequestExecutor.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.egzosn.pay.common.before.util.http; - -import com.egzosn.pay.common.before.api.RequestExecutor; -import com.egzosn.pay.common.exception.PayErrorException; -import org.apache.http.Consts; -import org.apache.http.HttpHost; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; - -import java.io.IOException; -import java.util.Map; - -/** - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 - * @author Daniel Qian - * @source chanjarster/weixin-java-tools - */ -public class SimplePostRequestExecutor implements RequestExecutor { - - @Override - public String execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, Object postEntity) throws PayErrorException, ClientProtocolException, IOException { - HttpPost httpPost = new HttpPost(uri); - if (httpProxy != null) { - RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); - httpPost.setConfig(config); - } - - - if (postEntity instanceof Map) { - StringBuilder builder = new StringBuilder(); - Map pe = (Map) postEntity; - for (Object key : pe.keySet()) { - builder.append(key).append("=").append(pe.get(key)).append("&"); - } - if (builder.length() > 1) { - builder.deleteCharAt(builder.length() - 1); - } - StringEntity entity = new StringEntity(builder.toString(), Consts.UTF_8); - httpPost.setEntity(entity); - } else if (postEntity instanceof String) { - - StringEntity entity = new StringEntity((String) postEntity, Consts.UTF_8); - httpPost.setEntity(entity); - } - - - try (CloseableHttpResponse response = httpclient.execute(httpPost)) { - String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); - - return responseContent; - }finally { - httpPost.releaseConnection(); - } - } - -} \ No newline at end of file diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/Utf8ResponseHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/Utf8ResponseHandler.java deleted file mode 100644 index 2c15238..0000000 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/before/util/http/Utf8ResponseHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.egzosn.pay.common.before.util.http; - -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.HttpResponseException; -import org.apache.http.client.ResponseHandler; -import org.apache.http.util.EntityUtils; - -import java.io.IOException; - - /** - * @source chanjarster/weixin-java-tools - * @author Daniel Qian - * @author egan - * @email egzosn@gmail.com - * @date 2016-5-24 - */ -public class Utf8ResponseHandler implements ResponseHandler { - - public static final ResponseHandler INSTANCE = new Utf8ResponseHandler(); - - public String handleResponse(final HttpResponse response) throws IOException { - final StatusLine statusLine = response.getStatusLine(); - final HttpEntity entity = response.getEntity(); - if (statusLine.getStatusCode() >= 300 && statusLine.getStatusCode() != 304) { - EntityUtils.consume(entity); - throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase()); - } - return entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8); - } - -} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/exception/PayErrorException.java b/pay-java-common/src/main/java/com/egzosn/pay/common/exception/PayErrorException.java index 0eac659..3b077b4 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/exception/PayErrorException.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/exception/PayErrorException.java @@ -4,8 +4,10 @@ import com.egzosn.pay.common.bean.result.PayError; /** * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + *
+ * email egzosn@gmail.com
+ * date 2016-5-18 14:09:01
+ *  
*/ public class PayErrorException extends RuntimeException { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/http/ClientHttpRequest.java b/pay-java-common/src/main/java/com/egzosn/pay/common/http/ClientHttpRequest.java index 30a5b88..29b7eae 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/http/ClientHttpRequest.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/http/ClientHttpRequest.java @@ -26,8 +26,10 @@ import static com.egzosn.pay.common.http.UriVariables.getMapToParameters; /** * 一个HTTP请求的客户端 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/4 17:56 + *
+ * email egzosn@gmail.com
+ * date 2017/3/4 17:56
+ *  
*/ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase implements org.apache.http.client.ResponseHandler{ //http请求 @@ -83,7 +85,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme /** * 设置代理 * @param httpProxy http代理配置信息 - * @return + * @return 当前HTTP请求的客户端 */ public ClientHttpRequest setProxy(HttpHost httpProxy){ if (httpProxy != null) { @@ -98,7 +100,7 @@ public class ClientHttpRequest extends HttpEntityEnclosingRequestBase impleme * 设置请求参数 * * @param request 请求参数 - * @return + * @return 当前HTTP请求的客户端 */ public ClientHttpRequest setParameters(Object request) { if (null == request){ diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpConfigStorage.java b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpConfigStorage.java index 1e8f916..8bc93f0 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpConfigStorage.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpConfigStorage.java @@ -4,8 +4,10 @@ package com.egzosn.pay.common.http; /** * HTTP 配置 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/3 20:48 + *
+ * email egzosn@gmail.com
+ * date 2017/3/3 20:48
+ *  
*/ public class HttpConfigStorage { //http代理地址 @@ -20,7 +22,7 @@ public class HttpConfigStorage { /** * http代理地址 - * @return + * @return http代理地址 */ public String getHttpProxyHost() { return httpProxyHost; @@ -33,7 +35,7 @@ public class HttpConfigStorage { /** * 代理端口 - * @return + * @return 代理端口 */ public int getHttpProxyPort() { return httpProxyPort; @@ -44,7 +46,7 @@ public class HttpConfigStorage { } /** * 代理用户名 - * @return + * @return 代理用户名 */ public String getHttpProxyUsername() { return httpProxyUsername; @@ -56,7 +58,7 @@ public class HttpConfigStorage { /** * 代理密码 - * @return + * @return 代理密码 */ public String getHttpProxyPassword() { return httpProxyPassword; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java index ff3831c..1043fb1 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java @@ -18,8 +18,10 @@ import java.util.Map; /** * http请求工具 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/3 21:33 + *
+ * email egzosn@gmail.com
+ * date 2017/3/3 21:33
+ *  
*/ public class HttpRequestTemplate { @@ -43,6 +45,11 @@ public class HttpRequestTemplate { setHttpConfigStorage(null); } + /** + * 设置HTTP请求的配置 + * @param configStorage 请求配置 + * @return 当前HTTP请求的客户端模板 + */ public HttpRequestTemplate setHttpConfigStorage(HttpConfigStorage configStorage){ if (null == configStorage){ @@ -79,11 +86,11 @@ public class HttpRequestTemplate { * * post * @param uri 请求地址 - * @param request + * @param request 请求参数 * @param responseType 为响应类(需要自己依据响应格式来确定) - * @param - * @return - * @throws IOException + * @param uriVariables 地址通配符对应的值 + * @param 响应类型 + * @return 类型对象 */ public T postForObject(String uri, Object request, Class responseType, Object... uriVariables){ return doExecute(URI.create(UriVariables.getUri(uri, uriVariables)), request, responseType, MethodType.POST); @@ -105,10 +112,10 @@ public class HttpRequestTemplate { * @param responseType 响应类型 * @param uriVariables 用于匹配表达式 * @param 响应类型 - * @return + * @return 类型对象 * * - * getForObject("http://egan.in/pay/{id}/f/{type}", String.class, "1", "APP") + * getForObject("http://egan.in/pay/{id}/f/{type}", String.class, "1", "APP") * */ public T getForObject(String uri, Class responseType, Object... uriVariables){ @@ -123,12 +130,12 @@ public class HttpRequestTemplate { * @param responseType 响应类型 * @param uriVariables 用于匹配表达式 * @param 响应类型 - * @return + * @return 类型对象 * - * Map uriVariables = new HashMap(); - * uriVariables.put("id", "1"); - * uriVariables.put("type", "APP"); - * getForObject("http://egan.in/pay/{id}/f/{type}", String.class, uriVariables) + * Map<String, String> uriVariables = new HashMap<String, String>(); + * uriVariables.put("id", "1"); + * uriVariables.put("type", "APP"); + * getForObject("http://egan.in/pay/{id}/f/{type}", String.class, uriVariables) * */ public T getForObject(String uri, Class responseType, Map uriVariables){ @@ -142,9 +149,8 @@ public class HttpRequestTemplate { * @param request 请求数据 * @param responseType 响应类型 * @param method 请求方法 - * @param - * @return - * @throws IOException + * @param 响应类型 + * @return 类型对象 */ public T doExecute(URI uri, Object request, Class responseType, MethodType method){ ClientHttpRequest httpRequest = new ClientHttpRequest(uri ,method, request); @@ -165,9 +171,8 @@ public class HttpRequestTemplate { * @param request 请求数据 * @param responseType 响应类型 * @param method 请求方法 - * @param - * @return - * @throws IOException + * @param 响应类型 + * @return 类型对象 */ public T doExecute(String uri, Object request, Class responseType, MethodType method){ return doExecute(URI.create(uri), request, responseType, method); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/http/UriVariables.java b/pay-java-common/src/main/java/com/egzosn/pay/common/http/UriVariables.java index e3cd8af..68aa653 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/http/UriVariables.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/http/UriVariables.java @@ -17,18 +17,20 @@ import java.util.regex.Pattern; * URL表达式处理器 * * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/5 10:07 + *
+ * email egzosn@gmail.com
+ * date 2017/3/5 10:07
+ * 
*/ public class UriVariables { /** * 依次匹配 - * @param uri - * @param uriVariables - * @return + * @param uri 匹配的uri,带代表式 + * @param uriVariables 匹配表达式的值 + * @return 匹配完的url * - * System.out.println(getUri("http://egan.in/{a}/ba/{a1}?{bb}={a1}", "no1", "no2", "no3", "no4")); + * System.out.println(getUri("http://egan.in/{a}/ba/{a1}?{bb}={a1}", "no1", "no2", "no3", "no4")); * 结果 http://egan.in/no1/ba/no2?no3=no4 * * @@ -51,15 +53,15 @@ public class UriVariables { /** * 匹配Map.key - * @param uri - * @param uriVariables - * @return + * @param uri 匹配的uri,带代表式 + * @param uriVariables 匹配表达式的值 + * @return 匹配完的url * - * Map uriVariable = new HashMap<>(); - * uriVariable.put("a", "no1"); - * uriVariable.put("a1", "no2"); - * uriVariable.put("bb", "no3"); - * System.out.println(getUri("http://egan.in/{a}/ba/{a1}?{bb}={a1}", uriVariable)); + * Map<String, Object> uriVariable = new HashMap<String, Object>(); + * uriVariable.put("a", "no1"); + * uriVariable.put("a1", "no2"); + * uriVariable.put("bb", "no3"); + * System.out.println(getUri("http://egan.in/{a}/ba/{a1}?{bb}={a1}", uriVariable)); * 结果 http://egan.in/no1/ba/no2?no3=no2 * */ @@ -83,8 +85,8 @@ public class UriVariables { /** * Map转化为对应得参数字符串 - * @param pe - * @return + * @param pe 参数 + * @return 参数字符串 */ public static String getMapToParameters(Map pe){ StringBuilder builder = new StringBuilder(); diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/LogExceptionHandler.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/LogExceptionHandler.java index 297d05b..35550c5 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/LogExceptionHandler.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/LogExceptionHandler.java @@ -10,9 +10,13 @@ import org.apache.commons.logging.LogFactory; /** * LogExceptionHandler 日志处理器 * @author egan - * @email egzosn@gmail.com - * @date 2016-6-1 11:28:01 - * @source chanjarster/weixin-java-tools + *
+ * email egzosn@gmail.com
+ * date 2016-6-1 11:28:01
+ *
+ *
+ * source chanjarster/weixin-java-tools
+ * 
*/ public class LogExceptionHandler implements PayErrorExceptionHandler { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/MatrixToImageWriter.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/MatrixToImageWriter.java index d72c10d..fc32049 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/MatrixToImageWriter.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/MatrixToImageWriter.java @@ -17,8 +17,10 @@ import java.util.Map; /** * 二维码生成工具 * @author egan - * @email egzosn@gmail.com - * @date 2017/2/7 10:35 + *
+ * email egzosn@gmail.com
+ * date  2017/2/7 10:35
+ * 
*/ public class MatrixToImageWriter { @@ -32,7 +34,7 @@ public class MatrixToImageWriter { * 根据二维矩阵的碎片 生成对应的二维码图像缓冲 * @param matrix 二维矩阵的碎片 包含 宽高 行,字节 * @see com.google.zxing.common.BitMatrix - * @return + * @return 二维码图像缓冲 */ public static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); @@ -49,10 +51,10 @@ public class MatrixToImageWriter { /** * 二维码生成文件 - * @param matrix - * @param format - * @param file - * @throws IOException + * @param matrix 二维矩阵的碎片 包含 宽高 行,字节 + * @param format 格式 + * @param file 保持的文件地址 + * @throws IOException 文件保存异常 */ public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException { @@ -65,10 +67,10 @@ public class MatrixToImageWriter { /** * 二维码生成流 - * @param matrix - * @param format - * @param stream - * @throws IOException + * @param matrix 二维矩阵的碎片 包含 宽高 行,字节 + * @param format 格式 + * @param stream 保持的文件输出流 + * @throws IOException 文件保存异常 */ public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) throws IOException { @@ -81,8 +83,8 @@ public class MatrixToImageWriter { /** * 二维码信息写成JPG文件 - * @param content - * @param fileUrl + * @param content 二维码信息 + * @param fileUrl 文件地址 */ public static void writeInfoToJpgFile(String content, String fileUrl){ MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); @@ -101,8 +103,8 @@ public class MatrixToImageWriter { /** * 二维码信息写成JPG BufferedImage - * @param content - * @return + * @param content 二维码信息 + * @return JPG BufferedImage */ public static BufferedImage writeInfoToJpgBuff(String content){ BufferedImage re=null; diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java index 1dfa49d..214610b 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java @@ -18,14 +18,16 @@ import java.util.Map; /** * XML工具 * @author egan - * @email egzosn@gmail.com - * @date 2016-6-2 19:45:06 + *
+ * email egzosn@gmail.com
+ * date 2016-6-2 19:45:06
+ * 
*/ public class XML { /** * 解析xml并转化为Json值 * @param content json字符串 - * @return + * @return Json值 */ public static JSONObject toJSONObject(String content){ @@ -45,7 +47,7 @@ public class XML { /** * 解析xml并转化为json值 * @param in 输入流 - * @return + * @return Json值 */ public static JSONObject toJSONObject(InputStream in) { @@ -63,7 +65,13 @@ public class XML { } - + /** + * + * @param in xml输入流 + * @param m 参数集 + * @return 整理完成的参数集 + * @throws IOException xml io转化异常 + */ public static Map inputStream2Map(InputStream in, Map m) throws IOException { if (null == m){ m = new JSONObject(); @@ -97,8 +105,8 @@ public class XML { /** * 获取子结点的xml * - * @param children - * @return String + * @param children 集合 + * @return String 子结点的xml */ public static String getChildrenText(List children) { StringBuffer sb = new StringBuffer(); @@ -122,9 +130,9 @@ public class XML { } /** - * @Description:将请求参数转换为xml格式的string + * 将请求参数转换为xml格式的string * @param parameters 请求参数 - * @return + * @return xml */ public static String getMap2Xml(Map parameters) { StringBuffer sb = new StringBuffer(); 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 2b224b0..ef8ed82 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 @@ -10,8 +10,10 @@ import java.util.*; * 签名 工具 * * @author: egan - * @email egzosn@gmail.com - * @date 2016/11/9 17:45 + *
+ * email egzosn@gmail.com
+ * date 2016/11/9 17:45
+ * 
*/ public enum SignUtils { @@ -21,7 +23,7 @@ public enum SignUtils { * @param content 需要签名的内容 * @param key 密钥 * @param characterEncoding 字符编码 - * @return + * @return 签名值 */ @Override public String createSign(String content, String key, String characterEncoding) { @@ -76,64 +78,6 @@ public enum SignUtils { return parameterText(parameters, "&"); } - /** - * - * 把数组所有元素排序,并按照“参数=参数值”的模式用“@param separator”字符拼接成字符串 - * @param parameters 参数 - * @param separator 分隔符 - * @return 去掉空值与签名参数后的新签名,拼接后字符串 - */ - /* public static String parameterText(Map parameters, String separator) { - if(parameters == null){ - return ""; - } - StringBuffer sb = new StringBuffer(); - - // TODO 2016/11/11 10:14 author: egan 已经排序好处理 - if (parameters instanceof SortedMap) { - for (String k : ((Set) parameters.keySet())) { - Object v = parameters.get(k); - if (null == v || "".equals(v.toString().trim()) || "sign".equals(k) || "key".equals(k) || "appId".equals(k) || "sign_type".equalsIgnoreCase(k)) { - continue; - } - sb.append(k ).append("=").append( v.toString().trim()).append(separator); - } - if (sb.length() > 0 && !"".equals(separator)) { - sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); - - } - - - // TODO 2016/11/11 10:14 author: egan 未排序须处理 - List keys = new ArrayList(parameters.keySet()); - //排序 - Collections.sort(keys); - for (String k : keys) { - String valueStr = ""; - Object o = parameters.get(k); - if (o instanceof String[]) { - String[] values = (String[]) o; - if (null == values){continue;} - for (int i = 0; i < values.length; i++) { - String value = values[i].trim(); - if ("".equals(value)){ continue;} - valueStr += (i == values.length - 1) ? value : value + ","; - } - } else if (o != null) { - valueStr = o.toString(); - } - if (null == valueStr || "".equals(valueStr.toString().trim()) || "sign".equals(k) || "key".equals(k) || "appId".equals(k) || "sign_type".equalsIgnoreCase(k)) { - continue; - } - sb.append(k ).append("=").append( valueStr).append(separator); - } - if (sb.length() > 0) { - sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); - }*/ /** * @@ -211,9 +155,9 @@ public enum SignUtils { /** * 将参数集合(事前做好排序)按分割符号拼凑字符串并加密为MD5 * example: mchnt_cd+"|" +order_id+"|"+order_amt+"|"+order_pay_type+"|"+page_notify_url+"|"+back_notify_url+"|"+order_valid_time+"|"+iss_ins_cd+"|"+goods_name+"|"+"+goods_display_url+"|"+rem+"|"+ver+"|"+mchnt_key - * @param parameters - * @param separator - * @return + * @param parameters 参数集合 + * @param separator 分隔符 + * @return 参数排序好的值 */ public static String parameters2MD5Str(Object parameters, String separator){ StringBuffer sb = new StringBuffer(); @@ -240,7 +184,7 @@ public enum SignUtils { /** * 获取随机字符串 - * @return + * @return 随机字符串 */ public static String randomStr(){ return UUID.randomUUID().toString().replace("-", ""); @@ -252,7 +196,7 @@ public enum SignUtils { * @param parameters 需要进行排序签名的参数 * @param key 密钥 * @param characterEncoding 编码格式 - * @return + * @return 签名值 */ public String sign(Map parameters, String key, String characterEncoding) { @@ -262,9 +206,9 @@ public enum SignUtils { * 签名 * @param parameters 需要进行排序签名的参数 * @param key 密钥 - * @param separator 分隔符 默认 & + * @param separator 分隔符 默认 & * @param characterEncoding 编码格式 - * @return + * @return 签名值 */ public String sign(Map parameters, String key, String separator, String characterEncoding) { @@ -278,7 +222,7 @@ public enum SignUtils { * @param content 需要签名的内容 * @param key 密钥 * @param characterEncoding 字符编码 - * @return + * @return 签名值 */ public abstract String createSign(String content, String key, String characterEncoding); @@ -293,7 +237,6 @@ public enum SignUtils { */ public boolean verify(Map params, String sign, String key, String characterEncoding){ //判断是否一样 -// return StringUtils.equals(sign(params, key, characterEncoding), sign); return this.verify(parameterText(params), sign, key, characterEncoding); } @@ -309,8 +252,4 @@ public enum SignUtils { */ public abstract boolean verify(String text, String sign, String key, String characterEncoding); - - - //签名错误代码 - public static final int SIGN_ERROR = 91; } diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/MD5.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/MD5.java index 848b91f..5db35ac 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/MD5.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/MD5.java @@ -45,9 +45,7 @@ public class MD5 { /** * @param content 需要加密串 * @param charset 字符集 - * @return - * @throws SignatureException - * @throws UnsupportedEncodingException + * @return 加密后的字节数组 */ public static byte[] getContentBytes(String content, String charset) { if (StringUtils.isEmpty(charset)) { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA.java index 98190a5..32a50c0 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA.java @@ -101,6 +101,7 @@ public class RSA{ * @param privateKey 商户私钥 * @param characterEncoding 编码格式 * @return 解密后的字符串 + * @throws Exception 解密异常 */ public static String decrypt(String content, String privateKey, String characterEncoding) throws Exception { PrivateKey prikey = getPrivateKey(privateKey); @@ -132,7 +133,8 @@ public class RSA{ /** * 得到私钥 * @param key 密钥字符串(经过base64编码) - * @throws Exception + * @throws Exception 加密异常 + * @return 私钥 */ public static PrivateKey getPrivateKey(String key) throws Exception { diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA2.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA2.java index b5b93a8..3caac65 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA2.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/encrypt/RSA2.java @@ -36,6 +36,7 @@ public class RSA2 { * @param privateKey 商户私钥 * @param characterEncoding 编码格式 * @return 解密后的字符串 + * @throws Exception 解密异常 */ public static String decrypt(String content, String privateKey, String characterEncoding) throws Exception { return RSA.decrypt(content, privateKey, characterEncoding); @@ -45,7 +46,8 @@ public class RSA2 { /** * 得到私钥 * @param key 密钥字符串(经过base64编码) - * @throws Exception + * @throws Exception 加密异常 + * @return 私钥 */ public static PrivateKey getPrivateKey(String key) throws Exception { return RSA.getPrivateKey(key); 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 9ec0f6c..d9abb3f 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 @@ -46,7 +46,7 @@ public class PayController { * 这里模拟账户信息增加 * * @param account - * @return + * @return 支付账户信息 */ @RequestMapping("add") public Map add(ApyAccount account) { @@ -66,7 +66,7 @@ public class PayController { * @param payId 账户id * @param transactionType 交易类型, 这个针对于每一个 支付类型的对应的几种交易方式 * @param bankType 针对刷卡支付,卡的类型,类型值 - * @return + * @return 跳到支付页面 */ @RequestMapping(value = "toPay.html", produces = "text/html;charset=UTF-8") public String toPay(Integer payId, String transactionType, String bankType, BigDecimal price) { @@ -88,7 +88,7 @@ public class PayController { * 获取二维码图像 * 二维码支付 * - * @return + * @return 二维码图像 */ @RequestMapping(value = "toQrPay.jpg", produces = "image/jpeg;charset=UTF-8") public byte[] toWxQrPay(Integer payId, String transactionType, BigDecimal price) throws IOException { @@ -106,7 +106,7 @@ public class PayController { * * @param payId 支付账户id * @param transactionType 交易类型 - * @return + * @return 支付预订单信息 */ @RequestMapping("getOrderInfo") public Map getOrderInfo(Integer payId, String transactionType, BigDecimal price) { @@ -121,10 +121,10 @@ public class PayController { /** - * 微信或者支付宝回调地址 + * 支付回调地址 * * @param request - * @return + * @return 支付是否成功 */ @RequestMapping(value = "payBack{payId}.json") public String payBack(HttpServletRequest request, @PathVariable Integer payId) throws IOException { @@ -151,7 +151,7 @@ public class PayController { * 查询 * * @param order 订单的请求体 - * @return + * @return 返回查询回来的结果集,支付方原值返回 */ @RequestMapping("query") public Map query(QueryOrder order) { @@ -163,7 +163,7 @@ public class PayController { * 交易关闭接口 * * @param order 订单的请求体 - * @return + * @return 返回支付方交易关闭后的结果 */ @RequestMapping("close") public Map close(QueryOrder order) { @@ -175,7 +175,7 @@ public class PayController { * 申请退款接口 * * @param order 订单的请求体 - * @return + * @return 返回支付方申请退款后的结果 */ @RequestMapping("refund") public Map refund(QueryOrder order) { @@ -189,7 +189,7 @@ public class PayController { * 查询退款 * * @param order 订单的请求体 - * @return + * @return 返回支付方查询退款后的结果 */ @RequestMapping("refundquery") public Map refundquery(QueryOrder order) { @@ -201,7 +201,7 @@ public class PayController { * 下载对账单 * * @param order 订单的请求体 - * @return + * @return 返回支付方下载对账单的结果 */ @RequestMapping("downloadbill") public Object downloadbill(QueryOrder order) { @@ -215,7 +215,7 @@ public class PayController { * 通用查询接口,根据 TransactionType 类型进行实现,此接口不包括退款 * * @param order 订单的请求体 - * @return + * @return 返回支付方对应接口的结果 */ @RequestMapping("secondaryInterface") public Map secondaryInterface(QueryOrder order) { diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayConfigStorage.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayConfigStorage.java index 78c7aec..a5bd59c 100644 --- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayConfigStorage.java +++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayConfigStorage.java @@ -5,8 +5,9 @@ import com.egzosn.pay.common.api.BasePayConfigStorage; /** * 支付客户端配置存储 * @author egan - * @email egzosn@gmail.com - * @date 2017/01/12 22:58 + * + * email egzosn@gmail.com + * date 2017/01/12 22:58 */ public class WxYouDianPayConfigStorage extends BasePayConfigStorage { diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java index 004e8e9..fc7167a 100644 --- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java +++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java @@ -29,8 +29,9 @@ import java.util.concurrent.locks.Lock; /** * 友店支付服务 * @author egan - * @email egzosn@gmail.com - * @date 2017/01/12 22:58 + * + * email egzosn@gmail.com + * date 2017/01/12 22:58 */ public class WxYouDianPayService extends BasePayService { protected final Log log = LogFactory.getLog(WxYouDianPayService.class); @@ -44,7 +45,10 @@ public class WxYouDianPayService extends BasePayService { public final static String unifiedOrderUrl = "http://life.51youdian.com/Api/CheckoutCounter/unifiedorder"; - + /** + * 获取请求token + * @return 授权令牌 + */ public String getAccessToken() { try { return getAccessToken(false); @@ -56,9 +60,9 @@ public class WxYouDianPayService extends BasePayService { /** * 获取授权令牌 - * @param forceRefresh - * @return - * @throws PayErrorException + * @param forceRefresh 是否重新获取, true重新获取 + * @return 新的授权令牌 + * @throws PayErrorException 支付异常 */ public String getAccessToken(boolean forceRefresh) throws PayErrorException { Lock lock = payConfigStorage.getAccessTokenLock(); @@ -85,40 +89,6 @@ public class WxYouDianPayService extends BasePayService { }else { throw new PayErrorException(new YdPayError(errorcode, json.getString("msg"), json.toJSONString())); } - - /* try { - HttpGet httpGet = new HttpGet(resetLoginUrl+ "?" + param.toString()); - if (this.httpProxy != null) { - RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); - httpGet.setConfig(config); - } - try (CloseableHttpResponse response = getHttpClient().execute(httpGet)) { - String responseObj = new BasicResponseHandler().handleResponse(response); - JSONObject json = JSON.parseObject(responseObj); - int errorcode = json.getIntValue("errorcode"); - - switch (errorcode){ - //成功 - case 0: - //刷新 - payConfigStorage.updateAccessToken(payConfigStorage.getAccessToken(), 7200); - break; - //登录已过期 - case 401: - //进行重新登陆 - JSONObject login = login(); - payConfigStorage.updateAccessToken(login.getString("access_token"), login.getLongValue("viptime")); - break; - default: - throw new PayErrorException(new PayError(errorcode, json.getString("msg"), responseObj)); - - } - }finally { - httpGet.releaseConnection(); - } - } catch (IOException e) { - throw new RuntimeException(e); - }*/ } } finally { lock.unlock(); @@ -128,9 +98,9 @@ public class WxYouDianPayService extends BasePayService { /** - * 登录 获取授权码 - * @return - * @throws PayErrorException + * 登录 并获取登陆信息(授权码) + * @return 登陆信息 + * @throws PayErrorException 支付异常 */ public JSONObject login() throws PayErrorException { TreeMap data = new TreeMap<>(); @@ -153,12 +123,17 @@ public class WxYouDianPayService extends BasePayService { /** * 微信友店2支付状态校验 - * @return + * @return 请求地址 */ public String getHttpsVerifyUrl() { return unifiedorderStatusUrl; } - + /** + * 回调校验 + * + * @param params 回调回来的参数集 + * @return 签名校验 true通过 + */ @Override public boolean verify(Map params) { if (!"SUCCESS".equals(params.get("return_code"))){ @@ -188,11 +163,12 @@ public class WxYouDianPayService extends BasePayService { } + /** * 验证链接来源是否有效 - * @param id 商户订单号(扫码收款返回的order_sn) - * @return - * @throws PayErrorException + * 校验数据来源 + * @param id id 商户订单号(扫码收款返回的order_sn) + * @return true通过 */ @Override public boolean verifySource(String id) { @@ -219,8 +195,8 @@ public class WxYouDianPayService extends BasePayService { * @see MethodType#GET * @see MethodType#POST * @param request 请求内容,GET无需 - * @return - * @throws PayErrorException + * @return 请求成功后的结果 + * @throws PayErrorException 支付异常 */ public JSONObject execute(String uri, MethodType method, Object request) throws PayErrorException { int retryTimes = 0; @@ -230,7 +206,7 @@ public class WxYouDianPayService extends BasePayService { if ( 0 != result.getIntValue("errorcode")){ throw new PayErrorException(new YdPayError(result.getIntValue("errorcode"), result.getString("msg"), result.toJSONString())); } - + return result; }catch (PayErrorException e){ PayError error = e.getPayError(); if ("401".equals(error.getErrorCode()) ) { @@ -256,12 +232,13 @@ public class WxYouDianPayService extends BasePayService { } + /** * 获取支付平台所需的订单信息 * * @param order 支付订单 - * @return - * @see PayOrder + * @return 订单信息 + * @see PayOrder 支付订单信息 */ @Override public JSONObject orderInfo(PayOrder order) { @@ -275,7 +252,7 @@ public class WxYouDianPayService extends BasePayService { try { JSONObject json = execute(unifiedOrderUrl+ "?" + params, MethodType.GET, null); //友店比较特殊,需要在下完预订单后,自己存储 order_sn 对应 微信官方文档 out_trade_no - order.setTradeNo(json.getString("order_sn")); + order.setOutTradeNo(json.getString("order_sn")); return json; } catch (PayErrorException e) { e.printStackTrace(); @@ -294,7 +271,7 @@ public class WxYouDianPayService extends BasePayService { * 2、将所有的参数集进行key排序 * 3、将排序后的数组从起始位置拼接成字符串如:password=XXXXXXXusername=XXXXX * 4、将拼接出来的字符串连接上apb_nonce的值即AAAAAAAAAA。再连接 password=XXXXXXXusername=XXXXXAAAAAAAAAA - * @return + * @return 签名结果 */ @Override public String createSign(String content, String characterEncoding) { @@ -302,10 +279,11 @@ public class WxYouDianPayService extends BasePayService { } /** + * 将请求参数或者请求流转化为 Map * * @param parameterMap 请求参数 * @param is 请求流 - * @return + * @return 获得回调的请求参数 */ @Override public Map getParameter2Map(Map parameterMap, InputStream is) { @@ -332,12 +310,12 @@ public class WxYouDianPayService extends BasePayService { *return_code 返回码只有SUCCESS和FAIL *return_msg 返回具体信息 *nonce_str 您的服务器新生成随机生成32位字符串 - *sign 为签名,签名规则是您需要发送的所有数据(除了sign)按照字典升序排列后加上&key=xxxxxxxx您的密钥后md5加密,最后转成小写 + *sign 为签名,签名规则是您需要发送的所有数据(除了sign)按照字典升序排列后加上&key=xxxxxxxx您的密钥后md5加密,最后转成小写 *最后把得到的所有需要返回的数据用json格式化成json对象格式如下 - *{‘return_code’:’SUCCESS’,’return_msg’:’ok’,’nonce_str’:’dddddddddddddddddddd’,’sign’:’sdddddddddddddddddd’} + *{"return_code":"SUCCESS","return_msg":"ok","nonce_str":"dddddddddddddddddddd’,’sign’:’sdddddddddddddddddd"} * @param code return_code * @param message return_msg - * @return + * @return 返回输出消息 */ @Override public PayOutMessage getPayOutMessage(String code, String message) { @@ -353,8 +331,9 @@ public class WxYouDianPayService extends BasePayService { * 针对web端的即时付款 * 暂未实现或无此功能 * @param orderInfo 发起支付的订单信息 - * @param method 请求方式 "post" "get", - * @return + * @param method 请求方式 "post" "get", + * @return 获取输出消息,用户返回给支付端, 针对于web端 + * @see MethodType 请求类型 */ @Override public String buildRequest(Map orderInfo, MethodType method) { diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YdPayError.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YdPayError.java index 4b860e7..49cd9cf 100644 --- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YdPayError.java +++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YdPayError.java @@ -21,8 +21,9 @@ import com.egzosn.pay.common.bean.result.PayError; /** * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/6 19:41 + * + * email egzosn@gmail.com + * date 2017/3/6 19:41 */ public class YdPayError implements PayError { diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YoudianTransactionType.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YoudianTransactionType.java index 9e7f4cf..a25008d 100644 --- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YoudianTransactionType.java +++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/bean/YoudianTransactionType.java @@ -5,8 +5,9 @@ import com.egzosn.pay.common.bean.TransactionType; /** * 友店交易类型 * @author egan - * @email egzosn@gmail.com - * @date 2017/01/12 22:58 + * + * email egzosn@gmail.com + * date 2017/01/12 22:58 */ public enum YoudianTransactionType implements TransactionType { @@ -17,7 +18,7 @@ public enum YoudianTransactionType implements TransactionType { private String method; - private YoudianTransactionType(String method) { + YoudianTransactionType(String method) { this.method = method; } @@ -28,7 +29,7 @@ public enum YoudianTransactionType implements TransactionType { /** * 获取接口名称 - * @return + * @return 接口名称 */ @Override public String getMethod() { diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayConfigStorage.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayConfigStorage.java index 9ce9d5a..1eaf01a 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayConfigStorage.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayConfigStorage.java @@ -5,8 +5,11 @@ import com.egzosn.pay.common.api.BasePayConfigStorage; /** * 支付客户端配置存储 * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + * + *
+ * email egzosn@gmail.com
+ * date 2016-5-18 14:09:01
+ * 
*/ public class WxPayConfigStorage extends BasePayConfigStorage { @@ -36,16 +39,17 @@ public class WxPayConfigStorage extends BasePayConfigStorage { } /** - * - * @return - * + * 合作商唯一标识 + * @see #getPid() 代替者 */ - @Deprecated - @Override public String getPartner() { return mchId; } + /** + * 合作商唯一标识 + * @see #getPartner() 代替者 + */ @Override public String getPid() { return mchId; 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 8f116b0..df059d9 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 @@ -29,8 +29,10 @@ import java.util.*; /** * 支付宝支付通知 * @author egan - * @email egzosn@gmail.com - * @date 2016-5-18 14:09:01 + *
+ * email egzosn@gmail.com
+ * date 2016-5-18 14:09:01
+ * 
*/ public class WxPayService extends BasePayService { protected final Log log = LogFactory.getLog(WxPayService.class); @@ -38,7 +40,6 @@ public class WxPayService extends BasePayService { - public final static String httpsVerifyUrl = "https://gw.tenpay.com/gateway"; public final static String uri = "https://api.mch.weixin.qq.com/"; // public final static String unifiedOrderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; // public final static String orderqueryUrl = "https://api.mch.weixin.qq.com/pay/orderquery"; @@ -54,19 +55,21 @@ public class WxPayService extends BasePayService { } /** - * 微信支付V2版本所需 - * 当前版本不需要 ? - * @return + * 根据交易类型获取url + * @param transactionType 交易类型 + * @return 请求url */ - public String getHttpsVerifyUrl() { - return httpsVerifyUrl + "/verifynotifyid.xml"; - } - private String getUrl(TransactionType transactionType){ return uri + transactionType.getMethod(); } + /** + * 回调校验 + * + * @param params 回调回来的参数集 + * @return 签名校验 true通过 + */ @Override public boolean verify(Map params) { if (!"SUCCESS".equals(params.get("return_code"))){ @@ -89,9 +92,9 @@ public class WxPayService extends BasePayService { /** - * 支付宝需要,微信是否也需要再次校验来源,进行订单查询 + * 微信是否也需要再次校验来源,进行订单查询 * @param id 商户单号 - * @return + * @return true通过 */ @Override public boolean verifySource(String id) { @@ -111,7 +114,7 @@ public class WxPayService extends BasePayService { /** * 获取公共参数 - * @return + * @return 公共参数 */ private Map getPublicParameters() { @@ -127,11 +130,11 @@ public class WxPayService extends BasePayService { /** - * 获取支付平台所需的订单信息 + * 返回创建的订单信息 * * @param order 支付订单 - * @return - * @see PayOrder + * @return 订单信息 + * @see PayOrder 支付订单信息 */ @Override public Map orderInfo(PayOrder order) { @@ -190,7 +193,7 @@ public class WxPayService extends BasePayService { /** * 生成并设置签名 * @param parameters 请求参数 - * @return + * @return 请求参数 */ private Map setSign(Map parameters){ parameters.put("sign_type", payConfigStorage.getSignType()); @@ -203,13 +206,20 @@ public class WxPayService extends BasePayService { * 签名 * @param content 需要签名的内容 不包含key * @param characterEncoding 字符编码 - * @return + * @return 签名结果 */ @Override public String createSign(String content, String characterEncoding) { return SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase()).createSign(content, "&key=" + payConfigStorage.getKeyPrivate(), characterEncoding).toUpperCase(); } + /** + * 将请求参数或者请求流转化为 Map + * + * @param parameterMap 请求参数 + * @param is 请求流 + * @return 获得回调的请求参数 + */ @Override public Map getParameter2Map(Map parameterMap, InputStream is) { TreeMap map = new TreeMap(); @@ -221,24 +231,38 @@ public class WxPayService extends BasePayService { return map; } - + /** + * 获取输出消息,用户返回给支付端 + * + * @param code 状态 + * @param message 消息 + * @return 返回输出消息 + */ @Override public PayOutMessage getPayOutMessage(String code, String message) { return PayOutMessage.XML().code(code.toUpperCase()).content(message).build(); } + /** - * 针对web端的即时付款 - * 暂未实现或无此功能 + * 获取输出消息,用户返回给支付端, 针对于web端 + * * @param orderInfo 发起支付的订单信息 - * @param method 请求方式 "post" "get", - * @return + * @param method 请求方式 "post" "get", + * @return 获取输出消息,用户返回给支付端, 针对于web端 + * @see MethodType 请求类型 */ @Override public String buildRequest(Map orderInfo, MethodType method) { throw new UnsupportedOperationException(); } + /** + * 获取输出二维码,用户返回给支付端, + * + * @param order 发起支付的订单信息 + * @return 返回图片信息,支付时需要的 + */ @Override public BufferedImage genQrPay(PayOrder order) { Map orderInfo = orderInfo(order); @@ -252,10 +276,11 @@ public class WxPayService extends BasePayService { } /** - * 交易查询接口 - * @param transactionId 支付平台订单号 + * 交易查询接口 + * + * @param transactionId 微信支付平台订单号 * @param outTradeNo 商户单号 - * @return + * @return 返回查询回来的结果集,支付方原值返回 */ @Override public Map query(String transactionId, String outTradeNo) { @@ -273,8 +298,8 @@ public class WxPayService extends BasePayService { * @param transactionId 支付平台订单号 * @param outTradeNo 商户单号 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 处理过后的类型对象,返回查询回来的结果集,支付方原值返回 */ @Override public T query(String transactionId, String outTradeNo, Callback callback) { @@ -282,7 +307,13 @@ public class WxPayService extends BasePayService { return secondaryInterface(transactionId, outTradeNo, WxTransactionType.QUERY, callback); } - + /** + * 交易关闭接口 + * + * @param transactionId 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方交易关闭后的结果 + */ @Override public Map close(String transactionId, String outTradeNo) { @@ -293,7 +324,15 @@ public class WxPayService extends BasePayService { } }); } - + /** + * 交易关闭接口 + * + * @param transactionId 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 处理过后的类型对象,返回支付方交易关闭后的结果 + */ @Override public T close(String transactionId, String outTradeNo, Callback callback) { return secondaryInterface(transactionId, outTradeNo, WxTransactionType.CLOSE, callback); @@ -305,7 +344,7 @@ public class WxPayService extends BasePayService { * @param outTradeNo 商户单号 * @param refundAmount 退款金额 * @param totalAmount 总金额 - * @return + * @return 返回支付方申请退款后的结果 */ @Override public Map refund(String transactionId, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) { @@ -326,8 +365,8 @@ public class WxPayService extends BasePayService { * @param refundAmount 退款金额 * @param totalAmount 总金额 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 处理过后的类型对象, 返回支付方申请退款后的结果 */ @Override public T refund(String transactionId, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback callback) { @@ -350,6 +389,13 @@ public class WxPayService extends BasePayService { return callback.perform(requestTemplate.postForObject(getUrl(WxTransactionType.REFUND), XML.getMap2Xml(parameters), JSONObject.class)); } + /** + * 查询退款 + * + * @param transactionId 支付平台订单号 + * @param outTradeNo 商户单号 + * @return 返回支付方查询退款后的结果 + */ @Override public Map refundquery(String transactionId, String outTradeNo) { return refundquery(transactionId, outTradeNo, new Callback>() { @@ -360,6 +406,15 @@ public class WxPayService extends BasePayService { }); } + /** + * 查询退款 + * + * @param transactionId 支付平台订单号 + * @param outTradeNo 商户单号 + * @param callback 处理器 + * @param 返回类型 + * @return 处理过后的类型对象,返回支付方查询退款后的结果 + */ @Override public T refundquery(String transactionId, String outTradeNo, Callback callback) { return secondaryInterface(transactionId, outTradeNo, WxTransactionType.REFUNDQUERY, callback); @@ -369,7 +424,7 @@ public class WxPayService extends BasePayService { * 目前只支持日账单 * @param billDate 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单; * @param billType 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。 - * @return + * @return 返回支付方下载对账单的结果 */ @Override public Map downloadbill(Date billDate, String billType) { @@ -386,8 +441,8 @@ public class WxPayService extends BasePayService { * @param billDate 账单时间:具体请查看对应支付平台 * @param billType 账单类型,具体请查看对应支付平台 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 处理过后的类型对象,返回支付方下载对账单的结果 */ @Override public T downloadbill(Date billDate, String billType, Callback callback) { @@ -413,8 +468,8 @@ public class WxPayService extends BasePayService { * @param outTradeNoBillType 商户单号或者 账单类型 * @param transactionType 交易类型 * @param callback 处理器 - * @param - * @return + * @param 返回类型 + * @return 返回支付方对应接口的结果 */ @Override public T secondaryInterface(Object transactionIdOrBillDate, String outTradeNoBillType, TransactionType transactionType, Callback callback) { diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxPayError.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxPayError.java index 1d24de2..b3655d4 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxPayError.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/bean/WxPayError.java @@ -20,9 +20,13 @@ package com.egzosn.pay.wx.bean; import com.egzosn.pay.common.bean.result.PayError; /** + * 微信支付异常 * @author: egan - * @email egzosn@gmail.com - * @date 2017/3/6 17:31 + *
+ *
+ * email egzosn@gmail.com
+ * date 2017/3/6 17:31
+ * 
*/ public class WxPayError implements PayError { 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 e5166c9..21ce55d 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 @@ -5,8 +5,9 @@ import com.egzosn.pay.common.bean.TransactionType; /** * 微信交易类型 * @author egan - * @email egzosn@gmail.com - * @date 2016/10/19 22:58 + * + * email egzosn@gmail.com + * date 2016/10/19 22:58 */ public enum WxTransactionType implements TransactionType { //公众号支付 diff --git a/pom.xml b/pom.xml index 2267aa9..0cc5830 100644 --- a/pom.xml +++ b/pom.xml @@ -2,6 +2,7 @@ + 4.0.0 com.egzosn pay-java-parent @@ -9,7 +10,7 @@ 2.0.SNAPSHOT Pay Java - Parent - 支付整合父级 + Pay Java Parent The Apache License, Version 2.0 @@ -103,31 +104,16 @@ - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.17 - - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + org.sonatype.plugins nexus-staging-maven-plugin @@ -152,12 +138,44 @@ org.apache.maven.plugins - maven-compiler-plugin - 3.6.0 - - UTF-8 - + maven-javadoc-plugin + 2.10.3 + + + attach-javadocs + + jar + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + \ No newline at end of file