diff --git a/internal/providers/braintree.go b/internal/providers/braintree.go index 8136dbd..0aa10f8 100644 --- a/internal/providers/braintree.go +++ b/internal/providers/braintree.go @@ -52,6 +52,8 @@ func (b *BraintreeProvider) Charge(ctx context.Context, request *domain.Payment) if err != nil { return nil, err } + defer response.Body.Close() + return b.responseCharge(response) } diff --git a/internal/providers/provider.go b/internal/providers/provider.go index 95dd76a..2824cef 100644 --- a/internal/providers/provider.go +++ b/internal/providers/provider.go @@ -39,7 +39,10 @@ func (p *UseProviders) Payment(ctx context.Context, payment *domain.Payment) (*d attempts := 0 for _, provider := range p.providers { - dataCh, errCh := p.charge(ctx, payment, provider) + requestCtx, cancel := context.WithTimeout(ctx, p.timeout) + defer cancel() + + dataCh, errCh := p.charge(requestCtx, payment, provider) select { case data := <-dataCh: p.logger.Debug("[Payment] Received request successfully", @@ -60,8 +63,12 @@ func (p *UseProviders) Payment(ctx context.Context, payment *domain.Payment) (*d zap.String("provider", provider.GetName()), zap.Int("attempt", attempts)) + cancel() + err = errors.New("Timeout") continue + case <-ctx.Done(): + return nil, ctx.Err() } } diff --git a/internal/providers/stripe.go b/internal/providers/stripe.go index 4fbfc68..340be61 100644 --- a/internal/providers/stripe.go +++ b/internal/providers/stripe.go @@ -48,6 +48,7 @@ func (b *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (* if err != nil { return nil, err } + defer response.Body.Close() return b.responseCharge(response) }