-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.clj
97 lines (83 loc) · 3.59 KB
/
api.clj
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
(ns payeer.api
(:require
[org.httpkit.client :as http]
[clojure.data.json :as json]))
(def url "https://payeer.com/ajax/api/api.php")
(def default-options
{:form-params {}})
(def creditionals (atom {}))
(defn auth [{:keys [account apiId apiPass] :as creditionals}]
(let [options (-> default-options
(assoc :form-params creditionals))
{:keys [body status error]} @(http/post url options)
data (json/read-str body :key-fn keyword)]
(when-not (= "0" (:auth_error data))
(throw (Exception. (-> data :errors json/write-str))))))
(defn set-creditionals! [{:keys [account apiId apiPass] :as data}]
(auth data)
(reset! creditionals data))
(defn request [url options]
(when (= {} @creditionals)
(throw (Exception. "Creditionals don't set. use `set-creditionals!` first")))
(let [options (assoc default-options :form-params
(merge (:form-params options) @creditionals))
{:keys [body status error]} @(http/post url options)
data (json/read-str body :key-fn keyword)]
; (println "r" body status error options data)
(when-not (= [] (:errors data))
(throw (Exception. (-> data :errors json/write-str))))
(identity data)))
(defn get-balance []
(let [options (assoc-in default-options [:form-params :action] "balance")
data (request url options)]
(:balance data)))
(defn get-payment-systems []
(let [options (assoc-in default-options [:form-params :action] "getPaySystems")
data (request url options)]
(:list data)))
(defn get-history []
(let [options (assoc-in default-options [:form-params :action] "history")
data (request url options)]
(:history data)))
(defmulti get-exchange-rate
(fn [type] (identity type)))
(defmethod get-exchange-rate :input [_]
(let [options (-> default-options
(assoc :form-params
(merge (:form-params default-options)
{:output "N"}))
(assoc-in [:form-params :action] "getExchangeRate"))
data (request url options)]
(:rate data)))
(defmethod get-exchange-rate :output [_]
(let [options (-> default-options
(assoc :form-params
(merge (:form-params default-options)
{:output "Y"}))
(assoc-in [:form-params :action] "getExchangeRate"))
data (request url options)]
(:rate data)))
(defn init-pay [payment-system-id amount currency account]
(let [options (-> default-options
(assoc :form-params
(merge (:form-params default-options)
{:ps payment-system-id
:curIn currency
:sumOut amount
:curOut currency
:param_ACCOUNT_NUMBER account}))
(assoc-in [:form-params :action] "initOutput"))
data (request url options)]
data))
(defn pay [payment-system-id amount currency account]
(let [options (-> default-options
(assoc :form-params
(merge (:form-params default-options)
{:ps payment-system-id
:curIn currency
:sumOut amount
:curOut currency
:param_ACCOUNT_NUMBER account}))
(assoc-in [:form-params :action] "output"))
data (request url options)]
data))