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 f31625b..db8e077 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 @@ -6,10 +6,7 @@ import com.egzosn.pay.ali.bean.AliTransactionType; import com.egzosn.pay.common.api.BasePayService; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; -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.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.bean.result.PayException; import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.http.HttpConfigStorage; @@ -297,6 +294,17 @@ public class AliPayService extends BasePayService { return PayOutMessage.TEXT().content(code.toLowerCase()).build(); } + /** + * 获取成功输出消息,用户返回给支付端 + * 主要用于拦截器中返回 + * @param payMessage 支付回调消息 + * @return 返回输出消息 + */ + @Override + public PayOutMessage successPayOutMessage(PayMessage payMessage) { + return PayOutMessage.TEXT().content("success").build(); + } + /** * * @param orderInfo 发起支付的订单信息 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 d97a963..7c45d8b 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 @@ -288,7 +288,8 @@ public class PayMessageRouterRule { // 如果拦截器不通过 for (PayMessageInterceptor interceptor : this.interceptors) { if (!interceptor.intercept(payMessage, context, payService)) { - return null; + //这里直接返回成功,解决外层判断问题 + return payService.successPayOutMessage(payMessage); } } 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 b237121..afd21d2 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 @@ -1,9 +1,6 @@ package com.egzosn.pay.common.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.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.http.HttpConfigStorage; import com.egzosn.pay.common.http.HttpRequestTemplate; @@ -126,6 +123,14 @@ public interface PayService { */ PayOutMessage getPayOutMessage(String code, String message); + /** + * 获取成功输出消息,用户返回给支付端 + * 主要用于拦截器中返回 + * @param payMessage 支付回调消息 + * @return 返回输出消息 + */ + PayOutMessage successPayOutMessage(PayMessage payMessage); + /** * 获取输出消息,用户返回给支付端, 针对于web端 * diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java index 738e5b9..49f45fd 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java @@ -16,6 +16,7 @@ import com.egzosn.pay.common.api.PayConfigStorage; import com.egzosn.pay.common.api.PayMessageHandler; import com.egzosn.pay.common.api.PayService; import com.egzosn.pay.common.bean.MsgType; +import com.egzosn.pay.demo.service.interceptor.YoudianPayMessageInterceptor; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import javax.annotation.Resource; @@ -85,8 +86,7 @@ public class PayResponse { .async(false) .msgType(MsgType.text.name()) //消息类型 .payType(PayType.aliPay.name()) //支付账户事件类型 -// .transactionType(AliTransactionType.UNAWARE.name())//交易类型,有关回调的可在这处理 - .interceptor(new AliPayMessageInterceptor(payId)) //拦截器 + .interceptor(new AliPayMessageInterceptor()) //拦截器 .handler(autowire(new AliPayMessageHandler(payId))) //处理器 .end() .rule() @@ -99,6 +99,7 @@ public class PayResponse { .async(false) .msgType(MsgType.json.name()) .payType(PayType.youdianPay.name()) + .interceptor(new YoudianPayMessageInterceptor()) //拦截器 .handler(autowire(new YouDianPayMessageHandler(payId))) .end() .rule() diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/AliPayMessageHandler.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/AliPayMessageHandler.java index a45089a..80ec804 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/AliPayMessageHandler.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/AliPayMessageHandler.java @@ -5,6 +5,7 @@ import com.egzosn.pay.common.bean.PayMessage; import com.egzosn.pay.common.bean.PayOutMessage; import com.egzosn.pay.common.exception.PayErrorException; +import java.math.BigDecimal; import java.util.Map; /** @@ -22,26 +23,25 @@ public class AliPayMessageHandler extends BasePayMessageHandler { @Override public PayOutMessage handle(PayMessage payMessage, Map context, PayService payService) throws PayErrorException { + + Map message = payMessage.getPayMessage(); //交易状态 - String trade_status = (String) payMessage.getPayMessage().get("trade_status"); + String trade_status = (String) message.get("trade_status"); - if ("TRADE_SUCCESS".equals(trade_status)){ - //判断该笔订单是否在商户网站中已经做过处理 - //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 - //如果有做过处理,不执行商户的业务程序 - //注意: - //付款完成后,支付宝系统发送该交易状态通知 + //上下文对象中获取账单 +// AmtApply amtApply = (AmtApply)context.get("amtApply"); + //日志存储 +// amtPaylogService.createAmtPaylogByCallBack(amtApply, message.toString()); + //交易完成 + if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) { - } else if("TRADE_FINISHED".equals(trade_status)) { - //判断该笔订单是否在商户网站中已经做过处理 - //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 - //如果有做过处理,不执行商户的业务程序 - //注意: - //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 - } else if ("WAIT_BUYER_PAY".equals(trade_status) || "TRADE_CLOSED".equals(trade_status)) { + BigDecimal payAmount = new BigDecimal((String) message.get("total_fee")); - } + return payService.getPayOutMessage("success", "成功"); - return payService.getPayOutMessage("success", "成功"); + }/* else if ("WAIT_BUYER_PAY".equals(trade_status) || "TRADE_CLOSED".equals(trade_status)) { + + }*/ + return payService.getPayOutMessage("fail", "失败"); } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/FuiouPayMessageHandler.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/FuiouPayMessageHandler.java index e454788..a027c07 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/FuiouPayMessageHandler.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/FuiouPayMessageHandler.java @@ -26,9 +26,9 @@ public class FuiouPayMessageHandler extends BasePayMessageHandler { if ("0000".equals(payMessage.getPayMessage().get("order_pay_code"))){ /////这里进行成功的处理 - return PayOutMessage.JSON().content("order_pay_error","成功").build(); + return PayOutMessage.JSON().content("success","成功").build(); } - return PayOutMessage.JSON().content("order_pay_error",payMessage.getPayMessage().get("order_pay_error")).build(); + return PayOutMessage.JSON().content("fail", "失败").build(); } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/YouDianPayMessageHandler.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/YouDianPayMessageHandler.java index da83ade..3270f0d 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/YouDianPayMessageHandler.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/handler/YouDianPayMessageHandler.java @@ -1,5 +1,6 @@ package com.egzosn.pay.demo.service.handler; +import com.alibaba.fastjson.JSON; import com.egzosn.pay.common.api.PayService; import com.egzosn.pay.common.bean.PayMessage; import com.egzosn.pay.common.bean.PayOutMessage; @@ -23,12 +24,17 @@ public class YouDianPayMessageHandler extends BasePayMessageHandler { @Override public PayOutMessage handle(PayMessage payMessage, Map context, PayService payService) throws PayErrorException { //交易状态 - if ("0000".equals(payMessage.getPayMessage().get("order_pay_code"))){ - /////这里进行成功的处理 + Map message = payMessage.getPayMessage(); + //上下文对象中获取账单 +// AmtApply amtApply = (AmtApply)context.get("amtApply"); + //日志存储 +// amtPaylogService.createAmtPaylogByCallBack(amtApply, message.toString()); + + if ("SUCCESS".equals(message.get("return_code"))){ + /////这里进行成功的处理,因没有返回金额 - return PayOutMessage.JSON().content("order_pay_error","成功").build(); } - return PayOutMessage.JSON().content("order_pay_error",payMessage.getPayMessage().get("order_pay_error")).build(); + return PayOutMessage.TEXT().content(JSON.toJSONString(message)).build(); } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/AliPayMessageInterceptor.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/AliPayMessageInterceptor.java index 7f27f51..3308ad6 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/AliPayMessageInterceptor.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/AliPayMessageInterceptor.java @@ -17,13 +17,6 @@ import java.util.Map; */ public class AliPayMessageInterceptor implements PayMessageInterceptor { - //支付账户id - private Integer payId; - public AliPayMessageInterceptor(Integer payId) { - - this.payId = payId; - } - /** * 拦截支付消息 * @@ -37,6 +30,26 @@ public class AliPayMessageInterceptor implements PayMessageInterceptor { public boolean intercept(PayMessage payMessage, Map context, PayService payService) throws PayErrorException { //这里进行拦截器处理,自行实现 + String outTradeNo = payMessage.getOutTradeNo(); + // 设置外部单号 +// amtApplyService.fillApplyoutId(outTradeNo, (String) payMessage.getPayMessage().get("trade_no")); + + + //获取账单 +// AmtApply amtApply = amtApplyService.getAmtApplyByApplyId(outTradeNo); +// if (null == amtApply){ +// Log4jUtil.info("app 阿里pay:" + outTradeNo); +// return false; +// } +// +// 重复回调不进行处理 +// if(amtApply.getApplyState().shortValue()== ApplyStateEnum.success.getCode()){ +// return false; +// } + //将账单存储至上下文对象中 +// context.put("amtApply", amtApply); + + return true; } } diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/YoudianPayMessageInterceptor.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/YoudianPayMessageInterceptor.java new file mode 100644 index 0000000..0387ecf --- /dev/null +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/interceptor/YoudianPayMessageInterceptor.java @@ -0,0 +1,61 @@ + +package com.egzosn.pay.demo.service.interceptor; + +import com.egzosn.pay.common.api.PayMessageHandler; +import com.egzosn.pay.common.api.PayMessageInterceptor; +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.PayMessage; +import com.egzosn.pay.common.exception.PayErrorException; + +import java.util.Map; + +/** + * 回调信息拦截器 + * @author: egan + * email egzosn@gmail.com + * date 2017/1/18 19:28 + */ +public class YoudianPayMessageInterceptor implements PayMessageInterceptor { + +// @Autowired +// private AmtApplyService amtApplyService; + + /** + * 拦截支付消息 + * + * @param payMessage 支付回调消息 + * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 + * @param payService + * @return true代表OK,false代表不OK并直接中断对应的支付处理器 + * @see PayMessageHandler 支付处理器 + */ + @Override + public boolean intercept(PayMessage payMessage, Map context, PayService payService) throws PayErrorException { + + //这里进行拦截器处理,自行实现 + + Map message = payMessage.getPayMessage(); + + // 设置外部单号 + String outId = payMessage.getOutTradeNo(); + + //根据outId获取账单 +// AmtApply amtApply = amtApplyService.getAmtApplyByApplyOutid(outId); +// if (null == amtApply){ +// Log4jUtil.info("友店outId:" + outId); +// +// return false; +// } + + //重复回调不进行处理 +// if(amtApply.getApplyState().shortValue()== ApplyStateEnum.success.getCode()){ +// return false; +// } + //将账单存储至上下文对象中 +// context.put("amtApply", amtApply); + + +// amtPaylogService.createAmtPaylogByCheckFail(amtApply, payMessage.getPayMessage()); + return true; + } +} diff --git a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java index a7425ae..93550df 100644 --- a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java +++ b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java @@ -1,12 +1,10 @@ package com.egzosn.pay.fuiou.api; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.egzosn.pay.common.api.BasePayService; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; -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.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.http.HttpConfigStorage; import com.egzosn.pay.common.util.sign.SignUtils; @@ -210,6 +208,16 @@ public class FuiouPayService extends BasePayService { public PayOutMessage getPayOutMessage(String code, String message) { return PayOutMessage.TEXT().content(code.toLowerCase()).build(); } + /** + * 获取成功输出消息,用户返回给支付端 + * 主要用于拦截器中返回 + * @param payMessage 支付回调消息 + * @return 返回输出消息 + */ + @Override + public PayOutMessage successPayOutMessage(PayMessage payMessage) { + return PayOutMessage.JSON().content("success","成功").build(); + } /** * 发送支付请求(form表单) 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 6565382..41b08e9 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 @@ -1,13 +1,11 @@ package com.egzosn.pay.wx.youdian.api; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.egzosn.pay.common.api.BasePayService; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; -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.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.bean.outbuilder.JsonBuilder; import com.egzosn.pay.common.bean.result.PayError; import com.egzosn.pay.common.exception.PayErrorException; @@ -334,6 +332,18 @@ public class WxYouDianPayService extends BasePayService { return builder.content("sign", SignUtils.valueOf(payConfigStorage.getSignType()).sign(builder.getJson(), "&key=" + payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset())).build(); } + + /** + * 获取成功输出消息,用户返回给支付端 + * 主要用于拦截器中返回 + * @param payMessage 支付回调消息 + * @return 返回输出消息 + */ + @Override + public PayOutMessage successPayOutMessage(PayMessage payMessage) { + return PayOutMessage.TEXT().content(JSON.toJSONString(payMessage.getPayMessage())).build(); + } + /** * 针对web端的即时付款 * 暂未实现或无此功能 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 200a734..82f77b0 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 @@ -1,13 +1,11 @@ package com.egzosn.pay.wx.api; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.egzosn.pay.common.api.BasePayService; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; -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.bean.TransactionType; +import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.bean.result.PayException; import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.http.HttpConfigStorage; @@ -267,6 +265,18 @@ public class WxPayService extends BasePayService { } + /** + * 获取成功输出消息,用户返回给支付端 + * 主要用于拦截器中返回 + * @param payMessage 支付回调消息 + * @return 返回输出消息 + */ + @Override + public PayOutMessage successPayOutMessage(PayMessage payMessage) { + return PayOutMessage.XML().code("Success").content("成功").build(); + } + + /** * 获取输出消息,用户返回给支付端, 针对于web端 *