hi-server/pkg/payment/platform.go
shanshanzhong 0c544268e5
Some checks failed
Build docker and publish / build (20.15.1) (push) Failing after 8m1s
refactor payment platform canonicalization and order method consistency
2026-03-04 02:15:32 -08:00

144 lines
3.3 KiB
Go

package payment
import (
"strings"
"github.com/perfect-panel/server/internal/types"
)
type Platform int
const (
Stripe Platform = iota
AlipayF2F
EPay
Balance
CryptoSaaS
AppleIAP
UNSUPPORTED Platform = -1
)
const (
platformNameStripe = "Stripe"
platformNameAlipayF2F = "AlipayF2F"
platformNameEPay = "EPay"
platformNameBalance = "balance"
platformNameCryptoSaaS = "CryptoSaaS"
platformNameAppleIAP = "AppleIAP"
platformNameUnsupported = "unsupported"
)
var platformAliasToType = map[string]Platform{
"stripe": Stripe,
"alipayf2f": AlipayF2F,
"alipay_f2f": AlipayF2F,
"epay": EPay,
"balance": Balance,
"cryptosaas": CryptoSaaS,
"crypto_saas": CryptoSaaS,
"appleiap": AppleIAP,
"apple_iap": AppleIAP,
}
func (p Platform) String() string {
switch p {
case Stripe:
return platformNameStripe
case AlipayF2F:
return platformNameAlipayF2F
case EPay:
return platformNameEPay
case Balance:
return platformNameBalance
case CryptoSaaS:
return platformNameCryptoSaaS
case AppleIAP:
return platformNameAppleIAP
default:
return platformNameUnsupported
}
}
func ParsePlatform(s string) Platform {
normalized := normalizePlatformAlias(s)
if p, ok := platformAliasToType[normalized]; ok {
return p
}
compact := strings.ReplaceAll(normalized, "_", "")
if p, ok := platformAliasToType[compact]; ok {
return p
}
return UNSUPPORTED
}
func CanonicalPlatformName(input string) (string, bool) {
platform := ParsePlatform(input)
if platform == UNSUPPORTED {
return "", false
}
return platform.String(), true
}
func normalizePlatformAlias(input string) string {
normalized := strings.ToLower(strings.TrimSpace(input))
normalized = strings.ReplaceAll(normalized, "-", "_")
normalized = strings.ReplaceAll(normalized, " ", "")
return normalized
}
func GetSupportedPlatforms() []types.PlatformInfo {
return []types.PlatformInfo{
{
Platform: Stripe.String(),
PlatformUrl: "https://stripe.com",
PlatformFieldDescription: map[string]string{
"public_key": "Publishable key",
"secret_key": "Secret key",
"webhook_secret": "Webhook secret",
"payment": "Payment Method, only supported card/alipay/wechat_pay",
},
},
{
Platform: AlipayF2F.String(),
PlatformUrl: "https://alipay.com",
PlatformFieldDescription: map[string]string{
"app_id": "App ID",
"private_key": "Private Key",
"public_key": "Public Key",
"invoice_name": "Invoice Name",
"sandbox": "Sandbox Mode",
},
},
{
Platform: EPay.String(),
PlatformUrl: "",
PlatformFieldDescription: map[string]string{
"pid": "PID",
"url": "URL",
"key": "Key",
"type": "Type",
},
},
{
Platform: CryptoSaaS.String(),
PlatformUrl: "https://t.me/CryptoSaaSBot",
PlatformFieldDescription: map[string]string{
"endpoint": "API Endpoint",
"account_id": "Account ID",
"secret_key": "Secret Key",
},
},
{
Platform: AppleIAP.String(),
PlatformUrl: "https://developer.apple.com/in-app-purchase/",
PlatformFieldDescription: map[string]string{
"product_ids": "Product IDs (comma separated)",
"key_id": "Key ID",
"issuer_id": "Issuer ID",
"private_key": "Private Key (.p8 content)",
"sandbox": "Sandbox Mode",
},
},
}
}