pulsa.py
4.76 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
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):
if "rc" in data:
if data["rc"]=="0000":
code = 0
else:
code = int(data["rc"])
else:
code = -1
if code == 0: # sukses
product_id = self.invoice_det.produk.id
partner_id = self.invoice_det.h2h_ar_invoice.customer_id
self.discount = int(PartnerProduk.get_discount(partner_id, product_id))
harga = int(self.vendor_produk.produk.harga)
self.amt_buy = data["harga"]
self.amt_sell = harga - self.discount
result = dict(
serial_number="serialnumber" in data and data["serialnumber"] or "",
subtotal=self.amt_sell,
discount=self.discount,
total=self.amt_sell)
return result
else:
self.status = code and vsi_status[str(code)]["status"] or 1
status = self.status == -3 and "FAILED" or "PENDING"
if status == "PENDING":
code = 68
if self.status>-3:
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 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))
data = self.get_price()
try:
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
self.response = dict(xmltodict.parse(result.text)["root"])
log.info("Payment Response: %s" % (self.response ))
else:
self.status = 0
self.response = dict(code=result.status_code, message=result.text)
log.info("Payment Response: %s" % (self.response))
return self.set_pending(data, message=result.text)
except requests.exceptions.Timeout as errt:
message = "Biller Timeout Transaksi will be retry"
self.status = -1
return self.set_pending(data, message=message)
except requests.exceptions.RequestException as e:
message = "Biller Error Transaksi will be retry"
self.status = -2
return self.set_pending(data, message=message)
# self.amt_buy = "harga" in data and data["harga"] or self.amt_buy
self.vend_inv_no = str(self.invoice_det.id)
data = self.pars_data(self.response)
return self.set_success(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