test.py 12.3 KB
import base64
import json

import requests
from opensipkd.base import get_settings

from .vendor import VendorClass

from ..tools import log
import urllib3

urllib3.disable_warnings()


class Vendor(VendorClass):
    def __init__(self, vendor_produk, invoice_det):
        VendorClass.__init__(self, vendor_produk, invoice_det=invoice_det)

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

        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
        try:

            with requests.session():
                resp = requests.get(url, params=params,
                                verify=False, headers=headers)
        except:
            resp = None

        return resp
    """
    nopel	ALL	
    nama	ALL	
    refno	ALL	
    rincian		
        pokok	        ALL
        denda	        ALL
        coll_fee	    MF
        bill_rest	    BPJS
        admin	        ALL
        period	        PLN/PDAM/TELKOM/PGN/MF
        jml_bulan	    PLN/PDAM/BPJS
        meter	        PDAM/PGN
        penggunaan	    PGN
        jth_tempo	    MF/PAJAK
        platform	    MF
        cabang	        BPJS
        nm_cabang	    BPJS
        anggota	        BPJS
        tarif	        PLN-PRA/PASCA
        no_meter	    PLN-PRA
        power	        PLN-PRA
    subtotal		
    discount		
    total		
    
    """

    def inquiry(self):
        if not self.v_produk_kd or not self.id_pel:
            return dict(code=9999,
                        message='Parameter tidak lengkap')
        data = {
                "message": "DATA TIDAK DITEMUKAN",
            }

        if self.v_produk_kd[:3] == 'PLN' and self.v_produk_kd != 'PLNPASCA':
            # self.request = params
            # log.info("Test Inquiry Request: %s" % params)
            # self.save_log("inquiry")
            # resp = self.request_get(params, '/prepaid/pln/inquiry')
            data = {
                "nopel": "530678910981",
                "nama": "SUBCRIBER NAME",
                "refno": "25641544",
                "rincian":{
                    "pokok": 300000,
                    "denda": 0,
                    "admin": 2500,
                    "tarif": "R1/1300VA",
                    "no_meter": "530678910012",
                    "power": "1300VA"
                },
                "subtotal": 302500,
                "discount": 800,
                "total": 301700
            }

        elif self.v_produk_kd == "PLNPASCA":
            data = {
                "nopel": "530678910024",
                    "nama": "SUBCRIBER NAME",
                    "refno": "25641544",
                    "rincian": {
                        "pokok": 300000,
                        "denda": 0,
                        "admin": 2500,
                        "period": "2016-08",
                        "jml_bulan": 1,
                        "tarif": "R1/1300VA",
                        "no_meter": "530678910012",
                        "meter": "567-756"
                    },
                "subtotal": 302500,
                "discount": 800,
                "total": 301700
            }

        elif self.v_produk_kd[:7] == "BPJSKES":
            data = {
                "nopel": "2091161532456",
                "nama": "SUBCRIBER NAME",
                "refno": "25641544",
                "rincian": {
                    "pokok": 154200,
                    "denda": 0,
                    "admin": 2500,
                    "jml_bulan": 1,
                    "cabang": "-",
                    "bill_rest": 0,
                    "nm_cabang": "XXX",
                    "anggota": 3
                },
                "subtotal": 156700,
                "discount": 300,
                "total": 156400
            }

        elif self.v_produk_kd[:3] == "PAM":
            data = {
                "nopel": "636289",
                "nama": "SUBCRIBER NAME",
                "refno": "25641544",
                "rincian": {
                    "pokok": 68000,
                    "denda": 0,
                    "admin": 2500,
                    "period": "2016-07",
                    "jml_bulan": 1,
                    "meter": "140-162"
                },
                "subtotal": 70500,
                "discount": 600,
                "total": 69900
            }

        elif self.v_produk_kd[:3] == "PGN":
            data = {
                    "nopel": "873648273",
                    "nama": "SUBCRIBER NAME",
                    "refno": "25641544",
                    "rincian": {
                        "pokok": 68000,
                        "denda": 0,
                        "admin": 2500,
                        "period": "2016-07",
                        "meter": "140-162",
                        "penggunaan": "XXX"
                    },
                    "subtotal": 70500,
                    "discount": 600,
                    "total": 69900
                }

        elif self.v_produk_kd[:2] == "FN":
            data = {
                "nopel": "10929836451",
                "nama": "SUBCRIBER NAME",
                "refno": "25641544",
                "rincian": {
                    "pokok": 600000,
                    "denda": 25000,
                    "admin": 2000,
                    "period": "2016-07",
                    "coll_fee": "MF",
                    "jth_tempo": "02\/07\/2017",
                    "platform": "Konvensional",
                    "cicilan": "005\/011"
                },
                "subtotal": 627000,
                "discount": 900,
                "total": 626100
            }

        elif self.v_produk_kd[:6] == "TELKOM" or self.v_produk_kd[:4] == "INDI":
            data = {
                "nopel": "08119876543",
                "nama": "SUBCRIBER NAME",
                "refno": "25641544",
                "rincian": {
                    "pokok": 90000,
                    "denda": 0,
                    "admin": 1500,
                    "period": "2016-07"
                },
                "subtotal": 91500,
                "discount": 500,
                "total": 91000
            }

        log.info("Test Inquiry Response: %s" % data)

        # if resp.ok:
        #     self.status = 1  # sukses
        #     data = "data" in result and result["data"] or None
        #     parsd = self.pars_data(data)
        #     if parsd:
        #         parsd.update(code=0,
        #                      status="SUCCES")
        #
        # elif resp.status_code == 400:
        #     self.status = -1
        #     message = "data" in result and result["data"] or ""
        #     message = message and "errors" in message and message["errors"] or message
        #     message = type(message) is list and ", ".join(message) or message
        #
        #     parsd = dict(code=resp.status_code,
        #                  message=message)
        # else:
        #     self.status = -1
        #     parsd = dict(code=500,
        #                  message="Other Error")
        # if not parsd:
        #     parsd = dict(code=500,
        #                  message="Other Error")

        self.response = data
        log.info("Response To Cust: %s" % data)
        data["code"] = 0
        data["message"] = "SUCCESS"
        self.result = data
        self.save_log('inquiry')
        return data


    def gagal_transaksi(self, code):
        if code==400:
            self.status = -3
        else:
            self.status = -2

        parsd = dict(
            status="FAILED",
            code=code,
            message="Gagal Transaksi"
        )
        self.result = parsd
        self.save_log('payment')
        return parsd

    def payment(self):
        params = dict(
            data=dict(
                denom=self.v_produk_kd,
                number=self.id_pel
            )
        )

        self.request = params
        log.info("Test Payment Request: %s" % self.request)
        self.save_log("payment")
        inq = None

        if self.vendor_produk.produk.kategori.kode=="e-payment":
            inq = self.inquiry()
        data = {}
        if self.vendor_produk.produk.kategori in ["e-pulsa", "e-voucher"]:
            data = {"subtotal":self.vendor_produk.produk.harga,
                    "discount":0,
                    "total":5000,
                    "status":"PENDING"}

        self.response = data
        log.info("Test Payment Response: %s" % self.response)
        return data
        # odeo mengembalikan result dalam bentuk status
        # 0200 ok
        # 0400 bad request
        # 0401 auth error

        # parsd = {}
        # if resp.status_code == 200 and type(result) is dict:  # 0200
        #     data = "data" in result and result["data"] or {}
        #     # cel rc status
        #     if not data:
        #         return self.gagal_transaksi(500)
        #
        #     if "rc" in data:
        #         parsd["code"] = int(data["rc"])
        #
        #         if data["rc"] == "13":
        #             parsd["status"] = "FAILED"
        #             self.status = -2
        #         elif data["rc"] == "68":
        #             parsd["status"] = "PENDING"
        #             self.status = -1  # pending
        #         elif data["rc"] == "67":
        #             parsd["status"] = "DOUBLE"
        #             self.status = -2  # Gagal Karena Pernah Transaksi
        #             # Status ini hanya sementara nunggu refund
        #             # Status -2 ini harus dicari solusi mencari vendor lain
        #     else:
        #         self.status = 1
        #         parsd["code"] = 0
        #         parsd["status"] = "SUCCESS"
        #         self.serial_number = 'serial_number' in data and data["serial_numner"] \
        #                              or self.serial_number
        #
        #     self.vend_inv_no = "order_id" in data and data["order_id"] or {}
        #     if not inq:
        #         self.amt_buy = "price" in data and data["price"] or 0
        #
        #         parsd["total"] = self.amt_buy
        #     else:
        #         self.amt_buy = "price" in data and data["price"] or 0
        #         parsd["total"] = inq["total"]
        #         parsd["subtotal"] = inq["subtotal"]
        #         parsd["discount"] = inq["discount"]
        #
        #     self.result = parsd
        #     self.save_log('payment')
        #     return  parsd

        # else:  # BAD REQUEST
        #
        #     return self.gagal_transaksi(resp.status_code)

    def advice(self):
        pass
        # 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 = '/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
        #     self.save_log("advice")
        #     url = '/prepaid/purchase-get'
        #
        # self.save_log("advice")
        # resp = self.request_get(params, url)
        # try:
        #     result = json.loads(resp.text)
        # except:
        #     result = resp.text
        #
        # 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.response = result
        # self.save_log('advice')
        # return parsd