forked from stripe/stripe-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
150 lines (114 loc) · 3.9 KB
/
client.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// Package bitcoinreceiver provides the /bitcoin/receivers APIs.
package bitcoinreceiver
import (
"fmt"
"net/url"
"strconv"
stripe "github.com/stripe/stripe-go"
)
// Client is used to invoke /bitcoin/receivers APIs.
type Client struct {
B stripe.Backend
Key string
}
// New POSTs new bitcoin receivers.
// For more details see https://stripe.com/docs/api/#create_bitcoin_receiver
func New(params *stripe.BitcoinReceiverParams) (*stripe.BitcoinReceiver, error) {
return getC().New(params)
}
func (c Client) New(params *stripe.BitcoinReceiverParams) (*stripe.BitcoinReceiver, error) {
body := &url.Values{
"amount": {strconv.FormatUint(params.Amount, 10)},
"currency": {string(params.Currency)},
}
if len(params.Desc) > 0 {
body.Add("description", params.Desc)
}
if len(params.Email) > 0 {
body.Add("email", params.Email)
}
token := c.Key
params.AppendTo(body)
receiver := &stripe.BitcoinReceiver{}
err := c.B.Call("POST", "/bitcoin/receivers", token, body, ¶ms.Params, receiver)
return receiver, err
}
// Get returns the details of a bitcoin receiver.
// For more details see https://stripe.com/docs/api/#retrieve_bitcoin_receiver
func Get(id string, params *stripe.BitcoinReceiverParams) (*stripe.BitcoinReceiver, error) {
return getC().Get(id, params)
}
func (c Client) Get(id string, params *stripe.BitcoinReceiverParams) (*stripe.BitcoinReceiver, error) {
var commonParams *stripe.Params
if params != nil {
commonParams = ¶ms.Params
}
bitcoinReceiver := &stripe.BitcoinReceiver{}
err := c.B.Call("GET", "/bitcoin/receivers/"+id, c.Key, nil, commonParams, bitcoinReceiver)
return bitcoinReceiver, err
}
// Update updates a bitcoin receiver's properties.
// For more details see https://stripe.com/docs/api#update_bitcoin_receiver.
func Update(id string, params *stripe.BitcoinReceiverUpdateParams) (*stripe.BitcoinReceiver, error) {
return getC().Update(id, params)
}
func (c Client) Update(id string, params *stripe.BitcoinReceiverUpdateParams) (*stripe.BitcoinReceiver, error) {
body := &url.Values{}
if len(params.Desc) > 0 {
body.Add("description", params.Desc)
}
if len(params.Email) > 0 {
body.Add("email", params.Email)
}
if len(params.RefundAddr) > 0 {
body.Add("refund_address", params.RefundAddr)
}
receiver := &stripe.BitcoinReceiver{}
var err error
err = c.B.Call("POST", fmt.Sprintf("/bitcoin/receivers/%v", id), c.Key, body, ¶ms.Params, receiver)
return receiver, err
}
// List returns a list of bitcoin receivers.
// For more details see https://stripe.com/docs/api/#list_bitcoin_receivers
func List(params *stripe.BitcoinReceiverListParams) *Iter {
return getC().List(params)
}
func (c Client) List(params *stripe.BitcoinReceiverListParams) *Iter {
type receiverList struct {
stripe.ListMeta
Values []*stripe.BitcoinReceiver `json:"data"`
}
var body *url.Values
var lp *stripe.ListParams
if params != nil {
body = &url.Values{}
body.Add("filled", strconv.FormatBool(!params.NotFilled))
body.Add("active", strconv.FormatBool(!params.NotActive))
body.Add("uncaptured_funds", strconv.FormatBool(params.Uncaptured))
params.AppendTo(body)
lp = ¶ms.ListParams
}
return &Iter{stripe.GetIter(lp, body, func(b url.Values) ([]interface{}, stripe.ListMeta, error) {
list := &receiverList{}
err := c.B.Call("GET", "/bitcoin/receivers", c.Key, &b, nil, list)
ret := make([]interface{}, len(list.Values))
for i, v := range list.Values {
ret[i] = v
}
return ret, list.ListMeta, err
})}
}
// Iter is an iterator for lists of BitcoinReceivers.
// The embedded Iter carries methods with it;
// see its documentation for details.
type Iter struct {
*stripe.Iter
}
// BitcoinReceiver returns the most recent BitcoinReceiver
// visited by a call to Next.
func (i *Iter) BitcoinReceiver() *stripe.BitcoinReceiver {
return i.Current().(*stripe.BitcoinReceiver)
}
func getC() Client {
return Client{stripe.GetBackend(stripe.APIBackend), stripe.Key}
}