f
This commit is contained in:
@@ -118,18 +118,23 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
} else if req.PayMethod == "appleiap" {
|
||||
prepayData = l.svcCtx.ApplePayService.GetIappayAppID(paymentTypeResp.outTradeNo)
|
||||
} else if req.PayMethod == "yunyinSignPay" || req.PayMethod == "yunyinSignPay_wechat" || req.PayMethod == "yunyinSignPay_alipay" {
|
||||
logx.Infof("[云印签支付] 开始处理支付请求,支付方式: %s, 订单号: %s", req.PayMethod, paymentTypeResp.outTradeNo)
|
||||
|
||||
if l.svcCtx.YunYinSignPayService == nil {
|
||||
logx.Errorf("[云印签支付] 支付服务未启用")
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "云印签支付服务未启用")
|
||||
}
|
||||
|
||||
// 从查询缓存中获取用户姓名和手机号
|
||||
if paymentTypeResp.userMobile == "" {
|
||||
logx.Errorf("[云印签支付] 查询缓存中未找到用户手机号,订单号: %s", paymentTypeResp.outTradeNo)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 查询缓存中未找到用户手机号,无法使用云印签支付")
|
||||
}
|
||||
|
||||
// 获取用户ID
|
||||
userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx)
|
||||
if getUidErr != nil {
|
||||
logx.Errorf("[云印签支付] 获取用户ID失败,订单号: %s, 错误: %+v", paymentTypeResp.outTradeNo, getUidErr)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取用户ID失败: %+v", getUidErr)
|
||||
}
|
||||
|
||||
@@ -138,10 +143,13 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
if req.PayMethod == "yunyinSignPay_alipay" {
|
||||
payType = 1 // 支付宝支付
|
||||
}
|
||||
logx.Infof("[云印签支付] 支付参数,订单号: %s, 用户ID: %s, 用户手机: %s, 用户姓名: %s, 金额: %.2f, 支付类型: %d(0=微信,1=支付宝)",
|
||||
paymentTypeResp.outTradeNo, userID, paymentTypeResp.userMobile, paymentTypeResp.userName, paymentTypeResp.amount, payType)
|
||||
|
||||
// 查询用户是否有未完成的签署(待签署且待支付)
|
||||
var yunYinSignPayResult *service.CreateYunYinSignPayOrderResult
|
||||
// 使用 SelectBuilder 查询未完成的签署订单(del_state 由系统自动处理)
|
||||
logx.Infof("[云印签支付] 查询用户未完成的签署订单,用户ID: %s", userID)
|
||||
unfinishedBuilder := l.svcCtx.YunyinSignPayOrderModel.SelectBuilder().
|
||||
Where(squirrel.Eq{
|
||||
"user_id": userID,
|
||||
@@ -154,35 +162,60 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
var unfinishedOrder *model.YunyinSignPayOrder
|
||||
if findUnfinishedErr == nil && len(unfinishedOrders) > 0 {
|
||||
unfinishedOrder = unfinishedOrders[0]
|
||||
logx.Infof("[云印签支付] 找到未完成的签署订单,订单号: %s, 任务ID: %s, 参与者ID: %s, 金额: %.2f",
|
||||
paymentTypeResp.outTradeNo, unfinishedOrder.TaskId, unfinishedOrder.ParticipantId, unfinishedOrder.Amount)
|
||||
} else {
|
||||
if findUnfinishedErr != nil {
|
||||
logx.Infof("[云印签支付] 查询未完成签署订单失败,用户ID: %s, 错误: %v", userID, findUnfinishedErr)
|
||||
} else {
|
||||
logx.Infof("[云印签支付] 未找到未完成的签署订单,用户ID: %s, 将创建新签署流程", userID)
|
||||
}
|
||||
}
|
||||
|
||||
if unfinishedOrder != nil {
|
||||
// 复用未完成的签署,只获取新的支付链接
|
||||
logx.Infof("复用未完成的云印签签署,任务ID: %s, 参与者ID: %s", unfinishedOrder.TaskId, unfinishedOrder.ParticipantId)
|
||||
logx.Infof("[云印签支付] 复用未完成的签署,订单号: %s, 任务ID: %s, 参与者ID: %s",
|
||||
paymentTypeResp.outTradeNo, unfinishedOrder.TaskId, unfinishedOrder.ParticipantId)
|
||||
|
||||
// 获取token和操作ID(带缓存)
|
||||
logx.Infof("[云印签支付] 开始获取AccessToken,订单号: %s", paymentTypeResp.outTradeNo)
|
||||
accessToken, tokenErr := l.svcCtx.YunYinSignPayService.GetAccessToken(l.ctx)
|
||||
if tokenErr != nil {
|
||||
logx.Errorf("[云印签支付] 获取AccessToken失败,订单号: %s, 错误: %+v", paymentTypeResp.outTradeNo, tokenErr)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取云印签token失败: %+v", tokenErr)
|
||||
}
|
||||
logx.Infof("[云印签支付] 获取AccessToken成功,订单号: %s", paymentTypeResp.outTradeNo)
|
||||
|
||||
logx.Infof("[云印签支付] 开始获取操作ID,订单号: %s", paymentTypeResp.outTradeNo)
|
||||
operationUserId, userIdErr := l.svcCtx.YunYinSignPayService.GetUserId(l.ctx, accessToken)
|
||||
if userIdErr != nil {
|
||||
logx.Errorf("[云印签支付] 获取操作ID失败,订单号: %s, 错误: %+v", paymentTypeResp.outTradeNo, userIdErr)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取云印签操作ID失败: %+v", userIdErr)
|
||||
}
|
||||
logx.Infof("[云印签支付] 获取操作ID成功,订单号: %s, 操作ID: %s", paymentTypeResp.outTradeNo, operationUserId)
|
||||
|
||||
// 获取新的支付链接
|
||||
logx.Infof("[云印签支付] 开始获取支付链接,订单号: %s, 参与者ID: %s, 支付类型: %d",
|
||||
paymentTypeResp.outTradeNo, unfinishedOrder.ParticipantId, payType)
|
||||
payURL, payURLErr := l.svcCtx.YunYinSignPayService.GetPaymentURL(l.ctx, accessToken, operationUserId, unfinishedOrder.ParticipantId, payType)
|
||||
if payURLErr != nil {
|
||||
logx.Errorf("[云印签支付] 获取支付链接失败,订单号: %s, 参与者ID: %s, 错误: %+v",
|
||||
paymentTypeResp.outTradeNo, unfinishedOrder.ParticipantId, payURLErr)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取云印签支付链接失败: %+v", payURLErr)
|
||||
}
|
||||
logx.Infof("[云印签支付] 获取支付链接成功,订单号: %s, 支付链接: %s", paymentTypeResp.outTradeNo, payURL)
|
||||
|
||||
yunYinSignPayResult = &service.CreateYunYinSignPayOrderResult{
|
||||
PayURL: payURL,
|
||||
ParticipantID: unfinishedOrder.ParticipantId,
|
||||
TaskID: unfinishedOrder.TaskId,
|
||||
}
|
||||
logx.Infof("[云印签支付] 复用签署流程完成,订单号: %s, 任务ID: %s, 参与者ID: %s, 支付链接: %s",
|
||||
paymentTypeResp.outTradeNo, yunYinSignPayResult.TaskID, yunYinSignPayResult.ParticipantID, yunYinSignPayResult.PayURL)
|
||||
} else {
|
||||
// 没有未完成的签署,创建新的签署流程
|
||||
logx.Infof("[云印签支付] 开始创建新签署流程,订单号: %s, 用户手机: %s, 用户姓名: %s, 金额: %.2f, 支付类型: %d",
|
||||
paymentTypeResp.outTradeNo, paymentTypeResp.userMobile, paymentTypeResp.userName, paymentTypeResp.amount, payType)
|
||||
var createOrderErr error
|
||||
yunYinSignPayResult, createOrderErr = l.svcCtx.YunYinSignPayService.CreateYunYinSignPayOrder(
|
||||
l.ctx,
|
||||
@@ -193,11 +226,15 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
payType,
|
||||
)
|
||||
if createOrderErr != nil {
|
||||
logx.Errorf("[云印签支付] 创建新签署流程失败,订单号: %s, 错误: %+v", paymentTypeResp.outTradeNo, createOrderErr)
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 创建云印签支付订单失败: %+v", createOrderErr)
|
||||
}
|
||||
logx.Infof("[云印签支付] 创建新签署流程成功,订单号: %s, 任务ID: %s, 参与者ID: %s, 支付链接: %s",
|
||||
paymentTypeResp.outTradeNo, yunYinSignPayResult.TaskID, yunYinSignPayResult.ParticipantID, yunYinSignPayResult.PayURL)
|
||||
}
|
||||
|
||||
prepayData = yunYinSignPayResult.PayURL
|
||||
logx.Infof("[云印签支付] 支付链接获取成功,订单号: %s, 支付链接: %s", paymentTypeResp.outTradeNo, yunYinSignPayResult.PayURL)
|
||||
|
||||
// 将云印签信息存储到context中,后续创建订单和云印签订单记录时使用
|
||||
ctx = context.WithValue(ctx, "yunyin_sign_pay_result", yunYinSignPayResult)
|
||||
@@ -207,6 +244,8 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
|
||||
ctx = context.WithValue(ctx, "yunyin_sign_pay_amount", paymentTypeResp.amount)
|
||||
ctx = context.WithValue(ctx, "yunyin_sign_pay_pay_type", payType)
|
||||
l.ctx = ctx
|
||||
logx.Infof("[云印签支付] 云印签信息已存储到context,订单号: %s, 任务ID: %s, 参与者ID: %s",
|
||||
paymentTypeResp.outTradeNo, yunYinSignPayResult.TaskID, yunYinSignPayResult.ParticipantID)
|
||||
}
|
||||
if createOrderErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 创建支付订单失败: %+v", createOrderErr)
|
||||
@@ -371,6 +410,7 @@ func (l *PaymentLogic) QueryOrderPayment(req *types.PaymentReq, session sqlx.Ses
|
||||
|
||||
// 如果是云印签支付,创建云印签订单记录
|
||||
if req.PayMethod == "yunyinSignPay" || req.PayMethod == "yunyinSignPay_wechat" || req.PayMethod == "yunyinSignPay_alipay" {
|
||||
logx.Infof("[云印签支付] 开始创建云印签订单记录,订单号: %s, 订单ID: %s", outTradeNo, orderID)
|
||||
yunYinSignPayResult, ok := l.ctx.Value("yunyin_sign_pay_result").(*service.CreateYunYinSignPayOrderResult)
|
||||
if ok && yunYinSignPayResult != nil {
|
||||
userID, _ := l.ctx.Value("yunyin_sign_pay_user_id").(string)
|
||||
@@ -379,6 +419,9 @@ func (l *PaymentLogic) QueryOrderPayment(req *types.PaymentReq, session sqlx.Ses
|
||||
amount, _ := l.ctx.Value("yunyin_sign_pay_amount").(float64)
|
||||
payType, _ := l.ctx.Value("yunyin_sign_pay_pay_type").(int)
|
||||
|
||||
logx.Infof("[云印签支付] 云印签订单数据,订单号: %s, 订单ID: %s, 用户ID: %s, 任务ID: %s, 参与者ID: %s, 金额: %.2f, 支付类型: %d",
|
||||
outTradeNo, orderID, userID, yunYinSignPayResult.TaskID, yunYinSignPayResult.ParticipantID, amount, payType)
|
||||
|
||||
yunyinSignPayOrder := model.YunyinSignPayOrder{
|
||||
Id: uuid.NewString(),
|
||||
OrderId: orderID,
|
||||
@@ -398,8 +441,13 @@ func (l *PaymentLogic) QueryOrderPayment(req *types.PaymentReq, session sqlx.Ses
|
||||
|
||||
_, insertYunYinErr := l.svcCtx.YunyinSignPayOrderModel.Insert(l.ctx, session, &yunyinSignPayOrder)
|
||||
if insertYunYinErr != nil {
|
||||
logx.Errorf("[云印签支付] 保存云印签订单失败,订单号: %s, 订单ID: %s, 错误: %+v", outTradeNo, orderID, insertYunYinErr)
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成订单, 保存云印签订单失败: %+v", insertYunYinErr)
|
||||
}
|
||||
logx.Infof("[云印签支付] 云印签订单记录创建成功,订单号: %s, 订单ID: %s, 云印签订单ID: %s, 任务ID: %s, 参与者ID: %s",
|
||||
outTradeNo, orderID, yunyinSignPayOrder.Id, yunyinSignPayOrder.TaskId, yunyinSignPayOrder.ParticipantId)
|
||||
} else {
|
||||
logx.Errorf("[云印签支付] 未找到云印签支付结果,订单号: %s, 订单ID: %s", outTradeNo, orderID)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user