All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m26s
- 排队激活与首次实名激活任务的处理器注入停复机服务:原来传 nil,激活后不重新评估停复机,付款或实名后要等下一轮轮询才复机(生产同样存在) - 孤儿套餐扫描跳过载体未实名的"实名即生效"套餐:激活服务会直接跳过,原来每 10 秒重复提交一次激活任务 - 微信 v2 查单返回 ORDERNOTEXIST 时按"渠道无此订单"处理:代理充值支付单过期后关闭,不再当作结果未知每几分钟重查 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package agentrecharge
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/model"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// PaymentAudit 描述代理充值支付记录的实际生命周期变化。
|
|
type PaymentAudit struct {
|
|
ActionCode string
|
|
Summary string
|
|
Payment *model.Payment
|
|
Recharge *model.AgentRechargeRecord
|
|
BeforeData map[string]any
|
|
AfterData map[string]any
|
|
RechargeBeforeData map[string]any
|
|
RechargeAfterData map[string]any
|
|
}
|
|
|
|
// PaymentAuditWriter 在支付业务事务内追加统一 Audit Event。
|
|
type PaymentAuditWriter interface {
|
|
WriteAgentRechargePayment(ctx context.Context, tx *gorm.DB, change PaymentAudit) error
|
|
}
|
|
|
|
const (
|
|
// OnlinePaymentStatePending 表示渠道仍在等待付款。
|
|
OnlinePaymentStatePending = "pending"
|
|
// OnlinePaymentStatePaid 表示渠道已确认收款。
|
|
OnlinePaymentStatePaid = "paid"
|
|
// OnlinePaymentStateClosed 表示渠道订单已明确关闭。
|
|
OnlinePaymentStateClosed = "closed"
|
|
// OnlinePaymentStateUnknown 表示渠道状态暂时无法确定。
|
|
OnlinePaymentStateUnknown = "unknown"
|
|
// OnlinePaymentStateNotFound 表示渠道明确没有这笔订单;恢复任务在支付单过期后按关闭处理。
|
|
OnlinePaymentStateNotFound = "not_found"
|
|
)
|
|
|
|
// OnlinePaymentRequest 描述生成支付链接与主动查单所需的最小事实。
|
|
type OnlinePaymentRequest struct {
|
|
PaymentID uint
|
|
PaymentNo string
|
|
CorrelationID string
|
|
Description string
|
|
Amount int64
|
|
ExpireAt time.Time
|
|
PayerClientIP string
|
|
Config *model.WechatConfig
|
|
}
|
|
|
|
// OnlinePaymentResult 描述渠道返回的支付链接。
|
|
type OnlinePaymentResult struct {
|
|
QRContent string
|
|
}
|
|
|
|
// OnlinePaymentQueryResult 描述统一后的渠道支付状态。
|
|
type OnlinePaymentQueryResult struct {
|
|
State string
|
|
ThirdPartyTradeNo string
|
|
Amount int64
|
|
PaidAt *time.Time
|
|
}
|
|
|
|
// OnlinePaymentPort 定义代理在线充值需要的最小渠道能力。
|
|
type OnlinePaymentPort interface {
|
|
Available(config *model.WechatConfig) bool
|
|
CreatePaymentURL(ctx context.Context, request OnlinePaymentRequest) (OnlinePaymentResult, error)
|
|
Query(ctx context.Context, request OnlinePaymentRequest) (OnlinePaymentQueryResult, error)
|
|
}
|