支付对接
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package io.v.nutz.pay.notify;
|
||||
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.pay.annotations.Api;
|
||||
import io.v.nutz.pay.annotations.ApiOperation;
|
||||
import io.v.nutz.pay.cache.ChinaBankOrderPayNotifyCacheService;
|
||||
import io.v.nutz.pay.cache.ChinaBankOrderWaitPayCacheService;
|
||||
import io.v.nutz.pay.notify.enums.PayNotifyOrderStatusEnum;
|
||||
import io.v.nutz.pay.notify.enums.PayNotifyReturnActFlagEnum;
|
||||
import io.v.nutz.pay.record.service.IMemberPayRecordService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* 中国银行支付通知 controller
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Api("中国银行支付通知")
|
||||
@At("/notify/china/bank")
|
||||
public class ChinaBankPayResultNotify {
|
||||
|
||||
@Inject
|
||||
private IMemberPayRecordService memberPayRecordService;
|
||||
|
||||
@Inject
|
||||
private ChinaBankOrderWaitPayCacheService chinaBankOrderWaitPayCacheService;
|
||||
|
||||
@Inject
|
||||
private ChinaBankOrderPayNotifyCacheService chinaBankOrderPayNotifyCacheService;
|
||||
|
||||
|
||||
@At("/pay")
|
||||
@Ok("json")
|
||||
@ApiOperation("中国银行支付通知")
|
||||
public Result payResultNotify(HttpServletRequest req, HttpServletResponse resp) {
|
||||
// 商户订单号
|
||||
String orderNo = req.getParameter("orderNo");
|
||||
// 银行订单流水号
|
||||
String orderSeq = req.getParameter("orderSeq");
|
||||
// 银行订单状态 0:未处理 1:支付 2:撤销 3:退货 4:未明 5:失败 6:下单
|
||||
String orderStatus = req.getParameter("orderStatus");
|
||||
// 银行交易流水号
|
||||
String bankTranSeq = req.getParameter("bankTranSeq");
|
||||
// 中行签名数据
|
||||
String signData = req.getParameter("signData");
|
||||
// 支付金额
|
||||
String payAmount = req.getParameter("payAmount");
|
||||
// 操作类型 1:支付结果通知 2:电话订单结果通知 3:退款结果通知 4:订单查询结果
|
||||
String returnActFlag = req.getParameter("returnActFlag");
|
||||
log.info("收到中行银行支付结果通知: orderNo->{}, orderSeq->{}, orderStatus->{}, bankTranSeq->{}, payAmount->{}, signData->{}", orderNo, orderSeq, orderStatus, bankTranSeq, payAmount, signData);
|
||||
log.info("收到中行银行支付结果通知: returnActFlag->{}", returnActFlag);
|
||||
|
||||
try{
|
||||
// 支付结果通知
|
||||
if(PayNotifyReturnActFlagEnum.PAY_RESULT_NOTIFY.getCode().equals(returnActFlag)) {
|
||||
// 设置30秒内同一个商户订单 不可重复接收到通知
|
||||
if(chinaBankOrderPayNotifyCacheService.exists(orderNo)) {
|
||||
log.error("商户订单号重复支付结果通知:orderNo->{}", orderNo);
|
||||
return Result.error("商户订单号重复通知");
|
||||
}
|
||||
chinaBankOrderPayNotifyCacheService.setex(orderNo, 30, orderNo);
|
||||
|
||||
// 支付成功
|
||||
if (PayNotifyOrderStatusEnum.PAY.getCode().equals(orderStatus)) {
|
||||
memberPayRecordService.paySuccess(orderNo, Double.valueOf(payAmount));
|
||||
|
||||
// 支付失败
|
||||
} else if (PayNotifyOrderStatusEnum.FAIL.getCode().equals(orderStatus)) {
|
||||
memberPayRecordService.payFail(orderNo, "用户支付失败");
|
||||
}
|
||||
chinaBankOrderWaitPayCacheService.delItem(orderNo);
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return Result.error();
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package io.v.nutz.pay.notify.enums;
|
||||
|
||||
import io.v.nutz.pay.enums.PayChannelEnum;
|
||||
|
||||
public enum PayNotifyOrderStatusEnum {
|
||||
// 订单状态 0:未处理 1:支付 2:撤销 3:退货 4:未明 5:失败 6:下单
|
||||
NOT_HANDLE("0", "未处理"),
|
||||
PAY("1", "支付"),
|
||||
REVOKE("2", "撤销"),
|
||||
RETURN("3", "退货"),
|
||||
UNKNOWN("4", "未明"),
|
||||
FAIL("5", "失败"),
|
||||
ORDER("6", "下单");
|
||||
|
||||
private String code;
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
private String name;
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static PayNotifyOrderStatusEnum getByCode(String code) {
|
||||
if(code == null) {
|
||||
return null;
|
||||
} else {
|
||||
PayNotifyOrderStatusEnum[] values = PayNotifyOrderStatusEnum.values();
|
||||
for(PayNotifyOrderStatusEnum value : values) {
|
||||
if(value.getCode().equals(code)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
PayNotifyOrderStatusEnum(String code, String name) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package io.v.nutz.pay.notify.enums;
|
||||
|
||||
public enum PayNotifyReturnActFlagEnum {
|
||||
|
||||
// 操作类型 1:支付结果通知 2:电话订单结果通知 3:退款结果通知 4:订单查询结果
|
||||
PAY_RESULT_NOTIFY("1", "支付结果通知"),
|
||||
PAY_PHONE_NOTIFY("2", "电话订单结果通知"),
|
||||
PAY_REFUND_NOTIFY("3", "退款结果通知"),
|
||||
ORDER_QUERY_NOTIFY("4", "订单查询结果");
|
||||
|
||||
private String code;
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
private String name;
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static PayNotifyReturnActFlagEnum getByCode(String code) {
|
||||
if(code == null) {
|
||||
return null;
|
||||
} else {
|
||||
PayNotifyReturnActFlagEnum[] values = PayNotifyReturnActFlagEnum.values();
|
||||
for(PayNotifyReturnActFlagEnum value : values) {
|
||||
if(value.getCode().equals(code)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
PayNotifyReturnActFlagEnum(String code, String name) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user