-
Notifications
You must be signed in to change notification settings - Fork 0
/
idpay.go
116 lines (94 loc) · 2.92 KB
/
idpay.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
package idpay
import (
"bytes"
"encoding/json"
"log"
"net/http"
"strconv"
)
// NewClient create new idpay client
func NewClient(apikey string, isTest bool) Client {
return Client{APIKEY: apikey, host: "https://api.idpay.ir/v1.1", isTestMode: isTest}
}
func (c *Client) SetHost(host string) {
c.host = host
}
// CreatePayment create payment link
func (c *Client) CreatePayment(orderId string, amount int64, callBack string, name string, phone string, mail string, desc string) CreatePaymentRes {
url := c.host + "/payment"
requestBody := CreatePaymentReq{
OrderId: orderId,
Amount: amount,
Callback: callBack,
Name: name,
Phone: phone,
Mail: mail,
Desc: desc,
}
var data bytes.Buffer
err := json.NewEncoder(&data).Encode(requestBody)
if err != nil {
log.Println(err)
return CreatePaymentRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
rq, err := http.NewRequest("POST", url, &data)
if err != nil {
log.Println(err)
return CreatePaymentRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
rq.Header.Set("Cache-Control", "no-cache")
rq.Header.Set("Content-Type", "application/json")
rq.Header.Set("X-API-KEY", c.APIKEY)
rq.Header.Set("X-SANDBOX", strconv.FormatBool(c.isTestMode))
rp, err := http.DefaultClient.Do(rq)
if err != nil {
log.Println(err)
return CreatePaymentRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
defer rp.Body.Close()
var response CreatePaymentRes
err = json.NewDecoder(rp.Body).Decode(&response)
if err != nil {
log.Println(err)
return CreatePaymentRes{ReqStatus: requestStatus{Success: true, Message: err.Error()}}
}
response.ReqStatus.Success = rp.StatusCode == http.StatusCreated
return response
}
// Verify verify payment
func (c *Client) Verify(id string, orderId string) VerifyRes {
url := c.host + "/payment/verify"
requestBody := VerifyReq{
OrderId: orderId,
Id: id,
}
var data bytes.Buffer
err := json.NewEncoder(&data).Encode(requestBody)
if err != nil {
log.Println(err)
return VerifyRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
rq, err := http.NewRequest("POST", url, &data)
if err != nil {
log.Println(err)
return VerifyRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
rq.Header.Set("Cache-Control", "no-cache")
rq.Header.Set("Content-Type", "application/json")
rq.Header.Set("X-API-KEY", c.APIKEY)
rq.Header.Set("X-SANDBOX", strconv.FormatBool(c.isTestMode))
rp, err := http.DefaultClient.Do(rq)
if err != nil {
log.Println(err)
return VerifyRes{ReqStatus: requestStatus{Success: false, Message: err.Error()}}
}
defer rp.Body.Close()
var response VerifyRes
err = json.NewDecoder(rp.Body).Decode(&response)
if err != nil {
log.Println(err)
return VerifyRes{ReqStatus: requestStatus{Success: true, Message: err.Error()}}
}
response.ReqStatus.Success = rp.StatusCode == http.StatusOK
return response
}