diff --git a/plugins/weixin_cpn/internal/util.go b/plugins/weixin_cpn/internal/util.go index a5b5a5e..3e41d8d 100644 --- a/plugins/weixin_cpn/internal/util.go +++ b/plugins/weixin_cpn/internal/util.go @@ -10,25 +10,23 @@ import ( "sync" ) -var instance *cashcoupons.CouponApiService var once sync.Once -var onceError error -var onceErrorMutex sync.Mutex +var errorMutex sync.RWMutex -func getSrv(ctx context.Context, config *Config) (*cashcoupons.CouponApiService, error) { - onceErrorMutex.Lock() - defer onceErrorMutex.Unlock() +var instanceMap = make(map[string]*cashcoupons.CouponApiService) +var errorMap = make(map[string]error) - if onceError != nil { - instance = nil - onceError = nil +func getSrv(ctx context.Context, c *Config) (*cashcoupons.CouponApiService, error) { + errorMutex.Lock() + defer errorMutex.Unlock() + if errorMap[c.MchID] != nil { + instanceMap[c.MchID] = nil + errorMap[c.MchID] = nil } - once.Do(func() { - instance, onceError = newInstance(ctx, config) + instanceMap[c.MchID], errorMap[c.MchID] = newInstance(ctx, c) }) - - return instance, onceError + return instanceMap[c.MchID], errorMap[c.MchID] } func newInstance(ctx context.Context, config *Config) (*cashcoupons.CouponApiService, error) {