odeo_pln.py 2.83 KB
import base64
import json

import requests
from opensipkd.base import get_settings

from .vendor import VendorClass


import urllib3
urllib3.disable_warnings()
class Vendor(VendorClass):
    def __init__(self, vendor_produk, bill_no, customer_id=None,
                 cust_trx_id=None, row=None):
        VendorClass.__init__(self, vendor_produk, bill_no, customer_id,
                             cust_trx_id, row)
        settings = get_settings()
        self.mid = 'odeo_mid' in settings and settings['odeo_mid'] or None
        self.key = 'odeo_key' in settings and settings['odeo_key'] or None
        self.url = 'odeo_url' in settings and settings['odeo_url'] or None
        self.url += '/prepaid/pln/purchase'
        key = ":".join([self.mid, self.key]).encode()
        self.auth = base64.b64encode(key)


    def request_post(self, params):
        headers = {'Authorization': 'Bearer {key}'.format(key=self.key)}
        data = json.dumps(params)
        with requests.session():
            resp = requests.post(url=self.url, data=data,
                                 verify=False, headers=headers)
        return resp

    def request_get(self, params, url=None):
        headers = {'Authorization': 'Bearer {key}'.format(key=self.key)}
        url = url and self.url+url or self.url
        with requests.session():
            resp = requests.get(url, params=params,
                                 verify=False, headers=headers)
        return resp

    def inquiry(self):
        if not self.v_produk_kd or not self.bill_no:
            return

        params = dict(
            data=dict(
                number=self.bill_no
            )
        )
        self.request = params
        self.save_log("inquiry")
        resp = self.request_get(params)
        content = None
        if resp and resp.text:
            content = json.loads(resp.text)

        if resp.ok:
            #todo mapping content
            result = content
        else:
            result = dict(code=resp.status_code,
                               message=resp.text)
        self.response = content
        self.save_log('payment')
        return result

    def advice(self):
        if not self.v_produk_kd or not self.bill_no:
            return

        params = dict(
            data=dict(
                denom=self.v_produk_kd,
                number=self.bill_no
            )
        )
        self.request = params
        self.save_log("advice")
        resp = self.request_get(params, '-get')
        content = None
        if resp and resp.text:
            content = json.loads(resp.text)

        if resp.ok:
            #todo mapping content
            result = content
        else:
            result = dict(code=resp.status_code,
                               message=resp.text)
        self.response = content
        self.save_log('payment')
        return result