forked from Fakerr/go-paddle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
refund_payment.go
59 lines (50 loc) · 1.56 KB
/
refund_payment.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package paddle
import (
"context"
"net/http"
)
// RefundPaymentService handles communication with the payments refund related
// methods of the Paddle API.
//
// Paddle API docs: https://developer.paddle.com/api-reference/product-api/payments/
type RefundPaymentService service
type RefundPaymentResponse struct {
Success bool `json:"success"`
Response *struct {
RefundRequestID *int `json:"refund_request_id"`
} `json:"response"`
}
type RefundPayment struct {
OrderID string `url:"order_id,omitempty"`
Amount float64 `url:"amount,omitempty"`
Reason string `url:"reason,omitempty"`
}
// RefundPaymentOptions specifies the optional parameters to the
// RefundPayment.Refund method.
type RefundPaymentOptions struct {
Amount float64
Reason string
}
// Request a refund for a one-time or subscription payment, either in full or partial
//
// Paddle API docs: https://developer.paddle.com/api-reference/product-api/payments/refundpayment
func (s *RefundPaymentService) Refund(ctx context.Context, orderID string, options *RefundPaymentOptions) (*int, *http.Response, error) {
u := "2.0/payment/refund"
refund := &RefundPayment{
OrderID: orderID,
}
if options != nil {
refund.Amount = options.Amount
refund.Reason = options.Reason
}
req, err := s.client.NewRequest("POST", u, refund)
if err != nil {
return nil, nil, err
}
refundPaymentsResponse := new(RefundPaymentResponse)
response, err := s.client.Do(ctx, req, refundPaymentsResponse)
if err != nil {
return nil, response, err
}
return refundPaymentsResponse.Response.RefundRequestID, response, nil
}