-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPayout.go
135 lines (107 loc) · 3.43 KB
/
Payout.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
package b2binpay
import (
"bytes"
"encoding/json"
"fmt"
"github.com/google/uuid"
"io"
"net/http"
)
func (c *Client) GetPayout(payoutID string) (*Payout, error) {
url := fmt.Sprintf("%spayout/%s", c.APIAddress, payoutID)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+c.AccessToken)
req.Header.Set("Content-Type", contentType)
client := http.DefaultClient
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("unexpected response status code: %d", resp.StatusCode)
}
var payoutResponse PayoutResponse
err = json.NewDecoder(resp.Body).Decode(&payoutResponse)
if err != nil {
return nil, err
}
return &payoutResponse.Data, nil
}
func (c *Client) CreatePayout(payout PayoutResponse) (*PayoutResponse, error) {
// Генерация уникального idempotency ключа
idempotencyKey := generateUUID()
// Создание HTTP запроса
url := fmt.Sprintf("%spayout/", c.APIAddress) // Замените baseURL на фактическую базовую URL
requestBodyBytes, err := json.Marshal(payout)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBodyBytes))
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+c.AccessToken)
req.Header.Set("Content-Type", contentType)
req.Header.Set("Idempotency-Key", idempotencyKey)
// Отправка HTTP запроса
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Обработка HTTP ответа
if resp.StatusCode != http.StatusCreated {
// Возникла ошибка при создании платежа
return nil, fmt.Errorf("failed to create payout: %s", resp.Status)
}
// Чтение и декодирование JSON ответа
var payoutResponse PayoutResponse
err = json.NewDecoder(resp.Body).Decode(&payoutResponse)
if err != nil {
return nil, err
}
return &payoutResponse, nil
}
func generateUUID() string {
return uuid.New().String()
}
func (c *Client) CalculatePayout(payout PayoutResponse) (*PayoutCalculationResponse, error) {
// Создание HTTP запроса
url := fmt.Sprintf("%spayout/calculate/", c.APIAddress) // Замените baseURL на фактическую базовую URL
requestBodyBytes, err := json.Marshal(payout)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBodyBytes))
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+c.AccessToken)
req.Header.Set("Content-Type", contentType)
// Отправка HTTP запроса
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Обработка HTTP ответа
if resp.StatusCode != http.StatusCreated {
// Возникла ошибка при создании платежа
body, _ := io.ReadAll(resp.Body)
fmt.Println("ERR CALC ", string(body))
return nil, fmt.Errorf("failed to create payout: %s", resp.Status)
}
// Чтение и декодирование JSON ответа
var payoutCalculation PayoutCalculationResponse
err = json.NewDecoder(resp.Body).Decode(&payoutCalculation)
if err != nil {
return nil, err
}
return &payoutCalculation, nil
}