package wechat import ( "fmt" "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel" "github.com/ArtisanCloud/PowerWeChat/v3/src/officialAccount" "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 }