odeo.py 5.13 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
        key = ":".join([self.mid, self.key]).encode()
        self.auth = base64.b64encode(key).decode()


    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
        with requests.session():
            resp = requests.post(url, data=data,
                                 verify=False, headers=headers)
        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
        with requests.session():
            resp = requests.get(url, params=params,
                                verify=False, headers=headers)
        return resp

    def inquiry(self):
        # PLN ONLY
        if not self.v_produk_kd or not self.bill_no:
            return
        b
        if self.v_produk_kd =='PLN' and self.v_produk_kd != 'PLNPASCA':
            params = dict(
                data=dict(
                    number=self.bill_no
                )
            )
            self.request = params
            self.save_log("inquiry")
            resp = self.request_get(params, '/prepaid/pln/inquiry')
        else:
            params = dict(
                denom=self.v_produk_kd,
                number=self.bill_no
            )
            self.request = params
            self.save_log("inquiry")
            resp = self.request_get(params, '/postpaid/inquiry')

        content = None
        if resp and resp.text:
            content = json.loads(resp.text)

        if resp.ok:
            # todo mapping content
            """
            {
              "status": "SUCCESS",
              "data": {
                "number": "XXX",
                "subscriber_id": "XXX",
                "name": "XXX",
                "tariff": "XXX",
                "power": "XXX"
              },
              "message": ""
            }"""
            result = content
        else:
            result = dict(code=resp.status_code,
                          message=resp.text)
        self.response = content
        self.save_log('inquiry')
        return result

    def payment(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("payment")
        resp = self.request_post(params, '/prepaid/purchase')
        content = None
        if resp and resp.text:
            content = json.loads(resp.text)
        
        if resp.ok:
            #todo mapping content
            """
            {
              "status": "SUCCESS",
              "data": {
                "order_id": 1,
                "price": 5675
              },
              "message": ""
            }
            {
              "status": "BAD_REQUEST",
              "data": {
                "errors": [
                  "ERROR_MESSAGE_1",
                  "ERROR_MESSAGE_2",
                  "ERROR_MESSAGE_ETC"
                ]
              },
              "message": ""
            }
            {
              "status": "UNAUTHORIZED",
              "data": {
                "errors": [
                  "Unauthorized"
                ]
              },
              "message": ""
            }
            """
            result = content
        else:
            content = json.loads(resp.text)
            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

        #todo: product category e-payment '/order/{order_id}'

        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, '/prepaid/purchase-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