pulsa.py
5.25 KB
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
from opensipkd.pasar.models import PartnerProduk
import requests
import xmltodict
from agratek.api.merchant.tools import JsonRpcError
from agratek.api.merchant.views.vsi import Vendor as VendorClass, vsi_status
import logging
log = logging.getLogger(__name__)
# todo: result harus distandarisasi
class Vendor(VendorClass):
def pars_data(self, data):
"""
<status>SUCCESS</status>
<rc>0000</rc>
<rcm>0000</rcm>
<text>[0] Pembayaran Sukses</text>
<date>Isi pulsa TN10 berhasil untuk nomor 628527778889 sebesar 10.000, refnum F148919BB5F4093A0F40000000000000 pada tgl 17/04/17 15:32</date>
<refnum>2017-04-17 15:40:28</refnum>
<voucherid>4A61D574138A2D6B4B6 </voucherid>
<destnum>TN10</destnum>
<nominal>10000</nominal>
<serial>4A61D574138A2D6B4B6 </serial>
:return:
"""
code = "rc" in data and int(data["rc"]) or 0
self.status = vsi_status[str(code)]["status"]
status = self.status == -3 and "FAILED" or "PENDING"
if status == "PENDING":
code = 68
if self.status>-3:
product_id = self.invoice_det.produk.id
partner_id = self.invoice_det.h2h_ar_invoice.customer_id
discount = PartnerProduk.get_discount(partner_id, product_id)
harga = self.vendor_produk.produk.harga
self.status = 1
status = "status" in data and data["status"] or ""
if not harga:
raise JsonRpcError()
else:
discount = 0
harga = 0
result = dict(
status=status,
code=code,
message="rcm" in data \
and (data["rcm"] == "00000" and "SUCCESS" or data["rcm"]) \
or status,
serial_number="serialnumber" in data and data["serialnumber"] or "",
subtotal=int(harga),
discount=int(discount),
total = int(harga-discount)
)
return result
def inquiry(self):
params = self.get_params(cmd='INQ', modul='ISI')
params["tujuan"] = self.id_pel
params["voucherid"] = self.vendor_produk.kode
self.request = params
self.save_log('inquiry')
log.info("Request: %s %s" % (self.url, self.request))
try:
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = dict(xmltodict.parse(result.text)["root"])
else:
data = dict(code=result.status_code,
message=result.text)
self.response = data
log.info("Response: %s" % (data))
except requests.exceptions.RequestException as e:
data = dict(code=e.errno,
message=e.strerror)
self.result = self.pars_data(data)
log.info("Result: %s" % (self.result))
self.save_log('inquiry')
return self.result
def payment(self):
params = self.get_params(cmd='PAY', modul='ISI')
params["tujuan"] = self.id_pel
params["voucherid"] = self.vendor_produk.kode
self.request = params
log.info("Payment Request: %s" % (params))
try:
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = dict(xmltodict.parse(result.text)["root"])
else:
data = dict(code=result.status_code,
message=result.text)
self.response = data
log.info("Payment Response: %s" % (data))
except requests.exceptions.RequestException as e:
data = dict(code=e.errno,
message=e.strerror)
self.amt_buy = "harga" in data and data["harga"] or self.amt_buy
self.vend_inv_no = "ref_num" in data and data["ref_num"] or self.vend_inv_no
self.result = self.pars_data(data)
log.info("Payment Result: %s" % (self.result))
self.save_log('payment')
return data
def advice(self):
params = self.get_params(cmd='ADV', modul='ISI')
params["tujuan"] = self.id_pel
params["voucherid"] = self.vendor_produk.kode
self.request = params
log.info("Advice Request: %s" % (self.request))
try:
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = xmltodict.parse(result.text)["root"]
else:
data = dict(code=result.status_code,
message=result.text)
self.response = data
log.info("Advice Response: %s" % (self.response))
except:
data = dict(code=999,
message="No Response From Biller")
self.result = data
log.info("Advice Result: %s" % (self.result))
self.save_log('advice')
return data
def info(self):
params = self.get_params(cmd='info', modul='ISI')
self.request = params
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = xmltodict.parse(result.text)["root"]
self.response = data
else:
data = dict(error=result.status_code)
self.save_log('info')
return data