-
Notifications
You must be signed in to change notification settings - Fork 0
/
init.go
60 lines (50 loc) · 2.59 KB
/
init.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
package cdek_pay
import (
"context"
)
type InitRequest struct {
BaseRequest
PaymentOrder PaymentOrder `json:"payment_order"`
}
type PaymentOrder struct {
PayFor string `json:"pay_for"`
Currency string `json:"currency"`
PayAmount int `json:"pay_amount"`
ReceiptDetails []ReceiptItem `json:"receipt_details"`
LinkLifeTime *int `json:"link_life_time,omitempty"` // время жизни платежной ссылки в минутах
UserPhone *string `json:"user_phone,omitempty"` // номер телефона плательщика
UserEmail *string `json:"user_email,omitempty"` // email адрес плательщика
ReturnURLSuccess *string `json:"return_url_success,omitempty"` // URL для возврата после успешного платежа
ReturnURLFail *string `json:"return_url_fail,omitempty"` // URL для возврата в случае ошибки
PayForDetails *map[string]string `json:"pay_for_details,omitempty"` // детальная информация о платеже
QRLifeTime *int `json:"qr_life_time"` // время жизни QR в минутах
}
type ReceiptItem struct {
ID string `json:"id"` // Идентификатор товара (уникальный в рамках одного чека)
Name string `json:"name"` // Наименование товара
Price int `json:"price"` // Цена за единицу товара в копейках
Quantity float64 `json:"quantity"` // Количество единиц товара, до 2 знаков после запятой
Sum int `json:"sum"` // Сумма в копейках
PaymentObject int `json:"payment_object"` // Признак предмета расчета
}
func (i *InitRequest) GetValuesForSignature() map[string]interface{} {
return FlattenStructToMap(i.PaymentOrder, "")
}
type InitResponse struct {
OrderId int `json:"order_id"`
AccessKey string `json:"access_key"`
Link string `json:"link"`
}
func (c *Client) InitPayment(ctx context.Context, request *InitRequest) (*InitResponse, error) {
response, err := c.PostRequestWithContext(ctx, "payment_orders", request)
if err != nil {
return nil, err
}
defer response.Body.Close()
var res InitResponse
err = c.decodeResponse(response, &res)
if err != nil {
return nil, err
}
return &res, nil
}