feat(v2): 配置驱动注册三渠道 adapter + crypto 真 adapter 全链 e2e(下单→查单→入账→webhook)
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
// Package providerbuild is the *only* place that imports every concrete
|
||||
// provider adapter package alongside internal/provider — it exists precisely
|
||||
// so gateway/provider's core stays adapter-neutral (see internal/provider's
|
||||
// package doc). Only main calls into this package.
|
||||
//
|
||||
// It cannot live inside internal/provider itself: each adapter package
|
||||
// (alipay/crypto/stripe) imports internal/provider for the shared
|
||||
// CreateRequest/Session/Capabilities types, so internal/provider importing
|
||||
// them back would be a Go import cycle. This package sits one level up the
|
||||
// dependency graph instead: providerbuild -> {provider, alipay, crypto, stripe},
|
||||
// nothing imports providerbuild back.
|
||||
package providerbuild
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
sw "github.com/smartwalle/alipay/v3"
|
||||
stripeclient "github.com/stripe/stripe-go/v79/client"
|
||||
|
||||
"github.com/wangjia/pay/internal/accounts"
|
||||
"github.com/wangjia/pay/internal/provider"
|
||||
"github.com/wangjia/pay/internal/provider/alipay"
|
||||
"github.com/wangjia/pay/internal/provider/crypto"
|
||||
"github.com/wangjia/pay/internal/provider/stripe"
|
||||
)
|
||||
|
||||
// BuildRegistry 据 enabled 账户装配注册表:有 enabled 账户且凭证齐备的渠道才 Register。
|
||||
// 缺凭证只跳过该渠道(log,不 fatal)——允许只上线部分渠道;fake adapter 从不在此注册。
|
||||
func BuildRegistry(accts *accounts.Registry) *provider.Registry {
|
||||
reg := provider.NewRegistry()
|
||||
|
||||
// crypto:整渠道一个 adapter,多地址=多账户(P5 地址池路由前取首个 enabled)。
|
||||
if len(accts.EnabledFor("crypto", "")) > 0 {
|
||||
reg.Register(crypto.New(accts))
|
||||
log.Println("[providers] crypto 已注册")
|
||||
}
|
||||
|
||||
// alipay:首个 enabled 账户的 env 凭证 → *alipay.Client。
|
||||
if as := accts.EnabledFor("alipay", ""); len(as) > 0 {
|
||||
a := as[0]
|
||||
appID := accts.Credential(a.AccountID, "APP_ID")
|
||||
appPriv := accts.Credential(a.AccountID, "APP_PRIVATE_KEY")
|
||||
aliPub := accts.Credential(a.AccountID, "ALIPAY_PUBLIC_KEY")
|
||||
prod := accts.Credential(a.AccountID, "PRODUCTION") == "1"
|
||||
if appID == "" || appPriv == "" || aliPub == "" {
|
||||
log.Printf("[providers] alipay 账户 %s 凭证不全,跳过", a.AccountID)
|
||||
} else if c, err := sw.New(appID, appPriv, prod); err != nil {
|
||||
log.Printf("[providers] alipay client 构建失败: %v", err)
|
||||
} else if err := c.LoadAliPayPublicKey(aliPub); err != nil {
|
||||
log.Printf("[providers] alipay 加载公钥失败: %v", err)
|
||||
} else {
|
||||
reg.Register(alipay.New(c))
|
||||
log.Println("[providers] alipay 已注册")
|
||||
}
|
||||
}
|
||||
|
||||
// stripe:首个 enabled 账户的 env 凭证 → *client.API。
|
||||
if ss := accts.EnabledFor("stripe", ""); len(ss) > 0 {
|
||||
s := ss[0]
|
||||
key := accts.Credential(s.AccountID, "SECRET_KEY")
|
||||
wh := accts.Credential(s.AccountID, "WEBHOOK_SECRET")
|
||||
if key == "" || wh == "" {
|
||||
log.Printf("[providers] stripe 账户 %s 凭证不全,跳过", s.AccountID)
|
||||
} else {
|
||||
sc := stripeclient.New(key, nil)
|
||||
reg.Register(stripe.New(sc, wh))
|
||||
log.Println("[providers] stripe 已注册")
|
||||
}
|
||||
}
|
||||
|
||||
return reg
|
||||
}
|
||||
Reference in New Issue
Block a user