-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathuvipay.js
212 lines (194 loc) · 5.48 KB
/
uvipay.js
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
const querystring = require('querystring');
const axios = require('axios');
const apiClient = axios.create({
baseURL: 'https://api.uviba.com/pay/v1/',
timeout: 120 * 1000
});
const apiDefError = {
status: false,
error: {
message: 'Sorry, some error happend',
code: 'server_response',
type: 'request'
}
};
var UviPay = function (privateKey) {
this.setPrivateKey(privateKey);
}
/**
* Create uvipay instance
* @param {String} privateKey Get your key from https://pay.uviba.com/dashboard/#/api
* ```javascript
* var uvipay = require('uvipay')('...');
* ...
* uvipay.charge({ ... });
* ```
*/
var __uvipay = function (privateKey) { return new UviPay(privateKey); }
/**
* UviPay class
* ```javascript
* var UviPay = require('uvipay').UviPay;
* ...
* var instance1 = new UviPay('...');
* instance1.charge({ ... });
* ```
*/
__uvipay.UviPay = UviPay;
module.exports = __uvipay;
/**
* Send request to uviba api server
* @param {String} path Url path to send request
* @param {Object} data Request parameters
* @returns {Promise<Object>} Response
*/
UviPay.prototype.request = function (path, data) {
return new Promise((resolve, reject) => {
apiClient.post(path, querystring.stringify(data || {}), {
auth: {
username: this.privateKey,
password: ''
},
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
})
.then((response) => {
if (typeof response.data == 'string') {
try {
var json = JSON.parse(response.data);
if (typeof json.status != 'undefined') {
resolve(json);
} else {
resolve(apiDefError);
}
} catch (e) {
resolve(apiDefError);
}
} else if (typeof response.data == 'object' && typeof response.data.status != 'undefined') {
resolve(response.data);
} else {
resolve(apiDefError);
}
})
.catch((error_response) => {
//console.log(response);
response=error_response.response;
if (typeof response.data == 'string') {
try {
var json = JSON.parse(response.data);
if (typeof json.status != 'undefined') {
resolve(json);
} else {
resolve(apiDefError);
}
} catch (e) {
resolve(apiDefError);
}
} else if (typeof response.data == 'object' && typeof response.data.status != 'undefined') {
resolve(response.data);
} else {
resolve(apiDefError);
}
});
});
}
/**
* Charge customer's credit card
* @param {Object} data Request parameters
*/
UviPay.prototype.charge = function (data) {
return this.request('/charges', data);
}
/**
* Set API Private Key
* @param {String} privateKey parameters
*/
UviPay.prototype.setApiKey = function (privateKey){
this.setPrivateKey(privateKey);
}
/**
* Set API Private Key
* @param {String} privateKey parameters
*/
UviPay.prototype.setPrivateKey = function (privateKey){
if (privateKey.length < 20 && privateKey.indexOf('sk_') !== 0) {
throw new Error('Correct private key is required to initialize UviPay client');
}
this.privateKey = privateKey;
}
/**
* Refund pervious charge
* @param {String} charge_id Charge id token
* @param {Object} data Request parameters
*/
UviPay.prototype.refund = function (charge_id, data) {
data = data || {};
if (typeof charge_id == 'object') {
Object.assign(data, charge_id);
} else {
data.charge_id = charge_id;
}
return this.request('/refunds', data);
}
/**
* Get your current balance
* @param {Object} data Request parameters
*/
UviPay.prototype.get_balance = function (data) {
return this.request('/balance', data);
}
/**
* Cancel running subscribtion
* @param {String} sub_id Subscription id token
* @param {Object} data Request parameters
*/
UviPay.prototype.cancel_subscription = function (sub_id, data) {
return this.request(`/subscriptions/${sub_id}?action=delete`, data);
}
/**
* Create link and put money in it
* @param {Number} amount Amount to send
* @param {Object} data Request parameters
*/
UviPay.prototype.create_paylink = function (amount, data) {
data = data || {};
if (typeof amount == 'object') {
Object.assign(data, amount);
} else {
data.amount = amount;
}
return this.request('/transfers?action=create_paylink', data);
}
/**
* Send payment to specified email & account
* @param {Number} amount Amount to send
* @param {Object} data Request parameters
*/
UviPay.prototype.send_payment = function (amount, data) {
data = data || {};
if (typeof amount == 'object') {
Object.assign(data, amount);
} else {
data.amount = amount;
}
return this.request('/transfers?action=send_payment', data);
}
/**
* Reverse sent payment
* @param {Object} data Request parameters
*/
UviPay.prototype.reverse_payment = function (data) {
return this.request('/transfers?action=take_payment_back', data);
}
/**
* Verify sent webhook request
* @param {String} req_id Request id that sent to the webserver on webhook request
* @param {Object} data Request parameters
*/
UviPay.prototype.verify_webhook = function (req_id, data) {
return this.request(`/webhooks/?action=verify&request_id=${req_id}`,
typeof data == 'object' ? data : {
verify_for: data
});
}