feat: payment pay

This commit is contained in:
zzw
2026-09-11 16:08:17 +08:00
parent f8c7419964
commit d9529a219d
33 changed files with 3108 additions and 89 deletions
@@ -0,0 +1,62 @@
package channel
import (
"fmt"
"sync"
pkgpay "lone-services/pkg/payment"
"lone-services/pkg/payment/alipay"
"lone-services/pkg/payment/bank"
wxchannel "lone-services/pkg/payment/wechat"
"lone-services/pkg/utils"
"lone-services/services/payment/internal/config"
)
var (
cacheMu sync.Mutex
cache = map[string]pkgpay.Channel{}
)
func Get(channelCode, clientCode string) (pkgpay.Channel, error) {
if channelCode == utils.StringEmpty {
return nil, pkgpay.ErrUnsupportedChannel
}
if clientCode == utils.StringEmpty {
clientCode = pkgpay.ClientMiniProgram
}
cacheKey := channelCode + ":" + clientCode
cacheMu.Lock()
if ch, ok := cache[cacheKey]; ok {
cacheMu.Unlock()
return ch, nil
}
cacheMu.Unlock()
ch, err := newChannel(channelCode, clientCode)
if err != nil {
return nil, err
}
cacheMu.Lock()
cache[cacheKey] = ch
cacheMu.Unlock()
return ch, nil
}
func newChannel(channelCode, clientCode string) (pkgpay.Channel, error) {
switch channelCode {
case pkgpay.ChannelWechat:
cfg, err := config.NewWechatPayConfig(clientCode)
if err != nil {
return nil, err
}
return wxchannel.NewChannel(cfg)
case pkgpay.ChannelAlipay:
return alipay.NewChannel(), nil
case pkgpay.ChannelBank:
return bank.NewChannel(), nil
default:
return nil, fmt.Errorf("%w: %s", pkgpay.ErrUnsupportedChannel, channelCode)
}
}