Commit ef35ab3e by aa.gusti

retribusi

1 parent cfbd28d5
...@@ -75,15 +75,17 @@ class Vendor(VendorClass): ...@@ -75,15 +75,17 @@ class Vendor(VendorClass):
} }
def set_inquiry_error(self, resp): def inquiry_error(self, resp):
code = int(resp["responseCode"]) code = int(resp["responseCode"])
message = resp["responseDesc"] message = resp["responseDesc"]
if code == 54: return dict(code=code, message=message)
raise JsonRpcBillAllreadyPaidError()
elif code == 55: # if code == 54:
raise JsonRpcBillNotFoundError() # raise JsonRpcBillAllreadyPaidError()
else: # elif code == 55:
raise JsonRpcError(code=code, message=message) # raise JsonRpcBillNotFoundError()
# else:
# raise JsonRpcError(code=code, message=message)
def response_field(self): def response_field(self):
resp = self.response resp = self.response
...@@ -176,7 +178,7 @@ class Vendor(VendorClass): ...@@ -176,7 +178,7 @@ class Vendor(VendorClass):
return result return result
else: else:
self.set_inquiry_error(resp) return self.inquiry_error(resp)
def _inquiry(self): def _inquiry(self):
if not self.v_produk_kd or not self.id_pel: if not self.v_produk_kd or not self.id_pel:
...@@ -226,7 +228,7 @@ class Vendor(VendorClass): ...@@ -226,7 +228,7 @@ class Vendor(VendorClass):
return self.set_failed() return self.set_failed()
if self.response["responseCode"] != "00": if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response) return self.inquiry_error(self.response)
params = json.dumps(self.response) params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params)) 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 base64
import json import json
from time import sleep import logging
from datetime import datetime from datetime import datetime
import requests import requests
import urllib3
from opensipkd.base import get_settings 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.base.tools.api import JsonRpcBillAllreadyPaidError, JsonRpcBillNotFoundError
from opensipkd.pasar.models import PartnerProduk, H2hArInvoiceDet
from pyramid_rpc.jsonrpc import JsonRpcError from pyramid_rpc.jsonrpc import JsonRpcError
from ..vendor import VendorClass from ..vendor import VendorClass
import logging
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
import urllib3
urllib3.disable_warnings() 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): class Vendor(VendorClass):
def __init__(self, vendor_produk, invoice_det): def __init__(self, vendor_produk, invoice_det):
VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det) VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)
...@@ -72,15 +53,10 @@ class Vendor(VendorClass): ...@@ -72,15 +53,10 @@ class Vendor(VendorClass):
} }
def set_inquiry_error(self, resp): def inquiry_error(self, resp):
code = int(resp["responseCode"]) code = int(resp["responseCode"])
message = resp["responseDesc"] message = resp["responseDesc"]
if code == 54: return dict(code=code, message=message)
raise JsonRpcBillAllreadyPaidError()
elif code == 55:
raise JsonRpcBillNotFoundError()
else:
raise JsonRpcError(code=code, message=message)
def response_field(self): def response_field(self):
resp = self.response resp = self.response
...@@ -122,7 +98,7 @@ class Vendor(VendorClass): ...@@ -122,7 +98,7 @@ class Vendor(VendorClass):
return result return result
else: else:
self.set_inquiry_error(resp) return self.inquiry_error(resp)
def _inquiry(self): def _inquiry(self):
if not self.v_produk_kd or not self.id_pel: if not self.v_produk_kd or not self.id_pel:
...@@ -172,7 +148,7 @@ class Vendor(VendorClass): ...@@ -172,7 +148,7 @@ class Vendor(VendorClass):
return self.set_failed() return self.set_failed()
if self.response["responseCode"] != "00": if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response) return self.inquiry_error(self.response)
params = json.dumps(self.response) params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params)) log.info("Payment url: {} params: {}".format(self.pay_url, params))
......
...@@ -73,15 +73,16 @@ class Vendor(VendorClass): ...@@ -73,15 +73,16 @@ class Vendor(VendorClass):
} }
def set_inquiry_error(self, resp): def inquiry_error(self, resp):
code = int(resp["responseCode"]) code = int(resp["responseCode"])
message = resp["responseDesc"] message = resp["responseDesc"]
if code == 54: return dict(code=code, message=message)
raise JsonRpcBillAllreadyPaidError() # if code == 54:
elif code == 55: # raise JsonRpcBillAllreadyPaidError()
raise JsonRpcBillNotFoundError() # elif code == 55:
else: # raise JsonRpcBillNotFoundError()
raise JsonRpcError(code=code, message=message) # else:
# raise JsonRpcError(code=code, message=message)
def response_field(self): def response_field(self):
resp = self.response resp = self.response
...@@ -121,7 +122,7 @@ class Vendor(VendorClass): ...@@ -121,7 +122,7 @@ class Vendor(VendorClass):
return result return result
else: else:
self.set_inquiry_error(resp) return self.inquiry_error(resp)
def _inquiry(self): def _inquiry(self):
if not self.v_produk_kd or not self.id_pel: if not self.v_produk_kd or not self.id_pel:
...@@ -171,7 +172,7 @@ class Vendor(VendorClass): ...@@ -171,7 +172,7 @@ class Vendor(VendorClass):
return self.set_failed() return self.set_failed()
if self.response["responseCode"] != "00": if self.response["responseCode"] != "00":
self.set_inquiry_error(self.response) return self.inquiry_error(self.response)
params = json.dumps(self.response) params = json.dumps(self.response)
log.info("Payment url: {} params: {}".format(self.pay_url, params)) 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!