f
This commit is contained in:
@@ -164,7 +164,13 @@ func (l *AlipayCallbackLogic) handleAgentVipOrderPayment(w http.ResponseWriter,
|
||||
} else {
|
||||
logx.Infof("代理会员新购、升级或重新激活成功,会员ID:%d,等级:%s", agentModel.Id, agentModel.LevelName)
|
||||
}
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
// VIP 升级到 SVIP 按支付时间重新计算有效期,不叠加旧 VIP 剩余时长。
|
||||
isVipUpgradeToSvip := oldLevel == model.AgentLeveNameVIP && agentOrder.LevelName == model.AgentLeveNameSVIP
|
||||
if isVipUpgradeToSvip {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(lzUtils.TimeToNullTime(time.Now()))
|
||||
} else {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
}
|
||||
|
||||
if updateErr := l.svcCtx.AgentModel.UpdateWithVersion(l.ctx, nil, agentModel); updateErr != nil {
|
||||
return fmt.Errorf("修改代理信息失败: %+v", updateErr)
|
||||
|
||||
@@ -34,6 +34,24 @@ type PaymentTypeResp struct {
|
||||
orderID int64 // 仅 query 类型有值;agent_vip 为 0
|
||||
}
|
||||
|
||||
func (l *PaymentLogic) resolvePaymentScene() string {
|
||||
platform, _ := l.ctx.Value("platform").(string)
|
||||
switch platform {
|
||||
case model.PlatformApp:
|
||||
return "app"
|
||||
case model.PlatformH5:
|
||||
return "h5"
|
||||
case model.PlatformWxMini:
|
||||
return "mini_program"
|
||||
case model.PlatformWxH5:
|
||||
return "public_account"
|
||||
default:
|
||||
// 兜底为 app,避免脏值写入 enum 字段导致下单失败。
|
||||
logx.Infof("支付场景识别失败,使用默认场景 app,platform=%s", platform)
|
||||
return "app"
|
||||
}
|
||||
}
|
||||
|
||||
func NewPaymentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PaymentLogic {
|
||||
return &PaymentLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
@@ -192,48 +210,13 @@ func (l *PaymentLogic) QueryOrderPayment(req *types.PaymentReq, session sqlx.Ses
|
||||
amount = 0.01
|
||||
}
|
||||
|
||||
// 检查72小时内身份证查询次数限制
|
||||
secretKey := l.svcCtx.Config.Encrypt.SecretKey
|
||||
key, decodeErr := hex.DecodeString(secretKey)
|
||||
if decodeErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取AES密钥失败: %+v", decodeErr)
|
||||
}
|
||||
// 解密缓存中的参数
|
||||
decryptedParams, decryptErr := crypto.AesDecrypt(data.Params, key)
|
||||
if decryptErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 解密缓存参数失败: %v", decryptErr)
|
||||
}
|
||||
var params map[string]interface{}
|
||||
if unmarshalErr := json.Unmarshal(decryptedParams, ¶ms); unmarshalErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 解析解密参数失败: %v", unmarshalErr)
|
||||
}
|
||||
// 获取身份证号
|
||||
idCard, ok := params["id_card"].(string)
|
||||
if !ok || idCard == "" {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取身份证号失败")
|
||||
}
|
||||
// 加密身份证号用于查询
|
||||
encryptedIdCard, encryptErr := crypto.EncryptIDCard(idCard, key)
|
||||
if encryptErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 加密身份证号失败: %v", encryptErr)
|
||||
}
|
||||
// 查询72小时内的查询次数
|
||||
queryCount, countErr := l.svcCtx.QueryUserRecordModel.CountByEncryptedIdCardIn72Hours(l.ctx, encryptedIdCard)
|
||||
if countErr != nil {
|
||||
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成订单, 查询记录失败: %v", countErr)
|
||||
}
|
||||
// 如果72小时内查询次数大于等于2次,禁止支付(当前这次是第3次)
|
||||
if queryCount >= 2 {
|
||||
return nil, errors.Wrapf(xerr.NewErrMsg("查询受限通知:检测到您72小时内已完成2次报告查询,系统已自动暂停服务。如需紧急查询,请联系客服申请临时额度。"), "生成订单, 查询次数超限: %d", queryCount)
|
||||
}
|
||||
|
||||
var orderID int64
|
||||
order := model.Order{
|
||||
OrderNo: outTradeNo,
|
||||
UserId: userID,
|
||||
ProductId: product.Id,
|
||||
PaymentPlatform: req.PayMethod,
|
||||
PaymentScene: "app",
|
||||
PaymentScene: l.resolvePaymentScene(),
|
||||
Amount: amount,
|
||||
Status: "pending",
|
||||
}
|
||||
|
||||
@@ -169,7 +169,13 @@ func (l *WechatPayCallbackLogic) handleAgentVipOrderPayment(w http.ResponseWrite
|
||||
} else {
|
||||
logx.Infof("代理会员新购、升级或重新激活成功,会员ID:%d,等级:%s", agentModel.Id, agentModel.LevelName)
|
||||
}
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
// VIP 升级到 SVIP 按支付时间重新计算有效期,不叠加旧 VIP 剩余时长。
|
||||
isVipUpgradeToSvip := oldLevel == model.AgentLeveNameVIP && agentOrder.LevelName == model.AgentLeveNameSVIP
|
||||
if isVipUpgradeToSvip {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(lzUtils.TimeToNullTime(time.Now()))
|
||||
} else {
|
||||
agentModel.MembershipExpiryTime = lzUtils.RenewMembership(agentModel.MembershipExpiryTime)
|
||||
}
|
||||
|
||||
if updateErr := l.svcCtx.AgentModel.UpdateWithVersion(l.ctx, nil, agentModel); updateErr != nil {
|
||||
return fmt.Errorf("修改代理信息失败: %+v", updateErr)
|
||||
|
||||
Reference in New Issue
Block a user