pulsa.py
4.63 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
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
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
if code==0:
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
if not harga:
raise JsonRpcError()
else:
discount = 0
harga = 0
self.status = -1
result = dict(
status="status" in data and data["status"] or "PENDING",
code=code,
message="rcm" in data \
and (data["rcm"] == "00000" and "SUCCESS" or data["rcm"]) \
or "PENDING",
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, time_out=15)
if result.ok:
data = xmltodict.parse(result.text)["root"]
else:
data = dict(code=result.status_code,
message=result.text)
except requests.exceptions.RequestException as e:
data = dict(code=e.errno,
message=e.strerror)
log.info("VSI PULSA Response: %s" % (data))
self.response = data
self.result = self.pars_data(data)
log.info("VSI PULSA Result: %s" % (self.result))
self.save_log('inquiry')
return data
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, time_out=15)
if result.ok:
data = dict(xmltodict.parse(result.text)["root"])
self.response = data
else:
data = dict(code=result.status_code,
message=result.text)
except requests.exceptions.RequestException as e:
data = dict(code=e.errno,
message=e.strerror)
log.info("Payment Response: %s" % (data))
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.response = data
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')
self.request = params
result = requests.get(self.url, params=params, time_out=15)
if result.ok:
data = xmltodict.parse(result.text)["root"]
self.response = data
else:
data = dict(error=result.status_code)
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, time_out=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