86 lines
2.6 KiB
Go
86 lines
2.6 KiB
Go
package wechat
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/ArtisanCloud/PowerWeChat/v3/src/kernel"
|
|
"github.com/ArtisanCloud/PowerWeChat/v3/src/officialAccount"
|
|
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment"
|
|
"github.com/break/junhong_cmp_fiber/pkg/config"
|
|
"github.com/redis/go-redis/v9"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// NewRedisCache 使用项目现有的 Redis 客户端创建 PowerWeChat 的 Redis Cache
|
|
func NewRedisCache(rdb *redis.Client) kernel.CacheInterface {
|
|
return kernel.NewRedisClient(&kernel.UniversalOptions{
|
|
Addrs: []string{rdb.Options().Addr},
|
|
Password: rdb.Options().Password,
|
|
DB: rdb.Options().DB,
|
|
})
|
|
}
|
|
|
|
// NewOfficialAccountApp 创建微信公众号应用实例
|
|
func NewOfficialAccountApp(cfg *config.Config, cache kernel.CacheInterface, logger *zap.Logger) (*officialAccount.OfficialAccount, error) {
|
|
oaCfg := cfg.Wechat.OfficialAccount
|
|
if oaCfg.AppID == "" || oaCfg.AppSecret == "" {
|
|
return nil, fmt.Errorf("微信公众号配置不完整:缺少 AppID 或 AppSecret")
|
|
}
|
|
|
|
userConfig := &officialAccount.UserConfig{
|
|
AppID: oaCfg.AppID,
|
|
Secret: oaCfg.AppSecret,
|
|
Cache: cache,
|
|
}
|
|
|
|
// 可选配置:消息验证 Token 和 AESKey
|
|
if oaCfg.Token != "" {
|
|
userConfig.Token = oaCfg.Token
|
|
}
|
|
if oaCfg.AESKey != "" {
|
|
userConfig.AESKey = oaCfg.AESKey
|
|
}
|
|
|
|
app, err := officialAccount.NewOfficialAccount(userConfig)
|
|
if err != nil {
|
|
logger.Error("创建微信公众号应用失败", zap.Error(err))
|
|
return nil, fmt.Errorf("创建微信公众号应用失败: %w", err)
|
|
}
|
|
|
|
logger.Info("微信公众号应用初始化成功", zap.String("app_id", oaCfg.AppID))
|
|
return app, nil
|
|
}
|
|
|
|
// NewPaymentApp 创建微信支付应用实例
|
|
func NewPaymentApp(cfg *config.Config, cache kernel.CacheInterface, logger *zap.Logger) (*payment.Payment, error) {
|
|
payCfg := cfg.Wechat.Payment
|
|
if payCfg.AppID == "" || payCfg.MchID == "" {
|
|
return nil, fmt.Errorf("微信支付配置不完整:缺少 AppID 或 MchID")
|
|
}
|
|
|
|
userConfig := &payment.UserConfig{
|
|
AppID: payCfg.AppID,
|
|
MchID: payCfg.MchID,
|
|
MchApiV3Key: payCfg.APIV3Key,
|
|
Key: payCfg.APIV2Key,
|
|
CertPath: payCfg.CertPath,
|
|
KeyPath: payCfg.KeyPath,
|
|
SerialNo: payCfg.SerialNo,
|
|
NotifyURL: payCfg.NotifyURL,
|
|
HttpDebug: payCfg.HttpDebug,
|
|
Cache: cache,
|
|
}
|
|
|
|
app, err := payment.NewPayment(userConfig)
|
|
if err != nil {
|
|
logger.Error("创建微信支付应用失败", zap.Error(err))
|
|
return nil, fmt.Errorf("创建微信支付应用失败: %w", err)
|
|
}
|
|
|
|
logger.Info("微信支付应用初始化成功",
|
|
zap.String("app_id", payCfg.AppID),
|
|
zap.String("mch_id", payCfg.MchID),
|
|
)
|
|
return app, nil
|
|
}
|