diff --git a/README.md b/README.md index 80829bb..ff616e7 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Currently supports **v2** only, if you want to use **v1**, use **v1.1.4** git ta * GET /v2/payments/refund/**ID** * POST /v2/checkout/orders * GET /v2/checkout/orders/**ID** + * PATCH /v2/checkout/orders/**ID** * POST /v2/checkout/orders/**ID**/authorize * POST /v2/checkout/orders/**ID**/capture * POST /v2/payments/billing-plans @@ -115,22 +116,22 @@ order, err := c.GetOrder("O-4J082351X3132253H") order, err := c.CreateOrder(paypalsdk.OrderIntentCapture, []paypalsdk.PurchaseUnitRequest{paypalsdk.PurchaseUnitRequest{ReferenceID: "ref-id", Amount: paypalsdk.Amount{Total: "7.00", Currency: "USD"}}}) ``` +### Update Order by ID + +```go +order, err := c.UpdateOrder("O-4J082351X3132253H", []paypalsdk.PurchaseUnitRequest{}) +``` + ### Authorize Order ```go -auth, err := c.AuthorizeOrder(orderID, paypalsdk.PaymentSource{}) +auth, err := c.AuthorizeOrder(orderID, paypalsdk.AuthorizeOrderRequest{}) ``` ### Capture Order ```go -capture, err := c.CaptureOrder(orderID, paypalsdk.PaymentSource{}) -``` - -### Void Order - -```go -order, err := c.VoidOrder(orderID) +capture, err := c.CaptureOrder(orderID, paypalsdk.CaptureOrderRequest{}) ``` ### Identity diff --git a/order.go b/order.go index b6beaab..d0ddfbe 100644 --- a/order.go +++ b/order.go @@ -40,12 +40,29 @@ func (c *Client) CreateOrder(intent string, purchaseUnits []PurchaseUnitRequest, return order, nil } -// AuthorizeOrder - Use this call to authorize an order. +// UpdateOrder updates the order by ID +// Endpoint: PATCH /v2/checkout/orders/ID +func (c *Client) UpdateOrder(orderID string, purchaseUnits []PurchaseUnitRequest) (*Order, error) { + order := &Order{} + + req, err := c.NewRequest("PATCH", fmt.Sprintf("%s%s%s", c.APIBase, "/v2/checkout/orders/", orderID), purchaseUnits) + if err != nil { + return order, err + } + + if err = c.SendWithAuth(req, order); err != nil { + return order, err + } + + return order, nil +} + +// AuthorizeOrder - https://developer.paypal.com/docs/api/orders/v2/#orders_authorize // Endpoint: POST /v2/checkout/orders/ID/authorize -func (c *Client) AuthorizeOrder(orderID string, paymentSource PaymentSource) (*Authorization, error) { +func (c *Client) AuthorizeOrder(orderID string, authorizeOrderRequest AuthorizeOrderRequest) (*Authorization, error) { auth := &Authorization{} - req, err := c.NewRequest("POST", fmt.Sprintf("%s%s", c.APIBase, "/v2/checkout/orders/"+orderID+"/authorize"), paymentSource) + req, err := c.NewRequest("POST", fmt.Sprintf("%s%s", c.APIBase, "/v2/checkout/orders/"+orderID+"/authorize"), authorizeOrderRequest) if err != nil { return auth, err } @@ -57,12 +74,12 @@ func (c *Client) AuthorizeOrder(orderID string, paymentSource PaymentSource) (*A return auth, nil } -// CaptureOrder - Use this call to capture a payment on an order. +// CaptureOrder - https://developer.paypal.com/docs/api/orders/v2/#orders_capture // Endpoint: POST /v2/checkout/orders/ID/capture -func (c *Client) CaptureOrder(orderID string, paymentSource PaymentSource) (*Capture, error) { +func (c *Client) CaptureOrder(orderID string, captureOrderRequest CaptureOrderRequest) (*Capture, error) { capture := &Capture{} - req, err := c.NewRequest("POST", fmt.Sprintf("%s%s", c.APIBase, "/v2/checkout/orders/"+orderID+"/capture"), paymentSource) + req, err := c.NewRequest("POST", fmt.Sprintf("%s%s", c.APIBase, "/v2/checkout/orders/"+orderID+"/capture"), captureOrderRequest) if err != nil { return capture, err } diff --git a/types.go b/types.go index d8e0e7b..008d6dc 100644 --- a/types.go +++ b/types.go @@ -126,6 +126,17 @@ type ( ProtectionEligibilityType string `json:"protection_eligibility_type,omitempty"` } + // AuthorizeOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_authorize + AuthorizeOrderRequest struct { + PaymentSource *PaymentSource `json:"payment_source"` + VaultOnCapture bool `json:"vault_on_capture"` + } + + // CaptureOrderRequest - https://developer.paypal.com/docs/api/orders/v2/#orders_capture + CaptureOrderRequest struct { + PaymentSource *PaymentSource `json:"payment_source"` + } + // BatchHeader struct BatchHeader struct { Amount *AmountPayout `json:"amount,omitempty"`