第三方接口返回流水状态
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
index 0906293..e776671 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/AgentResponse.java
@@ -6,6 +6,7 @@
private String agentMsg;
private String agentRefno;
+ private DtlStatus dtlStatus;
public AgentCode getCode() {
return code;
@@ -38,4 +39,12 @@
public void setAgentRefno(String agentRefno) {
this.agentRefno = agentRefno;
}
+
+ public DtlStatus getDtlStatus() {
+ return dtlStatus;
+ }
+
+ public void setDtlStatus(DtlStatus dtlStatus) {
+ this.dtlStatus = dtlStatus;
+ }
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java
new file mode 100644
index 0000000..d80d503
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/DtlStatus.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.agent;
+
+public enum DtlStatus {
+ SUCCESS, //成功
+ FAIL, //失败
+ REFUND, //已退款
+ PARTIAL_REFUND //部分退款
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
index 7aa5e95..cafbb40 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -63,7 +63,7 @@
errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0302", "余额不足")));
errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("0303", "MD5校验失败")));
errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0304", "该卡号已经解约,不允许重复解约")));
- errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0401", "原始流水不存在")));
+ errcode.add(Pair.of(AgentCode.REFNO_NOT_EXISTS, new YnrccRespCode("0401", "原始流水不存在")));
errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0402", "原始流水未成功")));
errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0403", "原始流水已退款")));
errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0404", "商户账户余额不足")));
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index 93ec750..7497567 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -3,6 +3,7 @@
import com.supwisdom.dlpay.agent.AgentCode
import com.supwisdom.dlpay.agent.AgentPayService
import com.supwisdom.dlpay.agent.AgentResponse
+import com.supwisdom.dlpay.agent.DtlStatus
import com.supwisdom.dlpay.agent.citizencard.DlpayResp
import com.supwisdom.dlpay.agent.citizencard.YnrccRespCode
import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
@@ -81,6 +82,12 @@
it.agentCode = code.second.code
it.agentMsg = code.first.message() + "-" + code.second.msg
it.agentRefno = resp.bankjourno
+ it.dtlStatus = when (resp.status) {
+ YnrccUtil.DTL_STATUS_SUCCESS -> DtlStatus.SUCCESS
+ YnrccUtil.DTL_STATUS_REFUND -> DtlStatus.REFUND
+ YnrccUtil.DTL_STATUS_PART_REFUND -> DtlStatus.PARTIAL_REFUND
+ else -> DtlStatus.FAIL
+ }
}
}
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
index 9448f3d..133427f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
@@ -1,6 +1,8 @@
package com.supwisdom.dlpay.api
import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.DtlStatus
+
import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
import com.supwisdom.dlpay.api.domain.TTransactionMain
import com.supwisdom.dlpay.api.repositories.ShopaccService
@@ -78,34 +80,39 @@
}
val service = ApplicationUtil.findAgentPayService(applicationContext,
- transaction.sourceType)
+ transaction.sourceType+ "Agent")
+
logger.info("refno=[${transaction.refno}]开始第" + (qcnt + 1) + "次查询支付结果:")
val resp = service.query(transaction)
when (resp.code) {
AgentCode.SUCCESS -> {
//查询成功
-// when {
-// YnrccUtil.DTL_STATUS_SUCCESS == resp.status ->
-// transactionService.success(refno, resp.bankjourno, false) //流水成功
-// YnrccUtil.DTL_STATUS_REFUND == resp.status -> {
-// //流水已退款 TODO:流水成功后才退款,无查询原成功流水逻辑
-// return
-// }
-// YnrccUtil.DTL_STATUS_PART_REFUND == resp.status -> {
-// //流水已部分退款 TODO:暂无逻辑
-// return
-// }
-// else -> {
-// //流水失败
-// transactionService.fail(refno, "查询流水状态为交易失败")
-// }
-// }
- transactionService.success(transaction.refno, resp.agentRefno, false)
+ when (resp.dtlStatus) {
+ DtlStatus.SUCCESS ->
+ transactionService.success(transaction.refno, resp.agentRefno, false) //流水成功
+ DtlStatus.REFUND -> {
+ //流水已退款 TODO:流水成功后才退款,无查询原成功流水逻辑
+ logger.error("refno=[${transaction.refno}]查询结果为:已退款!!!")
+ return
+ }
+ DtlStatus.PARTIAL_REFUND -> {
+ //流水已部分退款 TODO:暂无逻辑
+ logger.error("refno=[${transaction.refno}]查询结果为:已部分退款!!!")
+ return
+ }
+ else -> {
+ //流水失败
+ transactionService.fail(transaction.refno, "查询流水状态为交易失败")
+ }
+ }
}
- AgentCode.REFNO_NOT_EXISTS -> transactionService.fail(transaction.refno, "银行流水不存在")
- AgentCode.COMMON_ERROR -> queryResult(transaction, qcnt + 1)
+ AgentCode.REFNO_NOT_EXISTS ->
+ transactionService.fail(transaction.refno, "银行流水不存在") //银行返回流水不存在
+ AgentCode.REQUIRE_QUERY ->
+ queryResult(transaction, qcnt + 1) //查询次数加1
else -> {
- transactionService.fail(transaction.refno, resp.agentMsg)
+ //其他明确错误,查询失败
+ logger.error("查询refno=[${transaction.refno}]流水结果返回失败:code=[${resp.agentCode}],message=[${resp.agentMsg}]")
}
}
} catch (ex: Exception) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 1e7cca9..1f32d89 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -255,6 +255,9 @@
} else {
consumePayService.checkCanReverse(mainDtl.sourceType)
}
+ } else {
+ throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+ "该笔交易未定义sourcetype, 不支持撤销")
}
val builder = TransactionBuilder().apply {
@@ -265,7 +268,7 @@
val cancelTrans = builder.cancelInit(mainDtl.refno, transactionService)
transactionService.wip(cancelTrans.refno)
val service = createAgentService(mainDtl.sourceType)
- val resp = service.pay(cancelTrans)
+ val resp = service.cancel(cancelTrans)
when (resp.code) {
AgentCode.SUCCESS -> {
transactionService.success(cancelTrans.refno, resp.agentRefno, false)
@@ -284,12 +287,12 @@
"${resp.agentCode}-${resp.agentMsg}").let {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(PayReverseResponse(cancelTrans.refno),
- TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+ TradeErrorCode.BUSINESS_DEAL_ERROR, "交易撤销失败!${resp.agentMsg}"))
}
}
} ?: return ResponseEntity.ok(ResponseBodyBuilder.create().fail(PayReverseResponse(),
- TradeErrorCode.BUSINESS_DEAL_ERROR, "流水不存在"))
+ TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
}
/**
@@ -326,20 +329,20 @@
transactionService.success(refundTrans.refno, resp.agentRefno, false)
return ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(PayReverseResponse(refundTrans.refno), "交易撤销成功"))
+ .success(PayReverseResponse(refundTrans.refno), "交易退款成功"))
}
AgentCode.REQUIRE_QUERY -> {
//待查询
agentQueryResultTask.queryResult(refundTrans, 0)
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(PayReverseResponse(refundTrans.refno),
- TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+ TradeErrorCode.WAIT_QUERY_RESULT, "请查询退款结果"))
}
else -> transactionService.fail(refundTrans.refno,
"${resp.agentCode}-${resp.agentMsg}").let {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(PayReverseResponse(refundTrans.refno),
- TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+ TradeErrorCode.BUSINESS_DEAL_ERROR, "退款失败!${resp.agentMsg}"))
}
}