2026-07-03 13:09:01 +08:00

414 lines
11 KiB
Go

package ledger
import (
"strings"
)
// RechargeProduct 是用户充值页读取的充值档位。
type RechargeProduct struct {
AppCode string
AudienceType string
ProductID int64
ProductCode string
ProductName string
Description string
Platform string
Channel string
CurrencyCode string
AmountMicro int64
AmountMinor int64
CoinAmount int64
PolicyVersion string
Enabled bool
Status string
SortOrder int32
RegionIDs []int64
ResourceAssetType string
CreatedByUserID int64
UpdatedByUserID int64
CreatedAtMS int64
UpdatedAtMS int64
}
// ListRechargeProductsQuery 是后台内购商品配置列表的筛选条件。
type ListRechargeProductsQuery struct {
AppCode string
Status string
Platform string
AudienceType string
RegionID int64
Keyword string
Page int32
PageSize int32
}
// RechargeProductCommand 是后台创建或更新内购商品配置的完整事实输入。
type RechargeProductCommand struct {
AppCode string
AudienceType string
ProductID int64
AmountMicro int64
CoinAmount int64
ProductName string
Description string
Platform string
RegionIDs []int64
Enabled bool
OperatorUserID int64
}
// GooglePaymentCommand 是 App 完成 Google Play 支付后提交给后端确认和入账的命令。
type GooglePaymentCommand struct {
AppCode string
CommandID string
UserID int64
RegionID int64
CountryID int64
ProductID int64
ProductCode string
PackageName string
PurchaseToken string
OrderID string
PurchaseTimeMS int64
}
// GooglePlayPurchase 是 Google Play Developer API 返回的一次性商品购买状态快照。
type GooglePlayPurchase struct {
PackageName string
ProductID string
OrderID string
PurchaseState string
ConsumptionState string
AcknowledgementState string
PurchaseCompletionTime string
RawJSON string
}
// GooglePlayOrder 是 Play Developer API Orders 接口返回的订单实付快照;金额统一收敛为实付币种微单位。
type GooglePlayOrder struct {
OrderID string
State string
BuyerCountry string
CurrencyCode string
TotalAmountMicro int64
TaxAmountMicro int64
// NetAmountMicro 是 Google 扣除服务费和代缴税后的开发者净收入(实付币种);接口未返回时为 0。
NetAmountMicro int64
RawJSON string
}
// GooglePaymentPaidDetails 是写回 payment_orders 的实付明细命令。
type GooglePaymentPaidDetails struct {
CurrencyCode string
PaidAmountMicro int64
TaxAmountMicro int64
NetAmountMicro int64
SyncedAtMS int64
}
// GooglePaymentOrderRef 是按钱包交易反查 Google 支付订单、发起 Orders API 查询所需的最小定位信息。
type GooglePaymentOrderRef struct {
PaymentOrderID string
TransactionID string
PackageName string
ProviderOrderID string
PaidSyncedAtMS int64
}
// GooglePaymentReceipt 是 Google 支付确认接口返回给 App 的稳定入账回执。
type GooglePaymentReceipt struct {
PaymentOrderID string
TransactionID string
Status string
ProductID int64
ProductCode string
CoinAmount int64
Balance AssetBalance
IdempotentReplay bool
ConsumeState string
}
// ThirdPartyPaymentMethod 是 MiFaPay 等三方支付方式的后台配置事实。
type ThirdPartyPaymentMethod struct {
MethodID int64
AppCode string
ProviderCode string
ProviderName string
CountryCode string
CountryName string
CurrencyCode string
PayWay string
PayType string
MethodName string
LogoURL string
Status string
USDToCurrencyRate string
SortOrder int32
CreatedAtMS int64
UpdatedAtMS int64
}
// ThirdPartyPaymentChannel 聚合一个三方渠道及其国家/方式列表,供后台展开展示。
type ThirdPartyPaymentChannel struct {
AppCode string
ProviderCode string
ProviderName string
Status string
SortOrder int32
Methods []ThirdPartyPaymentMethod
}
type ListThirdPartyPaymentChannelsQuery struct {
AppCode string
ProviderCode string
Status string
IncludeDisabledMethods bool
}
type ThirdPartyPaymentMethodStatusCommand struct {
AppCode string
MethodID int64
Enabled bool
OperatorUserID int64
}
type ThirdPartyPaymentRateCommand struct {
AppCode string
MethodID int64
USDToCurrencyRate string
OperatorUserID int64
}
// ThirdPartyPaymentMethodSyncCommand 表示后台要求 wallet-service 从支付商实时拉取可用方式并同步到本地配置表。
type ThirdPartyPaymentMethodSyncCommand struct {
AppCode string
ProviderCode string
OperatorUserID int64
}
// ThirdPartyPaymentMethodSyncIssue 记录某个国家/币种同步失败或被支付商拒绝的原因;同步整体可部分成功。
type ThirdPartyPaymentMethodSyncIssue struct {
CountryCode string
CurrencyCode string
Code string
Message string
}
// ThirdPartyPaymentMethodSyncResult 是同步操作的可审计摘要,避免后台只知道请求成功却不知道实际写入了什么。
type ThirdPartyPaymentMethodSyncResult struct {
ProviderCode string
ScannedCountryCount int
FetchedCountryCount int
CreatedCount int
UpdatedCount int
SkippedCount int
Issues []ThirdPartyPaymentMethodSyncIssue
}
// H5RechargeOptionsQuery 是站外充值页在账号确认后读取商品和支付方式的最小条件。
type H5RechargeOptionsQuery struct {
AppCode string
TargetUserID int64
TargetRegionID int64
TargetCountryCode string
AudienceType string
}
type H5RechargeOptions struct {
Products []RechargeProduct
PaymentMethods []ThirdPartyPaymentMethod
USDTTRC20Enabled bool
USDTTRC20Address string
}
// ListTemporaryExternalRechargeOrdersQuery 是后台临时支付链接列表的筛选条件。
type ListTemporaryExternalRechargeOrdersQuery struct {
AppCode string
Status string
ProviderCode string
Keyword string
Page int32
PageSize int32
}
// ExternalRechargeOrder 保存 H5 外部充值订单的订单、支付和入账状态。
type ExternalRechargeOrder struct {
OrderID string
AppCode string
CommandID string
TargetUserID int64
TargetRegionID int64
TargetCountryID int64
TargetCountryCode string
AudienceType string
ProductID int64
ProductCode string
ProductName string
CoinAmount int64
USDMinorAmount int64
ProviderCode string
PaymentMethodID int64
CountryCode string
CurrencyCode string
ProviderAmountMinor int64
PayWay string
PayType string
PayURL string
ProviderOrderID string
TxHash string
ReceiveAddress string
Status string
FailureReason string
TransactionID string
ProviderPayloadJSON string
CreatedAtMS int64
UpdatedAtMS int64
IdempotentReplay bool
}
type CreateExternalRechargeOrderCommand struct {
AppCode string
CommandID string
TargetUserID int64
TargetRegionID int64
TargetCountryID int64
TargetCountryCode string
AudienceType string
ProductID int64
ProviderCode string
PaymentMethodID int64
ReturnURL string
NotifyURL string
ClientIP string
Language string
PayerName string
PayerAccount string
PayerEmail string
}
// CreateTemporaryExternalRechargeOrderCommand 是运营临时收款链接的下单快照。
// 这类订单没有充值目标用户和商品档位,支付成功后只保留 paid 状态,金币由运营线下核销。
type CreateTemporaryExternalRechargeOrderCommand struct {
AppCode string
CommandID string
CoinAmount int64
USDMinorAmount int64
ProviderCode string
PaymentMethodID int64
ReturnURL string
NotifyURL string
ClientIP string
Language string
PayerName string
PayerAccount string
PayerEmail string
}
type SubmitExternalRechargeTxCommand struct {
AppCode string
OrderID string
TargetUserID int64
TxHash string
}
type MifaPayNotification struct {
MerAccount string
Data string
Sign string
}
// V5PayNotification 保存 V5Pay 回调原始字段;验签必须使用所有返回字段,避免未来新增字段绕过签名校验。
type V5PayNotification struct {
Fields map[string]string
RawJSON string
}
func NormalizeRechargeProductStatus(status string) string {
switch strings.ToLower(strings.TrimSpace(status)) {
case RechargeProductStatusActive:
return RechargeProductStatusActive
case RechargeProductStatusDisabled:
return RechargeProductStatusDisabled
default:
return ""
}
}
func NormalizeRechargeProductPlatform(platform string) string {
switch strings.ToLower(strings.TrimSpace(platform)) {
case RechargeProductPlatformAndroid:
return RechargeProductPlatformAndroid
case RechargeProductPlatformIOS:
return RechargeProductPlatformIOS
case RechargeProductPlatformWeb:
return RechargeProductPlatformWeb
default:
return ""
}
}
func RechargeChannelForPlatform(platform string) string {
switch NormalizeRechargeProductPlatform(platform) {
case RechargeProductPlatformAndroid:
return RechargeChannelGoogle
case RechargeProductPlatformIOS:
return RechargeChannelApple
case RechargeProductPlatformWeb:
return RechargeChannelExternal
default:
return ""
}
}
func NormalizeRechargeAudienceType(audienceType string) string {
switch strings.ToLower(strings.TrimSpace(audienceType)) {
case "", RechargeAudienceNormal:
return RechargeAudienceNormal
case RechargeAudienceCoinSeller:
return RechargeAudienceCoinSeller
default:
return ""
}
}
func NormalizePaymentProvider(provider string) string {
switch strings.ToLower(strings.TrimSpace(provider)) {
case PaymentProviderMifaPay:
return PaymentProviderMifaPay
case PaymentProviderV5Pay:
return PaymentProviderV5Pay
case PaymentProviderUSDTTRC20:
return PaymentProviderUSDTTRC20
case PaymentProviderGooglePlay:
return PaymentProviderGooglePlay
default:
return ""
}
}
func NormalizeThirdPartyPaymentStatus(status string) string {
switch strings.ToLower(strings.TrimSpace(status)) {
case ThirdPartyPaymentStatusActive:
return ThirdPartyPaymentStatusActive
case ThirdPartyPaymentStatusDisabled:
return ThirdPartyPaymentStatusDisabled
default:
return ""
}
}
func NormalizeExternalRechargeStatus(status string) string {
switch strings.ToLower(strings.TrimSpace(status)) {
case ExternalRechargeStatusPending:
return ExternalRechargeStatusPending
case ExternalRechargeStatusRedirected:
return ExternalRechargeStatusRedirected
case ExternalRechargeStatusCredited:
return ExternalRechargeStatusCredited
case ExternalRechargeStatusFailed:
return ExternalRechargeStatusFailed
default:
return ""
}
}