diff --git a/plugins/weixin_cpn/internal/util.go b/plugins/weixin_cpn/internal/util.go index 638577f..a5b5a5e 100644 --- a/plugins/weixin_cpn/internal/util.go +++ b/plugins/weixin_cpn/internal/util.go @@ -7,9 +7,31 @@ import ( "github.com/wechatpay-apiv3/wechatpay-go/core/option" "github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons" "github.com/wechatpay-apiv3/wechatpay-go/utils" + "sync" ) +var instance *cashcoupons.CouponApiService +var once sync.Once +var onceError error +var onceErrorMutex sync.Mutex + func getSrv(ctx context.Context, config *Config) (*cashcoupons.CouponApiService, error) { + onceErrorMutex.Lock() + defer onceErrorMutex.Unlock() + + if onceError != nil { + instance = nil + onceError = nil + } + + once.Do(func() { + instance, onceError = newInstance(ctx, config) + }) + + return instance, onceError +} + +func newInstance(ctx context.Context, config *Config) (*cashcoupons.CouponApiService, error) { mchPrivateKey, err := utils.LoadPrivateKeyWithPath(config.PrivateKeyPath) if err != nil { return nil, fmt.Errorf("load merchant private key error:%v", err) diff --git a/plugins/weixin_cpn/internal/weixin_cpn_test.go b/plugins/weixin_cpn/internal/weixin_cpn_test.go index 4fd9cac..ddeed96 100644 --- a/plugins/weixin_cpn/internal/weixin_cpn_test.go +++ b/plugins/weixin_cpn/internal/weixin_cpn_test.go @@ -63,7 +63,7 @@ func TestQuery(t *testing.T) { return } fmt.Printf("%+v \n", got) - //assert.Equal(t, int(proto.Status_SUCCESS), int(got.Result.Status)) + assert.Equal(t, int(proto.Status_SUCCESS), int(got.Result.Status)) }) }