feat: C 端充值、购买、实名链接接口接入实名策略拦截(before_order/after_order)

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-17 17:31:21 +08:00
parent 1363797378
commit 363e0efb34
3 changed files with 49 additions and 5 deletions

View File

@@ -107,6 +107,17 @@ func (h *ClientRealnameHandler) GetRealnameLink(c *fiber.Ctx) error {
return err
}
// after_order 策略:必须先有充值或订单才能实名
if asset.RealnamePolicy == constants.RealnamePolicyAfterOrder {
hasValid, checkErr := h.assetService.HasValidRechargeOrPaidOrder(ctx, asset.AssetType, asset.AssetID)
if checkErr != nil {
logger.GetAppLogger().Warn("检查资产有效充值或订单失败", zap.Error(checkErr))
}
if !hasValid {
return errors.New(errors.CodeRealnameNotAvailable)
}
}
// 6. 检查实名状态
if targetCard.RealNameStatus == constants.RealNameStatusVerified {
return errors.New(errors.CodeInvalidStatus, "该卡已完成实名")

View File

@@ -230,6 +230,11 @@ func (h *ClientWalletHandler) GetRechargeCheck(c *fiber.Ctx) error {
return err
}
// before_order 策略:必须先实名才能充值
if resolved.Asset.RealnamePolicy == constants.RealnamePolicyBeforeOrder && resolved.Asset.RealNameStatus != 1 {
return errors.New(errors.CodeNeedRealname)
}
check, err := h.rechargeService.GetRechargeCheck(resolved.SkipPermissionCtx, resolved.ResourceType, resolved.Asset.AssetID)
if err != nil {
return err
@@ -264,6 +269,11 @@ func (h *ClientWalletHandler) CreateRecharge(c *fiber.Ctx) error {
return err
}
// before_order 策略:必须先实名才能充值
if resolved.Asset.RealnamePolicy == constants.RealnamePolicyBeforeOrder && resolved.Asset.RealNameStatus != 1 {
return errors.New(errors.CodeNeedRealname)
}
wallet, err := h.getOrCreateWallet(resolved)
if err != nil {
return err