代理在线充值
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m6s

This commit is contained in:
2026-07-27 16:02:55 +08:00
parent a2166c8011
commit cbf909b878
42 changed files with 3121 additions and 195 deletions

View File

@@ -0,0 +1,32 @@
package constants
import "time"
const (
// OutboxEventTypeAgentRechargePaymentConfirmed 表示代理在线充值收款事实已经确认。
OutboxEventTypeAgentRechargePaymentConfirmed = "agent_recharge.payment_confirmed.v1"
// AgentRechargePaymentConfirmedPayloadVersionV1 是代理充值支付确认事件载荷版本。
AgentRechargePaymentConfirmedPayloadVersionV1 = 1
)
const (
// AgentRechargeRecoveryBatchSize 是单次支付恢复扫描的最大支付单数。
AgentRechargeRecoveryBatchSize = 50
// AgentRechargeRecoveryMinimumAge 是支付单进入恢复扫描前的最短等待时间。
AgentRechargeRecoveryMinimumAge = 2 * time.Minute
)
const (
// AgentRechargeSourcePlatformOffline 表示平台人员发起的线下代充。
AgentRechargeSourcePlatformOffline = "platform_offline"
// AgentRechargeSourceAgentOnline 表示代理账号为当前店铺发起的在线自充。
AgentRechargeSourceAgentOnline = "agent_online"
)
// GetAgentRechargeSource 根据支付方式返回稳定的充值来源及中文名称。
func GetAgentRechargeSource(paymentMethod string) (string, string) {
if paymentMethod == RechargeMethodWechat || paymentMethod == RechargeMethodAlipay {
return AgentRechargeSourceAgentOnline, "代理在线自充"
}
return AgentRechargeSourcePlatformOffline, "平台线下代充"
}

View File

@@ -81,15 +81,16 @@ const (
TaskTypeAutoPurchaseAfterRecharge = "task:auto_purchase_after_recharge" // 充值后自动购包
// 定时任务类型(由 Asynq Scheduler 调度)
TaskTypeAlertCheck = "alert:check" // 告警检查
TaskTypeDataCleanup = "data:cleanup" // 数据清理
TaskTypeNotificationCleanup = "notification:cleanup" // 站内通知保留清理
TaskTypePackageExpiryReminder = "package:expiry:reminder" // 套餐 15/7/3 天临期提醒
TaskTypeDailyTrafficFlush = "traffic:daily:flush" // 每日流量落盘
TaskTypeOutboxDeliver = "outbox:deliver" // 公共 Outbox 事件投递
TaskTypeCardObservationSeries = "card_observation:series" // 卡观测事件序列尝试
TaskTypeWeComApprovalSync = "wecom:approval:sync" // 企业微信审批详情异步同步
TaskTypeWeComApprovalRecovery = "wecom:approval:recovery" // 企业微信审批主动恢复与轮询
TaskTypeAlertCheck = "alert:check" // 告警检查
TaskTypeDataCleanup = "data:cleanup" // 数据清理
TaskTypeNotificationCleanup = "notification:cleanup" // 站内通知保留清理
TaskTypePackageExpiryReminder = "package:expiry:reminder" // 套餐 15/7/3 天临期提醒
TaskTypeDailyTrafficFlush = "traffic:daily:flush" // 每日流量落盘
TaskTypeOutboxDeliver = "outbox:deliver" // 公共 Outbox 事件投递
TaskTypeCardObservationSeries = "card_observation:series" // 卡观测事件序列尝试
TaskTypeWeComApprovalSync = "wecom:approval:sync" // 企业微信审批详情异步同步
TaskTypeWeComApprovalRecovery = "wecom:approval:recovery" // 企业微信审批主动恢复与轮询
TaskTypeAgentRechargeRecovery = "agent_recharge:payment:recovery" // 代理在线充值支付恢复与查单
)
// 用户状态常量
@@ -303,6 +304,8 @@ func QueueForTaskType(taskType string) string {
return QueueCardObservationSeries
case TaskTypeWeComApprovalSync, TaskTypeWeComApprovalRecovery:
return QueueWeComApproval
case TaskTypeAgentRechargeRecovery:
return QueueDefault
default:
return QueueDefault
}

View File

@@ -26,6 +26,18 @@ const (
IntegrationOperationCUCCRealnameCallback = "realname_callback"
// IntegrationInboundProcessingLease 表示入站回调 pending 记录允许恢复前的处理租约。
IntegrationInboundProcessingLease = time.Minute
// IntegrationProviderWechatPay 表示微信支付提供方。
IntegrationProviderWechatPay = "wechat_pay"
// IntegrationProviderAlipay 表示支付宝提供方。
IntegrationProviderAlipay = "alipay"
// IntegrationOperationPaymentPreCreate 表示扫码支付预下单。
IntegrationOperationPaymentPreCreate = "payment_precreate"
// IntegrationOperationPaymentQuery 表示支付订单查询。
IntegrationOperationPaymentQuery = "payment_query"
// IntegrationOperationPaymentCallback 表示支付渠道异步回调。
IntegrationOperationPaymentCallback = "payment_callback"
// IntegrationResourceTypeAgentRechargePayment 表示代理充值支付单资源。
IntegrationResourceTypeAgentRechargePayment = "agent_recharge_payment"
)
const (

28
pkg/constants/payment.go Normal file
View File

@@ -0,0 +1,28 @@
package constants
const (
// PaymentRecordStatusPending 表示支付单待支付。
PaymentRecordStatusPending = 0
// PaymentRecordStatusPaid 表示支付单已支付。
PaymentRecordStatusPaid = 1
// PaymentRecordStatusFailed 表示支付单已失败。
PaymentRecordStatusFailed = 2
// PaymentRecordStatusRefunded 表示支付单已退款。
PaymentRecordStatusRefunded = 3
)
// GetPaymentRecordStatusName 返回支付单状态中文名称。
func GetPaymentRecordStatusName(status int) string {
switch status {
case PaymentRecordStatusPending:
return "待支付"
case PaymentRecordStatusPaid:
return "已支付"
case PaymentRecordStatusFailed:
return "已失败"
case PaymentRecordStatusRefunded:
return "已退款"
default:
return "未知"
}
}

View File

@@ -80,8 +80,9 @@ const (
// 代理充值金额限制(单位:分)
const (
AgentRechargeMinAmount = 1 // 最小充值金额1分
AgentRechargeMaxAmount = 100000000 // 最大充值金额1000000元)
AgentRechargeMinAmount = 1 // 线下最小充值金额1分
AgentOnlineRechargeMinAmount = 10000 // 在线扫码最小充值金额100元
AgentRechargeMaxAmount = 100000000 // 最大充值金额1000000元
)
// ========== 资产钱包常量 ==========

View File

@@ -53,7 +53,7 @@ func BuildDocHandlers() *bootstrap.Handlers {
ShopSeriesGrant: admin.NewShopSeriesGrantHandler(nil),
AdminOrder: admin.NewOrderHandler(nil, nil),
AdminExchange: admin.NewExchangeHandler(nil, nil, nil),
PaymentCallback: callback.NewPaymentHandler(nil, nil, nil, nil, nil, nil, nil, nil),
PaymentCallback: callback.NewPaymentHandler(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil),
CTCCRealnameCallback: callback.NewCTCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil),
CMCCRealnameCallback: callback.NewCMCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil),
CUCCRealnameCallback: callback.NewCUCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil),

View File

@@ -239,9 +239,10 @@ type V2CallbackResult struct {
OutTradeNo string
TransactionID string
// TradeState 为 "SUCCESS" 表示支付成功return_code 和 result_code 均为 SUCCESS
TradeState string
TotalFee string
OpenID string
TradeState string
TotalFee string
OpenID string
SuccessTime string
}
// VerifyCallback 解析并验证 v2 回调 XML返回解析结果
@@ -292,5 +293,6 @@ func (s *PaymentV2Service) VerifyCallback(body []byte) (*V2CallbackResult, error
TradeState: tradeState,
TotalFee: notify.TotalFee,
OpenID: notify.OpenID,
SuccessTime: notify.TimeEnd,
}, nil
}