## Opt - 支付工具回写&页面返回地址

This commit is contained in:
sangelxiu1 2025-07-08 10:29:07 +08:00
parent d1b806ccc5
commit 91c8c8a251
8 changed files with 143 additions and 32 deletions

View File

@ -33,6 +33,15 @@ public enum EPayType {
*/
BANK_ONLINE(4, "网上银行", 0, EnumsPrefixConstants.PAY_TYPE + "4"),
// , 5=(京东)小金库, 6=(京东)白条, 7=(京东)超级白条, 8=(京东)钱包余额, 9=(京东)云闪付
MINI_TREASURY(5, "小金库", 0, EnumsPrefixConstants.PAY_TYPE + "5"),
CREDIT_LINE(6, "白条", 0, EnumsPrefixConstants.PAY_TYPE + "6"),
SUPER_CREDIT_LINE(7, "超级白条", 0, EnumsPrefixConstants.PAY_TYPE + "7"),
WALLET_BALANCE(8, "钱包余额", 0, EnumsPrefixConstants.PAY_TYPE + "8"),
CLOUD_PAY(9, "云闪付", 0, EnumsPrefixConstants.PAY_TYPE + "9"),
;
/**

View File

@ -2,6 +2,7 @@ package com.hzs.third.pay.controller.notify;
import cn.hutool.json.JSONUtil;
import com.hzs.common.core.enums.EPayChannel;
import com.hzs.common.core.enums.EPayType;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.third.pay.config.JdPayConfig;
import com.hzs.third.pay.constants.JdPayConstants;
@ -134,9 +135,9 @@ public class JdPayNotifyController extends JdBaseController {
// 订单金额
int tradeAmount = Integer.parseInt(successNotify.getTradeAmount());
BigDecimal payMoney = new BigDecimal(tradeAmount).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
Integer payType = convertPayType(successNotify.getPayTool());
// 支付后续业务处理
if (iPayService.notifyHandle(type, orderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber)) {
if (iPayService.notifyHandle(type, orderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber, payType)) {
return SUCCESS;
}
} else {
@ -150,6 +151,37 @@ public class JdPayNotifyController extends JdBaseController {
}
return ERROR;
}
private Integer convertPayType(String payName){
Integer result = EPayType.WECHAT.getValue();
switch (payName){
case "XJK":
result = EPayType.MINI_TREASURY.getValue();
break;
case "JIOU":
result = EPayType.CREDIT_LINE.getValue();
break;
case "SJIOU":
result = EPayType.SUPER_CREDIT_LINE.getValue();
break;
case "ACCT":
result = EPayType.WALLET_BALANCE.getValue();
break;
case "EXPR":
result = EPayType.BANK_CARD.getValue();
break;
case "WX":
result = EPayType.WECHAT.getValue();
break;
case "ALIPAY":
result = EPayType.ALIPAY.getValue();
break;
case "YSF":
result = EPayType.CLOUD_PAY.getValue();
break;
}
return result;
}
/**

View File

@ -69,6 +69,11 @@ public class JdPayAggregateCreateOrderRequest implements Serializable {
* 同步通知页面url
*/
private String pageBackUrl;
/**
* 点击完成按钮后跳转页面
*/
private String callbackUrl;
/**
* 风控信息map-- json串
*/

View File

@ -27,6 +27,10 @@ public interface IPayService {
boolean notifyHandle(String businessType, String businessCode, String originalOrder,
String payNumber, Date payTime, BigDecimal payMoney,
EPayChannel ePayChannel, String channelNumber);
boolean notifyHandle(String businessType, String businessCode, String originalOrder,
String payNumber, Date payTime, BigDecimal payMoney,
EPayChannel ePayChannel, String channelNumber, Integer payType);
/**
* 业务处理重试

View File

@ -245,6 +245,7 @@ public class JdPayServiceImpl implements IJdPayService {
.userId(userId)
// 同步通知URL收银台必传页面回调地址
.pageBackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam())
.callbackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam())
// 支付回调地址
.notifyUrl(jdPayBankProperties.getNotifyUrl())
// 交易类型

View File

@ -118,6 +118,65 @@ public class PayServiceImpl implements IPayService {
return false;
}
@Override
public boolean notifyHandle(String businessType, String businessCode, String originalOrder, String payNumber, Date payTime, BigDecimal payMoney, EPayChannel ePayChannel, String channelNumber, Integer payType) {
Long pkId = null;
String redisKey = CacheConstants.ONLINE_PAY_KEY + businessCode;
try {
// 校验支付信息状态业务与支付金额是否一致等
TOnlinePayment onlinePayment = itOnlinePaymentService.queryByBusiness(
ObjectUtil.isNotEmpty(businessType) ? Integer.valueOf(businessType) : null
, businessCode, null);
if (null == onlinePayment || EPayStatus.PAID.getValue() == onlinePayment.getPayStatus()) {
log.error("支付信息不存在或已支付");
return false;
}
pkId = onlinePayment.getPkId();
if (!PayUtil.checkAmount(onlinePayment.getBusinessMoney(), payMoney)) {
// 业务金额 大于 实际支付金额
log.error("业务金额大于实际支付金额,支付编号:{}, 支付金额:{}", onlinePayment.getPaymentCode(), payMoney);
}
onlinePayment.setPayStatus(EPayStatus.PAID.getValue());
onlinePayment.setPayNumber(payNumber);
onlinePayment.setPayTime(payTime);
onlinePayment.setPayMoney(payMoney);
onlinePayment.setOriginalOrder(originalOrder);
onlinePayment.setChannelNumber(channelNumber);
onlinePayment.setPkModified(MagicNumberConstants.PK_ADMIN);
onlinePayment.setModifiedTime(new Date());
onlinePayment.setPayType(payType);
if (null != ePayChannel) {
onlinePayment.setPayChannel(ePayChannel.getValue());
}
// 更新支付相关信息
if (itOnlinePaymentService.updateById(onlinePayment)) {
// 进行支付业务处理
this.handleBusiness(onlinePayment, true);
// 更新业务处理信息
itOnlinePaymentService.updateById(onlinePayment);
return true;
}
} catch (Exception e) {
log.error("在线支付信息回调处理异常", e);
if (null != pkId) {
// 更新业务处理信息
itOnlinePaymentService.update(Wrappers.<TOnlinePayment>lambdaUpdate()
.eq(TOnlinePayment::getPkId, pkId)
.set(TOnlinePayment::getCallbackStatus, ECallbackStatus.FAIL.getValue())
.set(TOnlinePayment::getCallbackInfo, e.getMessage())
);
}
} finally {
redisService.unlock(redisKey);
}
return false;
}
@Override
public boolean retryHandle(TOnlinePayment tOnlinePayment, boolean mqPush) {
// 支付业务处理

View File

@ -1,4 +1,4 @@
CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" (
CREATE TABLE "T_ONLINE_PAYMENT_SEP_ACC" (
"PK_ID" NUMBER(20,0),
"PK_PAYMENT" NUMBER(20,0),
"VERSION" VARCHAR2(255),
@ -15,33 +15,33 @@ CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" (
)
;
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_PAYMENT" IS '在线支付信息ID';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_PAYMENT" IS '在线支付信息ID';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."VERSION" IS '版本号';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."VERSION" IS '版本号';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT" IS '支付请求信息';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT" IS '支付请求信息';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT_SEP_ACC" IS '分账请求信息';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."REQ_CONTENT_SEP_ACC" IS '分账请求信息';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."RESP_CONTENT" IS '支付响应信息';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."RESP_CONTENT" IS '支付响应信息';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."CREATION_TIME" IS '创建时间';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."CREATION_TIME" IS '创建时间';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."MODIFIED_TIME" IS '修改时间';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."MODIFIED_TIME" IS '修改时间';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_CREATOR" IS '创建者';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_CREATOR" IS '创建者';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."PK_MODIFIED" IS '更新者';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."PK_MODIFIED" IS '更新者';
COMMENT ON TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC" IS '支付请求主表';
COMMENT ON TABLE "T_ONLINE_PAYMENT_SEP_ACC" IS '支付请求主表';
CREATE SEQUENCE T_ONLINE_PAYMENT_SEP_ACC_SEQ
START WITH 1
INCREMENT BY 1;
CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" (
CREATE TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" (
"PK_ID" NUMBER(20,0),
"PK_SEP_ACC" NUMBER(20,0),
"ACCOUNT" VARCHAR2(255),
@ -56,44 +56,44 @@ CREATE TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" (
)
;
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_SEP_ACC" IS '支付请求主表ID';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_SEP_ACC" IS '支付请求主表ID';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."ACCOUNT" IS '分账账号';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."ACCOUNT" IS '分账账号';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PROPORTION" IS '分账比例';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PROPORTION" IS '分账比例';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."DEL_FLAG" IS '逻辑删除 (0=未删除,1已删除)';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."CREATION_TIME" IS '创建时间';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."CREATION_TIME" IS '创建时间';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."MODIFIED_TIME" IS '修改时间';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."MODIFIED_TIME" IS '修改时间';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_CREATOR" IS '创建者';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_CREATOR" IS '创建者';
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."PK_MODIFIED" IS '更新者';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."PK_MODIFIED" IS '更新者';
COMMENT ON TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D" IS '支付请求子表(分账)';
COMMENT ON TABLE "T_ONLINE_PAYMENT_SEP_ACC_D" IS '支付请求子表(分账)';
CREATE SEQUENCE T_ONLINE_PAYMENT_SEP_ACC_D_SEQ
START WITH 1
INCREMENT BY 1;
ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"
ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC"
ADD ("TRADE_AMOUNT" NUMBER(16,2));
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."TRADE_AMOUNT" IS '总金额';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."TRADE_AMOUNT" IS '总金额';
ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"
ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC_D"
ADD ("TRADE_AMOUNT" NUMBER(16,2));
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."TRADE_AMOUNT" IS '分账金额';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."TRADE_AMOUNT" IS '分账金额';
ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"
ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC"
ADD ("OUT_TRADE_NO" VARCHAR2(255));
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC"."OUT_TRADE_NO" IS '支付流水号';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC"."OUT_TRADE_NO" IS '支付流水号';
ALTER TABLE "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"
ALTER TABLE "T_ONLINE_PAYMENT_SEP_ACC_D"
ADD ("OUT_TRADE_NO" VARCHAR2(255));
COMMENT ON COLUMN "CLOUD_2"."T_ONLINE_PAYMENT_SEP_ACC_D"."OUT_TRADE_NO" IS '支付流水号';
COMMENT ON COLUMN "T_ONLINE_PAYMENT_SEP_ACC_D"."OUT_TRADE_NO" IS '支付流水号';

View File

@ -0,0 +1 @@
COMMENT ON COLUMN "RETAIL"."T_ONLINE_PAYMENT"."PAY_TYPE" IS '支付类型1=支付宝,2=微信,3=银行卡,4=网上银行, 5=(京东)小金库, 6=(京东)白条, 7=(京东)超级白条, 8=(京东)钱包余额), 9=(京东)银行卡, 10=(京东)云闪付'