inquiry.py
3.54 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
import sys
from datetime import datetime
from argparse import ArgumentParser
from configparser import ConfigParser
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import transaction
from zope.sqlalchemy import register
from ..services import Query
IP = '127.0.0.1'
CONF_NAME = 'test'
default_merchant = 'ldmjakarta1'
default_terminal = 'Terminal Name'
default_msisdn = '628111234567'
help_amount = 'wajib saat --payment dan --reversal'
help_bill_ref = 'wajib saat payment dan reversal, '\
'diperoleh dari inquiry response'
help_trx_id = 'Nomor Transaksi Bank, '\
'opsional saat --payment, wajib saat --reversal'
help_merchant = 'default ' + default_merchant
def error(s):
print(s)
sys.exit()
def get_option(argv):
parser = ArgumentParser()
parser.add_argument('conf')
parser.add_argument('--invoice-id', required=True)
parser.add_argument('--payment', action='store_true')
parser.add_argument('--reversal', action='store_true')
parser.add_argument('--amount', type=int, help=help_amount)
parser.add_argument('--bill-ref', help=help_bill_ref)
parser.add_argument('--trx-id', help=help_trx_id)
parser.add_argument(
'--merchant', default=default_merchant, help=help_merchant)
parser.add_argument('--terminal', default=default_terminal)
parser.add_argument('--msisdn', default=default_msisdn)
parser.add_argument('--msg', default='')
parser.add_argument('--debug', action='store_true')
return parser.parse_args(argv)
class App:
def __init__(self, argv):
self.option = get_option(argv)
conf = ConfigParser()
conf.read(self.option.conf)
db_url = conf.get('main', 'db_url')
engine = create_engine(db_url)
engine.echo = self.option.debug
session_factory = sessionmaker(bind=engine)
self.db_session = session_factory()
register(self.db_session)
def get_method(self):
if self.option.payment:
return '022'
if self.option.reversal:
return '023'
return '021'
def get_transaction(self):
def required(name, default=None):
value = getattr(self.option, name)
if not value and not default:
error('--{} harus diisi'.format(name.replace('_', '-')))
p[name] = value or default
p = dict(
merchant=self.option.merchant,
terminal=self.option.terminal,
msisdn=self.option.msisdn,
acc_no=self.option.invoice_id,
trx_date=datetime.now().strftime('%Y%m%d%H%M%S'),
msg=self.option.msg)
p['trx_type'] = self.get_method()
if self.option.payment or self.option.reversal:
required('amount')
required('bill_ref')
if self.option.payment:
required('trx_id', datetime.now().strftime('%m%d%H%M%S'))
else:
required('trx_id')
return p
def run(self):
data = self.get_transaction()
if self.option.debug:
print(f'Input: {data}')
q = Query(data, self.db_session)
if self.option.payment:
inq = q.get_inquiry()
row = q.save(IP, CONF_NAME, inq=inq)
elif self.option.reversal:
pay = q.get_payment()
row = q.save(IP, CONF_NAME, pay=pay)
else:
row = q.save(IP, CONF_NAME)
print(f'Sudah disimpan dengan ID {row.id}')
def main(argv=sys.argv[1:]):
app = App(argv)
with transaction.manager:
app.run()