__init__.py 3.23 KB
from pprint import pprint
import requests
from .structure import (
    INQUIRY_PATH,
    PAYMENT_PATH,
    REVERSAL_PATH,
    KODE_IZIN,
    )


class WebClient:
    def __init__(
            self, base_url, username, password, debug=False, ssl_verify=True):
        self.inquiry_url_tpl = ''.join([base_url, INQUIRY_PATH])
        self.payment_url_tpl = ''.join([base_url, PAYMENT_PATH])
        self.reversal_url_tpl = ''.join([base_url, REVERSAL_PATH])
        self.username = username
        self.password = password
        self.debug = debug
        self.ssl_verify = ssl_verify

    def send(self, url):
        self.debug_info(f'Request to {url}')
        r = requests.get(url, timeout=15, verify=self.ssl_verify)
        self.debug_info(f'Response:')
        self.debug_info(r.text)
        return r.json()

    def inquiry(self, invoice_id):
        url = self.inquiry_url_tpl.format(
                username=self.username, password=self.password,
                invoice_id=invoice_id)
        return self.send(url)

    def payment(self, invoice_id, ntb, nominal):
        url = self.payment_url_tpl.format(
                username=self.username, password=self.password,
                invoice_id=invoice_id, ntb=ntb, nominal=nominal)
        return self.send(url)

    def reversal(self, invoice_id, ntb):
        url = self.reversal_url_tpl.format(
                username=self.username, password=self.password,
                invoice_id=invoice_id, ntb=ntb)
        return self.send(url)

    def debug_info(self, msg):
        if not self.debug:
            return
        if isinstance(msg, dict):
            pprint(msg)
        else:
            print(msg)


class Inquiry(WebClient):
    def __init__(
            self, base_url, username, password, invoice_id, debug=False,
            do_inquiry=True):
        super().__init__(base_url, username, password, debug, False)
        self.invoice_id = invoice_id
        self.invoice = None
        if do_inquiry:
            self.do_inquiry()

    def do_inquiry(self):
        self.resp = self.inquiry(self.invoice_id)
        if self.resp['code'] in ('01', '02'):
            self.invoice = self.resp['data'][0]
            self.tagihan = self.invoice['tagihan_skrd']
            self.denda = self.invoice['tagihan_denda']
            self.total = self.invoice['total']

    def kode_izin(self):
        return KODE_IZIN[self.invoice['kode_izin']]

    def nama_izin(self):
        return self.invoice['jenis_izin']

    def jenis_layanan(self):
        return self.invoice['tipe_permohonan']

    def nomor_resi(self):
        return self.invoice['nomor_resi']

    def nama_wp(self):
        return self.invoice['perusahaan']

    def lokasi(self):
        return self.invoice['lokasi']

    def tagihan(self):
        return self.invoice['tagihan_skrd']

    def denda(self):
        return self.invoice['tagihan_denda']

    def ntp(self):
        return self.payment['ntp']

    def do_payment(self, ntb):  # Digunakan opensipkd-iso8583-bjb
        resp = self.payment(self.invoice_id, ntb, self.total)
        if resp['code'] in ('01', '02'):
            self.payment = resp['data'][0]
        return resp

    def do_reversal(self, ntb):  # Digunakan opensipkd-iso8583-bjb
        return self.reversal(self.invoice_id, ntb)