feat: payment pay
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user