Commit c92a5233 by Solo Group

vsi_pln_post

1 parent bc16a58f
...@@ -43,6 +43,10 @@ def produk(): ...@@ -43,6 +43,10 @@ def produk():
def build_request(typ, values): def build_request(typ, values):
produk_id = values['produk_id'] produk_id = values['produk_id']
vendor_id = values['vendor_id'] vendor_id = values['vendor_id']
bill_no = values['destination']
customer_id = 'customer_id' in values and values['customer_id'] or None
cust_trx_id = 'cust_trx_id' in values and values['cust_trx_id'] or None
vendor_product = PartnerProduk.query() \ vendor_product = PartnerProduk.query() \
.join(Produk, PartnerProduk.produk_id==Produk.id)\ .join(Produk, PartnerProduk.produk_id==Produk.id)\
.filter(PartnerProduk.partner_id == vendor_id, .filter(PartnerProduk.partner_id == vendor_id,
...@@ -51,8 +55,9 @@ def build_request(typ, values): ...@@ -51,8 +55,9 @@ def build_request(typ, values):
return dict(error='Data Tidak Ditemukan') return dict(error='Data Tidak Ditemukan')
modules = import_module('.'+vendor_product.modules, 'agratek.api.merchant.views') modules = import_module('.'+vendor_product.modules, 'agratek.api.merchant.views')
cls_module = modules.Vendor(PartnerProduk.kode, values['destination'],
values['trx_id'], vendor_id) cls_module = modules.Vendor(vendor_id, produk_id, bill_no, customer_id,
cust_trx_id)
if typ=='inquiry': if typ=='inquiry':
return cls_module.inquiry() return cls_module.inquiry()
...@@ -272,26 +277,49 @@ class ViewHome(BaseView): ...@@ -272,26 +277,49 @@ class ViewHome(BaseView):
return dict(form=form, params=form_params_edit) return dict(form=form, params=form_params_edit)
class VendorClass(object): class VendorClass(object):
def __init__(self, cid, vendor_id): def __init__(self, vendor_id, produk_id, bill_no, customer_id=None,
cust_trx_id=None, ):
""" """
:param cid: :param cid:
merupakan customer id seperti MSN dan atu id pelanggaan merupakan customer id seperti MSN dan atu id pelanggaan
""" """
self.settings = get_settings() self.settings = get_settings()
self.cid = cid
self.vendor_id = vendor_id self.vendor_id = vendor_id
self.trx_id = None self.produk_id = produk_id
self.bill_no = bill_no
self.customer_id = customer_id
self.cust_trx_id = cust_trx_id
self.response = None self.response = None
self.request = None self.request = None
self.partner_log_id = None
row = PartnerProduk.query()\
.filter_by(partner_id=self.vendor_id,
produk_id=self.produk_id).first()
self.v_produk_kd = row and row.kode or None
def save_log(self, typ): def save_log(self, typ, row=None):
if not row:
row = PartnerLog() row = PartnerLog()
row.partner_id = self.vendor_id row.vendor_id = self.vendor_id
row.trx_type = typ row.produk_id = self.produk_id
row.ref_id = self.trx_id row.bill_no = self.bill_no
row.log = dict(request=self.request, row.customer_id = self.customer_id
row.cust_trx_id = self.cust_trx_id
if typ == 'inquiry':
row.inquiry = dict(request=self.request,
response=self.response)
elif typ == 'payment':
row.inquiry = dict(request=self.request,
response=self.response)
elif typ == 'advice':
row.advice = dict(request=self.request,
response=self.response)
elif typ == 'info':
row.info = dict(request=self.request,
response=self.response) response=self.response)
flush_row(row) flush_row(row)
self.partner_log_id = row.id
def get_product(self): def get_product(self):
pass pass
...@@ -383,5 +411,29 @@ def vendor_test(request): ...@@ -383,5 +411,29 @@ def vendor_test(request):
elif command == "ADV": elif command == "ADV":
pass pass
elif modul == "pln":
tujuan = params['idpel']
voucherid = params['voucherid']
if command == "INQ":
result = dict(root=dict(status="SUCCESS",
rc="0000",
rcm="0000",
text="[0] Cek Tagihan Sukses ke: 628523123789 ",
refnum="DB3DC0A2539419F8C50000000000000",
destnum=tujuan,
nominal=5000
))
elif command == "PAY":
result = dict(root=dict(
status="SUCCESS",
rc="0000",
rcm="0000",
text="[0] Cek Tagihan Sukses ke: 628523123789 ",
refnum="DB3DC0A2539419F8C50000000000000",
destnum=tujuan,
nominal=5000
))
elif command == "ADV":
pass
xml = xmltodict.unparse(result) xml = xmltodict.unparse(result)
return xml return xml
...@@ -13,7 +13,8 @@ from .vendor import VendorClass ...@@ -13,7 +13,8 @@ from .vendor import VendorClass
class Vendor(VendorClass): class Vendor(VendorClass):
def __init__(self, produk_kd, cid, trx_id, vendor_id): def __init__(self, vendor_id, produk_id, bill_no, customer_id=None,
cust_trx_id=None):
""" """
:param produk_kd: :param produk_kd:
merupakan kode produk versi vendor merupakan kode produk versi vendor
...@@ -23,13 +24,12 @@ class Vendor(VendorClass): ...@@ -23,13 +24,12 @@ class Vendor(VendorClass):
:param cid: :param cid:
merupakan customer id seperti MSN dan atu id pelanggaan merupakan customer id seperti MSN dan atu id pelanggaan
""" """
VendorClass.__init__(self, cid, vendor_id) VendorClass.__init__(self, vendor_id, produk_id, bill_no, customer_id,
cust_trx_id)
settings = self.settings settings = self.settings
self.mid = 'vsi_mid' in settings and settings['vsi_mid'] or None self.mid = 'vsi_mid' in settings and settings['vsi_mid'] or None
self.key = 'vsi_key' in settings and settings['vsi_key'] or None self.key = 'vsi_key' in settings and settings['vsi_key'] or None
self.url = 'vsi_url' in settings and settings['vsi_url'] or None self.url = 'vsi_url' in settings and settings['vsi_url'] or None
self.trx_id = trx_id
self.produk_kd = produk_kd
def get_hc(self, tanggal): def get_hc(self, tanggal):
hash_string = "".join([self.mid, tanggal, self.key]) hash_string = "".join([self.mid, tanggal, self.key])
...@@ -45,7 +45,7 @@ class Vendor(VendorClass): ...@@ -45,7 +45,7 @@ class Vendor(VendorClass):
modul=modul, modul=modul,
command=cmd, command=cmd,
resp='XML', resp='XML',
trxid=self.trx_id, trxid=self.partner_log_id,
) )
if msn: if msn:
params['msn']=msn params['msn']=msn
......
...@@ -13,8 +13,8 @@ from .vsi import Vendor as VendorClass ...@@ -13,8 +13,8 @@ from .vsi import Vendor as VendorClass
class Vendor(VendorClass): class Vendor(VendorClass):
def __init__(self, product_kd, trx_id=None, cid=None): # def __init__(self, product_kd, trx_id=None, cid=None):
VendorClass.__init__(self, product_kd, cid) # VendorClass.__init__(self, product_kd, cid)
def inquiry(self): def inquiry(self):
""" """
:return: :return:
...@@ -27,7 +27,6 @@ class Vendor(VendorClass): ...@@ -27,7 +27,6 @@ class Vendor(VendorClass):
idpel = {IDPELANGGAN} idpel = {IDPELANGGAN}
resp = XML resp = XML
trxid = {IDTRANSAKSI} trxid = {IDTRANSAKSI}
:sukses response :sukses response
<?xml version="1.0"?> <?xml version="1.0"?>
<root> <root>
...@@ -75,11 +74,20 @@ class Vendor(VendorClass): ...@@ -75,11 +74,20 @@ class Vendor(VendorClass):
panjang maksimum 50 character. panjang maksimum 50 character.
6. resp merupakan format respon yang diinginkan (XML), secara 6. resp merupakan format respon yang diinginkan (XML), secara
default jika dikosongkan maka responnya merupakan format plaintext. default jika dikosongkan maka responnya merupakan format plaintext.
""" """
params = self.get_params(cmd='INQ', modul='pln', idpel=self.cid) params = self.get_params(cmd='INQ', modul='pln')
params["idpel"] = self.bill_no
params["voucherid"] = self.v_produk_kd
self.request = params
row = self.save_log('inquiry')
params['trxid'] = self.partner_log_id
result = requests.get(self.url, params=params) result = requests.get(self.url, params=params)
data = xmltodict(result) if result.ok:
data = xmltodict.parse(result.text)["root"]
else:
data = dict(error=result.status_code)
self.response = data
self.save_log('inquiry', row)
return data return data
def payment(self): def payment(self):
...@@ -133,8 +141,17 @@ class Vendor(VendorClass): ...@@ -133,8 +141,17 @@ class Vendor(VendorClass):
<rcm>[88] TAGIHAN SUDAH TERBAYAR</rcm> <rcm>[88] TAGIHAN SUDAH TERBAYAR</rcm>
</root> </root>
""" """
params = self.get_params(cmd='PAY', modul='pln')
params = self.get_params(cmd='PAY', modul='pln', idpel=self.cid) params["idpel"] = self.bill_no
params["voucherid"] = self.v_produk_kd
self.request = params
row = self.save_log('payment')
params['trxid'] = self.partner_log_id
result = requests.get(self.url, params=params) result = requests.get(self.url, params=params)
data = xmltodict(result) if result.ok:
data = xmltodict.parse(result.text)["root"]
else:
data = dict(error=result.status_code)
self.response = data
self.save_log('payment', row)
return data return data
...@@ -271,12 +271,15 @@ class Vendor(VendorClass): ...@@ -271,12 +271,15 @@ class Vendor(VendorClass):
params = self.get_params(cmd='INQ', modul='ISI') params = self.get_params(cmd='INQ', modul='ISI')
params["tujuan"] = self.cid params["tujuan"] = self.cid
params["voucherid"] = self.produk_kd params["voucherid"] = self.produk_kd
self.request = params
row = self.save_log('inquiry')
result = requests.get(self.url, params=params) result = requests.get(self.url, params=params)
if result.ok: if result.ok:
data = xmltodict.parse(result.text)["root"] data = xmltodict.parse(result.text)["root"]
else: else:
data = dict(error=result.status_code) data = dict(error=result.status_code)
self.save_log('inquiry') self.response = data
self.save_log('inquiry', row)
return data return data
def payment(self): def payment(self):
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!