mirror of
https://github.com/plutov/paypal.git
synced 2025-01-23 02:11:02 +01:00
Fix #271
This commit is contained in:
parent
3713084b64
commit
5052fd4286
|
@ -2,7 +2,6 @@ package paypal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -46,38 +45,15 @@ func createRandomProduct(t *testing.T) Product {
|
||||||
// test the Lock and Unlock methods of the private mutex field
|
// test the Lock and Unlock methods of the private mutex field
|
||||||
// of Client structure.
|
// of Client structure.
|
||||||
func (c *Client) sendWithAuth(req *http.Request, v interface{}) error {
|
func (c *Client) sendWithAuth(req *http.Request, v interface{}) error {
|
||||||
// c.Lock()
|
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
// Note: Here we do not want to `defer c.Unlock()` because we need `c.Send(...)`
|
defer c.mu.Unlock()
|
||||||
// to happen outside of the locked section.
|
|
||||||
|
|
||||||
if c.mu.TryLock() {
|
|
||||||
// if the code is able to acquire a lock
|
|
||||||
// despite the mutex of c being locked, throw an error
|
|
||||||
err := errors.New("TryLock succeeded inside sendWithAuth with mutex locked")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if c.Token == nil || (!c.tokenExpiresAt.IsZero() && time.Until(c.tokenExpiresAt) < RequestNewTokenBeforeExpiresIn) {
|
if c.Token == nil || (!c.tokenExpiresAt.IsZero() && time.Until(c.tokenExpiresAt) < RequestNewTokenBeforeExpiresIn) {
|
||||||
// c.Token will be updated in GetAccessToken call
|
|
||||||
if _, err := c.GetAccessToken(req.Context()); err != nil {
|
if _, err := c.GetAccessToken(req.Context()); err != nil {
|
||||||
// c.Unlock()
|
|
||||||
c.mu.Unlock()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
req.Header.Set("Authorization", "Bearer "+c.Token.Token)
|
req.Header.Set("Authorization", "Bearer "+c.Token.Token)
|
||||||
// Unlock the client mutex before sending the request, this allows multiple requests
|
|
||||||
// to be in progress at the same time.
|
|
||||||
// c.Unlock()
|
|
||||||
c.mu.Unlock()
|
|
||||||
|
|
||||||
if !c.mu.TryLock() {
|
|
||||||
// if the code is unable to acquire a lock
|
|
||||||
// despite the mutex of c being unlocked, throw an error
|
|
||||||
err := errors.New("TryLock failed inside sendWithAuth with mutex unlocked")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
c.mu.Unlock() // undo changes from the previous TryLock
|
|
||||||
|
|
||||||
return c.Send(req, v)
|
return c.Send(req, v)
|
||||||
}
|
}
|
||||||
|
|
7
types.go
7
types.go
|
@ -483,14 +483,13 @@ type (
|
||||||
Links []Link `json:"links,omitempty"`
|
Links []Link `json:"links,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AuthorizeOrderResponse .
|
|
||||||
AuthorizeOrderResponse struct {
|
AuthorizeOrderResponse struct {
|
||||||
CreateTime *time.Time `json:"create_time,omitempty"`
|
CreateTime *time.Time `json:"create_time,omitempty"`
|
||||||
UpdateTime *time.Time `json:"update_time,omitempty"`
|
UpdateTime *time.Time `json:"update_time,omitempty"`
|
||||||
ID string `json:"id,omitempty"`
|
ID string `json:"id,omitempty"`
|
||||||
Status string `json:"status,omitempty"`
|
Status string `json:"status,omitempty"`
|
||||||
Intent string `json:"intent,omitempty"`
|
Intent string `json:"intent,omitempty"`
|
||||||
PurchaseUnits []PurchaseUnitRequest `json:"purchase_units,omitempty"`
|
PurchaseUnits []PurchaseUnit `json:"purchase_units,omitempty"`
|
||||||
Payer *PayerWithNameAndPhone `json:"payer,omitempty"`
|
Payer *PayerWithNameAndPhone `json:"payer,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,7 +825,6 @@ type (
|
||||||
Value string `json:"value"`
|
Value string `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PurchaseUnit struct
|
|
||||||
PurchaseUnit struct {
|
PurchaseUnit struct {
|
||||||
ReferenceID string `json:"reference_id"`
|
ReferenceID string `json:"reference_id"`
|
||||||
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
|
Amount *PurchaseUnitAmount `json:"amount,omitempty"`
|
||||||
|
@ -944,7 +942,8 @@ type (
|
||||||
|
|
||||||
// CapturedPayments has the amounts for a captured order
|
// CapturedPayments has the amounts for a captured order
|
||||||
CapturedPayments struct {
|
CapturedPayments struct {
|
||||||
Captures []CaptureAmount `json:"captures,omitempty"`
|
Autthorizations []Authorization `json:"authorizations,omitempty"`
|
||||||
|
Captures []CaptureAmount `json:"captures,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CapturedPurchaseItem are items for a captured order
|
// CapturedPurchaseItem are items for a captured order
|
||||||
|
|
Loading…
Reference in New Issue
Block a user