Commit 3f809681 by Solo Group

VSI

1 parent 1d67c30f
......@@ -27,45 +27,35 @@ class Vendor(VendorClass):
key = ":".join([self.mid, self.key]).encode()
self.auth = base64.b64encode(key).decode()
def set_response(self, result=None, data=None, message=None, code=None):
if result:
self.response = result
elif not data and message:
code = code and code or 500
def set_response(self, data=None, message=None, code=999, typ="inquiry"):
if not data and message:
message = message and message or "Biller No Response"
data = dict(code=code,
message=message)
self.result = data
self.save_log('inquiry')
log.info("Response To Cust: %s" % data)
self.save_log(typ)
log.info("Result: %s" % data)
return data
def request_post(self, params, url=None):
headers = {'Authorization': 'Bearer {key}'.format(key=self.auth)}
data = json.dumps(params)
url = url and self.url + url or self.url
try:
with requests.session():
resp = requests.post(url, data=data,
verify=False, headers=headers, timeout=15)
except:
resp = None
return resp
def request_get(self, params, url=None):
headers = {'Authorization': 'Bearer {key}'.format(key=self.auth)}
url = url and self.url + url or self.url
try:
with requests.session():
resp = requests.get(url, params=params,
verify=False, headers=headers, timeout=15)
except:
resp = None
def get_headers(self):
return {'Authorization': 'Bearer {key}'.format(key=self.auth)}
def get_url(self, url=None):
return url and self.url + url or self.url
# def request_post(self, data, url=None):
# # data = json.dumps(params)
# url = url and self.url + url or self.url
# return requests.post(url, data=data, verify=False,
# headers=self.get_headers(), timeout=15)
# # try:
# # pass
# except requests.exceptions.RequestException as e:
# resp = None
#
# return resp
return resp
def inquiry(self):
if not self.v_produk_kd or not self.id_pel:
......@@ -75,21 +65,22 @@ class Vendor(VendorClass):
params = dict(
number=self.id_pel
)
url = '/prepaid/pln/inquiry'
url = self.get_url('/prepaid/pln/inquiry')
else:
params = dict(
denom=self.v_produk_kd,
number=self.id_pel
)
url = '/postpaid/inquiry'
url = self.get_url('/postpaid/inquiry')
self.request = params
log.info("Inquiry Request: url: %s params %s" % (url, params))
self.save_log("inquiry")
try:
resp = self.request_get(params, url)
resp = requests.get(url, params=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
return self.set_response(message="Biller No Response")
return self.set_response(message="Biller Not Response")
if not resp:
return self.set_response(message="Biller No Response")
......@@ -98,50 +89,60 @@ class Vendor(VendorClass):
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
log.info("Inquiry Response: %s" % result)
if resp.ok:
log.info("Inquiry Response: %s" % self.response)
if resp.status_code==200:
self.status = 1 # sukses
data = "data" in result and result["data"] or None
parsd = self.pars_data(data)
if parsd:
parsd.update(code=0,
status="SUCCES")
messagge="SUCCES",
status="SUCCESS")
elif resp.status_code == 400:
self.status = -1
message = "data" in result and result["data"] or {}
message = message and "errors" in message and message["errors"] or message
message = type(message) is list and ", ".join(message) or message
parsd = dict(code=resp.status_code,
message=message)
else:
self.status = -1
parsd = dict(code=500,
message="Other Error")
parsd = None
return self.set_response(parsd) #parsd
# self.response = result
# log.info("Response To Cust: %s" % parsd)
# self.result = parsd
# self.save_log('inquiry')
return self.set_response(result, parsd) #parsd
def gagal_transaksi(self, inq):
self.status = -2 # Try Other Vendor
if inq:
inq.update(dict(code=68,
message="PENDING",
status="PENDING"))
return self.set_response(data=inq, typ="payment")
else:
parsd = self.get_price()
parsd.update(dict(code=68,
message="PENDING",
status="PENDING"))
return self.set_response(data=parsd, typ="payment")
def gagal_transaksi(self, code):
if code==400:
self.status = -3
def get_price(self, inq=None):
product_id = self.invoice_det.produk.id
if hasattr(self.invoice_det, "customer_id"):
partner_id = self.invoice_det.customer_id
else:
self.status = -2
partner_id = self.invoice_det.h2h_ar_invoice.customer_id
parsd = dict(
status="FAILED",
code=code,
message="Gagal Transaksi"
harga = self.vendor_produk.produk.harga
self.discount = PartnerProduk.get_discount(partner_id, product_id)
self.amt_sell = harga - self.discount
return dict(
subtotal=harga,
discount=self.discount,
total=self.amt_sell
)
self.result = parsd
self.save_log('payment')
return parsd
def payment(self):
params = dict(
......@@ -158,8 +159,18 @@ class Vendor(VendorClass):
if self.vendor_produk.produk.kategori.kode in ["e-payment", "e-voucher"]:
inq = self.inquiry()
if inq["code"]!=0:
return self.set_response()
resp = self.request_post(params, '/prepaid/purchase')
url = self.get_url("/prepaid/purchase")
try:
resp = requests.post(url, data=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
resp = None
if not resp:
self.gagal_transaksi(inq)
try:
result = json.loads(resp.text)
except:
......@@ -175,21 +186,24 @@ class Vendor(VendorClass):
parsd = {}
if resp.status_code == 200 and type(result) is dict: # 0200
data = "data" in result and result["data"] or {}
# cel rc status
if not data:
return self.gagal_transaksi(500)
return self.gagal_transaksi(inq)
if "rc" in data:
parsd["code"] = int(data["rc"])
if data["rc"] == "13":
parsd["status"] = "FAILED"
self.status = -2
self.status = -3
elif data["rc"] == "67":
parsd["status"] = "DOUBLE"
self.status = -3 # Gagal Karena Pernah Transaksi
elif data["rc"] == "68":
parsd["status"] = "PENDING"
self.status = -1 # pending
elif data["rc"] == "67":
parsd["status"] = "DOUBLE"
self.status = -2 # Gagal Karena Pernah Transaksi
if self.status == -2:
parsd["message"] = "PENDING"
else:
parsd["message"] = "FAILED"
# Status ini hanya sementara nunggu refund
# Status -2 ini harus dicari solusi mencari vendor lain
else:
......@@ -200,39 +214,25 @@ class Vendor(VendorClass):
or self.serial_number
self.vend_inv_no = "order_id" in data and data["order_id"] or None
if not inq:
if parsd["code"] == 0 or parsd["code"] == 68:
self.amt_buy = "price" in data and data["price"] or 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.amt_sell = int(harga - discount)
parsd["total"] = self.amt_sell
parsd["discount"] = int(discount)
parsd["subtotal"] = int(harga)
if not inq:
if parsd["code"] == 0 or parsd["code"] == 68:
parsd = self.get_price(inq)
else:
self.amt_buy = "price" in data and data["price"] or 0
inq.update(parsd)
parsd = inq
self.result = parsd
log.info("Payment Result: %s" % self.result)
self.save_log('payment')
# if self.status == -1:
# sleep(2)
# row = H2hArInvoiceDet.query_id(self.invoice_det.id).first()
# if row.notify:
# post = "post" in row.notify and row.notify["post"] or ""
# if post:
#
return parsd
# self.result = parsd
# log.info("Payment Result: %s" % self.result)
return self.set_response(parsd, 'payment')
else: # BAD REQUEST
self.status = -3
return self.gagal_transaksi(resp.status_code)
return dict(code=13,
message="FAILED")
def advice(self):
......@@ -242,7 +242,7 @@ class Vendor(VendorClass):
if self.kategori == 'e-payment':
order_id = self.invoice_det.vend_inv_no
url = '/order/{order_id}'.format(order_id=order_id)
url = self.get_url('/order/{order_id}'.format(order_id=order_id))
params = None
self.request = url
else:
......@@ -253,16 +253,21 @@ class Vendor(VendorClass):
)
)
self.request = params
self.save_log("advice")
url = '/prepaid/purchase-get'
url = self.get_url('/prepaid/purchase-get')
self.save_log("advice")
resp = self.request_get(params, url)
try:
resp = requests.get(url,params=params, verify=False,
headers=self.get_headers(), timeout=15)
except:
return self.set_response()
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
if resp.ok:
self.status = 1 # sukses
data = "data" in result and result["data"] or None
......@@ -277,7 +282,6 @@ class Vendor(VendorClass):
parsd = dict(code=500,
message="Other Error")
self.response = result
self.save_log('advice')
return parsd
......@@ -431,6 +435,7 @@ class Vendor(VendorClass):
admin = int(self.vendor_produk.produk.harga*i)
rincian["admin"] = admin
result["subtotal"] = int(harga_pokok) + admin
product_id = self.invoice_det.produk.id
if hasattr(self.invoice_det, "customer_id"):
partner_id = self.invoice_det.customer_id
......
......@@ -286,7 +286,7 @@ class ViewHome(BaseView):
if result["f_result"]["code"]==0:
session.flash("Sukses")
else:
session.flash(result["f_result"]["status"], "error")
session.flash(result["f_result"]["message"], "error")
form.render(values)
return dict(form=form, params=form_params_view)
......
......@@ -60,7 +60,9 @@ class Vendor(VendorClass):
"discount": 300,
"total": 156400
}]
"""
"""
<?xml version="1.0"?>
<root>
<status>SUCCESS</status>
......@@ -125,24 +127,27 @@ class Vendor(VendorClass):
log.info("Request: %s", params)
try:
resp = requests.get(self.url, params=params, timeout=15)
except requests.exceptions.RequestException as e:
data = dict(message = e.strerror,
code = e.errno)
return self.save_response(data)
if resp and resp.ok:
data = dict(xmltodict.parse(resp.text)["root"])
log.info("Response: %s", data)
data = self.pars_data(data)
elif resp:
self.response = data
else:
data = dict(message=resp.text,
code=resp.status_code)
else:
self.response = data
except requests.exceptions.RequestException as e:
data = dict(message = e.strerror,
code = e.errno)
return self.save_response(data)
if not resp:
data = dict(message="No Response From Biller ",
code=500)
return self.save_response(data)
data = self.pars_data(data)
self.result = data
return self.save_response(data)
def payment(self):
......@@ -159,11 +164,11 @@ class Vendor(VendorClass):
else:
data = dict(code=resp.status_code,
message=resp.text)
self.response = data
except:
data = dict(code=500,
message="No Response From Biller")
self.response = data
data = self.pars_data(data)
self.save_log('payment')
......
......@@ -160,29 +160,20 @@ class Vendor(VendorClass):
if resp and resp.ok:
data = dict(xmltodict.parse(resp.text)["root"])
self.response = data
data = self.pars_data(data)
elif resp:
data = dict(message=resp.text,
code=resp.status_code)
self.response = data
else:
data = dict(message="No Response From Biller ",
code=500)
return self.save_response(data)
# if "status" in data and data["status"] and data["status"] == "SUCCESS":
# # data = self.pars_data(data)
# data.update(dict(message="SUCCESS",
# code=0))
#
# elif "status" in data and data["status"] and data["status"] == "ERROR":
# #todo: apakah data akan dimapping errornya?
# data.update(dict(message=data["rcm"],
# code=data["rc"]))
# else:
# data.update(dict(message="Other Error",
# code=500))
self.result = data
return self.save_response(data)
def payment(self):
......@@ -201,12 +192,11 @@ class Vendor(VendorClass):
else:
data = dict(code=resp.status_code,
message=resp.text)
self.response = data
except:
data = dict(code=500,
message="No Response From Biller")
self.response = data
data = self.pars_data(data)
self.save_log('payment')
return data
......@@ -223,7 +213,6 @@ class Vendor(VendorClass):
resp = requests.get(self.url, params=params, timeout=15)
if resp.ok:
data = dict(xmltodict.parse(resp.text)["root"])
self.response = data
else:
data = dict(code=resp.status_code,
message=resp.text)
......@@ -232,7 +221,6 @@ class Vendor(VendorClass):
except:
data = dict(code=500,
message="No Response From Biller")
self.response = data
data = self.pars_data(data)
self.result = data
......
......@@ -105,9 +105,9 @@ class Vendor(VendorClass):
"total": subtotal-discount,
}
def save_response(self, data, typ="inquiry"):
self.response = data
log.info("VSI PLN PRE Response: %s", data)
def save_result(self, data, typ="inquiry"):
self.result = data
log.info("Result: %s", data)
self.save_log(typ)
return data
......@@ -118,40 +118,26 @@ class Vendor(VendorClass):
self.request = params
self.save_log('inquiry')
params['trxid'] = self.invoice_det.id
log.info("VSI PLN PRE Request: %s", params)
log.info("Request: %s", params)
try:
resp = requests.get(self.url, params=params, timeout=15)
except requests.exceptions.RequestException as e:
data = dict(message = e.strerror,
code = e.errno)
return self.save_response(data)
if resp and resp.ok:
data = dict(xmltodict.parse(resp.text)["root"])
data = self.pars_data(data)
self.response = data
elif resp:
else:
data = dict(message=resp.text,
code=resp.status_code)
else:
data = dict(message="No Response From Biller ",
code=500)
return self.save_response(data)
# if "status" in data and data["status"] and data["status"] == "SUCCESS":
# # data = self.pars_data(data)
# data.update(dict(message="SUCCESS",
# code=0))
#
# elif "status" in data and data["status"] and data["status"] == "ERROR":
# #todo: apakah data akan dimapping errornya?
# data.update(dict(message=data["rcm"],
# code=data["rc"]))
# else:
# data.update(dict(message="Other Error",
# code=500))
return self.save_response(data)
self.response = data
log.info("REsponse: %s" % data )
except requests.exceptions.RequestException as e:
data = dict(message = e.strerror,
code = e.errno)
return self.save_result(data)
data = self.pars_data(data)
return self.save_result(data)
def payment(self):
params = self.get_params(cmd='PAY', modul='PRE')
......@@ -168,13 +154,14 @@ class Vendor(VendorClass):
else:
data = dict(code=resp.status_code,
message=resp.text)
self.response = data
except:
data = dict(code=500,
message="No Response From Biller")
self.response = data
data = self.pars_data(data)
self.result = data
self.save_log('payment')
return data
......@@ -191,7 +178,6 @@ class Vendor(VendorClass):
resp = requests.get(self.url, params=params, timeout=15)
if resp.ok:
data = dict(xmltodict.parse(resp.text)["root"])
self.response = data
else:
data = dict(code=resp.status_code,
message=resp.text)
......@@ -200,7 +186,6 @@ class Vendor(VendorClass):
except:
data = dict(code=500,
message="No Response From Biller")
self.response = data
data = self.pars_data(data)
self.result = data
......
......@@ -2,7 +2,7 @@ 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
from agratek.api.merchant.views.vsi import Vendor as VendorClass, vsi_status
import logging
log = logging.getLogger(__name__)
......@@ -24,25 +24,30 @@ class Vendor(VendorClass):
:return:
"""
code = "rc" in data and int(data["rc"]) or 0
if code==0:
self.status = vsi_status[str(code)]["status"]
status = self.status == -3 and "FAILED" or "PENDING"
if status == "PENDING":
code = 68
if self.status>-3:
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
status = "status" in data and data["status"] or ""
if not harga:
raise JsonRpcError()
else:
discount = 0
harga = 0
self.status = -1
result = dict(
status="status" in data and data["status"] or "PENDING",
status=status,
code=code,
message="rcm" in data \
and (data["rcm"] == "00000" and "SUCCESS" or data["rcm"]) \
or "PENDING",
or status,
serial_number="serialnumber" in data and data["serialnumber"] or "",
subtotal=int(harga),
discount=int(discount),
......@@ -60,21 +65,21 @@ class Vendor(VendorClass):
try:
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = xmltodict.parse(result.text)["root"]
data = dict(xmltodict.parse(result.text)["root"])
else:
data = dict(code=result.status_code,
message=result.text)
self.response = data
log.info("Response: %s" % (data))
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))
log.info("Result: %s" % (self.result))
self.save_log('inquiry')
return data
return self.result
def payment(self):
params = self.get_params(cmd='PAY', modul='ISI')
......@@ -86,18 +91,18 @@ class Vendor(VendorClass):
result = requests.get(self.url, params=params, timeout=15)
if result.ok:
data = dict(xmltodict.parse(result.text)["root"])
self.response = data
else:
data = dict(code=result.status_code,
message=result.text)
self.response = data
log.info("Payment Response: %s" % (data))
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')
......@@ -105,14 +110,24 @@ class Vendor(VendorClass):
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"]
self.response = data
else:
data = dict(error=result.status_code)
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
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!