Commit ef35ab3e by aa.gusti

retribusi

1 parent cfbd28d5
......@@ -75,15 +75,17 @@ class Vendor(VendorClass):
}
def set_inquiry_error(self, resp):
def inquiry_error(self, resp):
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
return dict(code=code, message=message)
# if code == 54:
# raise JsonRpcBillAllreadyPaidError()
# elif code == 55:
# raise JsonRpcBillNotFoundError()
# else:
# raise JsonRpcError(code=code, message=message)
def response_field(self):
resp = self.response
......@@ -176,7 +178,7 @@ class Vendor(VendorClass):
return result
else:
self.set_inquiry_error(resp)
return self.inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
......@@ -226,7 +228,7 @@ class Vendor(VendorClass):
return self.set_failed()
if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response)
return self.inquiry_error(self.response)
params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params))
......
import base64
import json
import re
from time import sleep
from datetime import datetime
import requests
from opensipkd.base import get_settings
from opensipkd.base.tools import get_random_string, get_random_number
from opensipkd.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
# id_pel, customer_id, cust_trx, row
settings = get_settings()
self.mid = 'tangselrtr_mid' in settings and settings['tangselrtr_mid'] or None
self.key = 'tangselrtr_key' in settings and settings['tangselrtr_key'] or None
self.url = 'tangselrtr_url' in settings and settings['tangselrtr_url'] or None
key = ":".join([self.mid, self.key]).encode()
self.auth = base64.b64encode(key).decode()
self.inq_url = '{0}/inquiry'.format(self.url)
self.pay_url = '{0}/payment'.format(self.url)
def get_headers(self):
return {'Content-Type': 'application/json',
'x-api-key': self.key}
def get_url(self, url=None):
return url and self.url + url or self.url
def inquiry_field(self):
return \
{
"kode_pedagang": self.id_pel,
}
def inquiry_error(self, resp):
if resp["response_code"] == "C8111":
code = 55
message = "Data tidak dtitemukan"
elif resp["response_code"] == "C3077":
code = 54
message = "Data sudah dibayar"
else:
code = 999
message = resp["message"]
return dict(code=code, message=message)
def response_field(self):
resp = self.response
if resp["code"] == 200 and resp["is_error"] == 0:
data = resp["content"]
pokok = int(data["biaya_tagihan"] or '0')
denda = 0
disc_biller = 0
sub_total = pokok + denda - disc_biller
result = self.get_price(sub_total)
admin = int(self.vendor_produk.produk.harga)
# todo: cek kembali harga apakah wajar atau tidak
# adm_biller = int(resp["diskon"] or '0')
# jika harga admin biller > dari admin
# if self.amt_buy < sub_total+adm_biller:
# raise
# if admin < adm_biller:
# admin = adm_biller
rincian = dict(
pokok=pokok,
denda=denda,
discount=disc_biller,
subtotal=sub_total,
admin=admin,
total=sub_total + admin,
npwrd=data["kode_pedagang"],
nama=data["nama_pemilik"],
no_hp_wr=data["nomor_hp_pemilik"],
no_tel_wr=data["nomor_tlp_pemilik"],
email_wr=data["email_pemilik"],
nama_toko=data["nama_toko"],
alamat=data["lokasi_pasar"],
blok=data["blok_toko"],
keterangan=data["keterangan_alamat_toko"] or "",
luas=data["luas_toko"],
kategori=data["kategori_usaha"],
)
result.update(dict(rincian=rincian))
return result
else:
return self.inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
return self.set_response(message='Parameter tidak lengkap')
self.request = self.inquiry_field()
log.info("Inquiry Request: url: {} params {}".format(self.inq_url, self.request))
self.save_log("inquiry")
params = json.dumps(self.request)
log.info(params)
try:
resp = requests.post(self.inq_url, data=params,
verify=False,
headers=self.get_headers(),
timeout=20)
except:
log.info("Biller Error")
return
if not resp:
log.info("No Response From Biller")
return
try:
result = json.loads(resp.text)
except:
result = resp.text
self.response = result
log.info("Inquiry Response: %s" % self.response)
return resp
def inquiry(self):
resp = self._inquiry()
if resp is None:
return self.set_failed(typ="inquiry")
if resp.status_code == 200:
parsd = self.response_field()
if "code" in parsd and parsd["code"] != 0:
return self.set_response(code=parsd["code"],
message=parsd["message"],
typ="inquiry")
return self.set_success(parsd, typ="inquiry")
else:
return self.set_failed(typ="inquiry")
def payment(self):
resp = self._inquiry()
typ = "payment"
if not resp:
return self.set_failed()
if self.response["code"] != 200 or self.response["is_error"] != 0:
parsd = self.inquiry_error(self.response)
return self.set_response(code=parsd["code"],
message=parsd["message"],
typ=typ)
data = self.response_field()
params = self.inquiry_field()
params.update({"jumlah_retribusi": data['rincian']['subtotal']})
self.request = params
self.save_log(typ=typ)
log.info("Payment url: {} params: {}".format(self.pay_url, json.dumps(params)))
try:
resp = requests.post(self.pay_url, data=json.dumps(params), verify=False,
headers=self.get_headers(), timeout=15)
except:
resp = None
if resp is None:
self.status = 0
return self.set_pending()
try:
result = json.loads(resp.text)
self.response = result
log.info("Payment Response: %s" % self.response)
except:
result = resp.text
self.response = result
log.info("Payment Response: %s" % self.response)
self.status = 0
return self.set_pending()
if self.response["code"] != 200 or self.response["is_error"] != 0:
parsd = self.inquiry_error(self.response)
return self.set_response(code=parsd["code"],
message=parsd["message"],
typ=typ)
elif resp.status_code == 200:
self.status = 1 # sukses
content = result["content"]
self.serial_number = 'no_reff' in content and content["no_reff"].strip() \
or self.serial_number
data["rincian"].update(dict(
serial_number=self.serial_number))
return self.set_success(data)
else:
self.status = 0
return self.set_pending()
def advice(self):
raise JsonRpcError(message="Not Implemented")
# if not self.v_produk_kd or not self.id_pel or not self.invoice_det:
# return dict(code=9999,
# message='Parameter tidak lengkap')
#
# if self.kategori == 'e-payment':
# order_id = self.invoice_det.vend_inv_no
# url = self.get_url('/order/{order_id}'.format(order_id=order_id))
# params = None
# self.request = url
# else:
# params = dict(
# data=dict(
# denom=self.v_produk_kd,
# number=self.id_pel
# )
# )
# self.request = params
# url = self.get_url('/prepaid/purchase-get')
#
# self.save_log("advice")
# 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
# parsd = self.pars_data(data)
#
# elif resp.status_code == 400:
# self.status = -3
# parsd = dict(code=resp.status_code,
# message=resp.text)
# else:
# self.status = -4
# parsd = dict(code=500,
# message="Other Error")
#
# self.save_log('advice')
# return parsd
import base64
import json
from time import sleep
import logging
from datetime import datetime
import requests
import urllib3
from opensipkd.base import get_settings
from opensipkd.base.tools import get_random_string, get_random_number
from opensipkd.base.tools import get_random_number
from opensipkd.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings()
"""
PJDL
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pjdlJson/pay
PBB
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/pbbJson/pay
BPHTB
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/inq
http://103.66.86.115:8989/interface-tangerang-1.0.0/bphtbJson/pay
"""
class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
......@@ -72,15 +53,10 @@ class Vendor(VendorClass):
}
def set_inquiry_error(self, resp):
def inquiry_error(self, resp):
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
return dict(code=code, message=message)
def response_field(self):
resp = self.response
......@@ -122,7 +98,7 @@ class Vendor(VendorClass):
return result
else:
self.set_inquiry_error(resp)
return self.inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
......@@ -172,7 +148,7 @@ class Vendor(VendorClass):
return self.set_failed()
if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response)
return self.inquiry_error(self.response)
params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params))
......
......@@ -73,15 +73,16 @@ class Vendor(VendorClass):
}
def set_inquiry_error(self, resp):
def inquiry_error(self, resp):
code = int(resp["responseCode"])
message = resp["responseDesc"]
if code == 54:
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
return dict(code=code, message=message)
# if code == 54:
# raise JsonRpcBillAllreadyPaidError()
# elif code == 55:
# raise JsonRpcBillNotFoundError()
# else:
# raise JsonRpcError(code=code, message=message)
def response_field(self):
resp = self.response
......@@ -121,7 +122,7 @@ class Vendor(VendorClass):
return result
else:
self.set_inquiry_error(resp)
return self.inquiry_error(resp)
def _inquiry(self):
if not self.v_produk_kd or not self.id_pel:
......@@ -171,7 +172,7 @@ class Vendor(VendorClass):
return self.set_failed()
if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response)
return self.inquiry_error(self.response)
params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params))
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!