structure.py
2.06 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
import colander
from opensipkd.string.row import Row
from .exceptions import InternalError
INQUIRY_RESP_FIELDS = (
'Response Code',
'Biller Name',
'Bill Amount',
'Bill Ref', # STAN
'Notification Message')
PAYMENT_RESP_FIELDS = (
'Response Code',
'Transaction ID', # NTP
'Bill Ref', # STAN
'Notification Message')
class DataRequest(colander.Schema):
merchant = colander.SchemaNode(colander.String())
terminal = colander.SchemaNode(colander.String())
pwd = colander.SchemaNode(colander.String())
trx_type = colander.SchemaNode(colander.String())
msisdn = colander.SchemaNode(colander.String())
acc_no = colander.SchemaNode(colander.String())
msg = colander.SchemaNode(colander.String(), missing=colander.drop)
trx_date = colander.SchemaNode(colander.String())
amount = colander.SchemaNode(colander.String(), missing=colander.drop)
# Saat payment dan reversal, diperoleh dari inquiry response
bill_ref = colander.SchemaNode(colander.String(), missing=colander.drop)
# Saat payment dan reversal, dibuat saat payment request (NTB)
trx_id = colander.SchemaNode(colander.String(), missing=colander.drop)
class InquiryResponse(Row):
def __init__(self):
super().__init__(INQUIRY_RESP_FIELDS)
def __setitem__(self, name, value):
if value.find(':') > -1:
msg = 'Ada titik dua pada {} yaitu {}'.format(name, value)
raise InternalError(msg)
Row.__setitem__(self, name, value)
def __str__(self):
return self.to_str()
def to_str(self):
return ':'.join(list(self))
def from_err(self, err):
self.values['Response Code'] = err.code
self.values['Notification Message'] = err.message
def from_raw(self, raw):
t = raw.split(':')
i = -1
for fieldname in self.fieldnames:
i += 1
if not t[i:i+1]:
return
self.values[fieldname] = t[i]
class PaymentResponse(InquiryResponse):
def __init__(self):
Row.__init__(self, PAYMENT_RESP_FIELDS)