test.py 11 KB
import base64
from datetime import datetime

from opensipkd.base.tools import ymdhms, dmyhms
from pyramid.view import view_config
import logging
log = logging.getLogger(__name__)
"""
odeo-purchase http://server/api/odeo/prepaid/purchase
"""


def validate_header(request, data):
    # env = request.environ
    # #http_header = env["HTTP_HEADER"]
    # # log.info(env)
    # if 'HTTP_AUTHORIZATION' not in env:
    #     log.info("HTTP_AUTHORIZATION tidak ditemukan")
    #     return
    #
    # auth = env['HTTP_AUTHORIZATION'].split()
    # log.info(auth)
    # if len(auth)<2 or auth[0] != "Bearer":
    #     log.info('Error Auth')
    #     return
    #
    # key = ":".join(['agratek', '4444444']).encode()
    # key_encoded = base64.b64encode(key).decode()
    # log.info(key_encoded)
    # if auth[1]!= key_encoded:
    #     return

    hash_string = "".join([self.mid, tanggal, self.key])
    self.auth = hashlib.sha256(hash_string.encode()).hexdigest()

    return True

def anauthorized(request):
    request.response.status = 401
    result = {
        "status": "UNAUTHORIZED",
        "data": {
            "errors": [
              "Unauthorized"
            ]
        },
        "message": ""
    }
    return result


def bad_request(request, message=None):
    if not message:
        message = "Paramter(s) Expected"
    request.response.status = 400
    result = {
        "status": "BAD_REQUEST",
        "data": {
            "errors": [
                "ERROR_MESSAGE_1",
                "ERROR_MESSAGE_2",
                "ERROR_MESSAGE_ETC"
            ]
          },
          "message": message
    }
    return result

def pulsa_result(request, params):
    """
    :param request:
    :param params:
        cid={CLIENT_ID}
        dt={DATE}
        hc={HASHCODE}
        modul=ISI
        command=INQ
        tujuan=nomor
        voucherid={VOUCHERID}
        trxid={TRXID}
        resp=XML
    :return:
    """
    s = datetime.now()
    tanggal = ymdhms(s)
    tanggal2 = dmyhms(s)
    result = """<?xml version="1.0" encoding="UTF-8"?>
        <root>
          <harga>5825</harga>
          <nominal>5000</nominal>
          <nomor>{tujuan}</nomor>
          <rc>0000</rc>
          <rcm>[0] Pembayaran Sukses ke:{tujuan}</rcm>
          <refnum>2A076C6A1D6CB5E63E60000000000000</refnum>
          <serialnumber>4A61D574138A2D6B4B6</serialnumber>
          <status>SUCCESS</status>
          <tanggal>{tanggal}</tanggal>
          <text>Isi pulsa TN5 berhasil untuk nomor {tujuan} sebesar 5.000, refnum 2A076C6A1D6CB5E63E60000000000000 pada 
          tgl {tanggal2}</text>
          <trxid>{trxid}</trxid>
          <voucherid>{voucherid}</voucherid>
        </root>
        """.format(tujuan=params["tujuan"], tanggal=tanggal, tanggal2=tanggal2,
                   voucherid=params["voucherid"], trxid=params["trxid"])
    request.response.text = result
    return request.response

def pulsa_produk_not_found(request, params):
    tanggal = datetime.now().strftime("%d-%m-%y %H:%M:%S")

    result = """
            <root>
              <nomor>{tujuan}</nomor>
              <rc>0033</rc>
              <rcm>[33] Produk Tidak Terdaftar</rcm>
              <status>FAILED</status>
              <tanggal>{tanggal}</tanggal>
              <text>Produk Tidak Terdaftar</text>
              <trxid>{trxid}</trxid>
              <voucherid>{voucherid}</voucherid>
            </root>
            """.format(tujuan=params["tujuan"], tanggal=tanggal, trxid=params["trxid"],
                       voucherid=params["voucherid"])
    request.response.text = result
    return request.response

def plnpre_inq_result(request, params):
    """
    :param request:
    :param params:
        {'nominal': '20000',
         'command': 'INQ',
         'msn': '77777777777',
         'cid': 'agratek8293-11e6-8325-002207194ks3s',
         'hc': '5be201353753e353f5208741b3ace4a07773921183d241b65807a7a314bfbfce',
         'trxid': 329,
         'modul': 'PRE',
         'resp': 'XML',
         'dt': '20190901'}
    :return:
    """
    result = """<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <admin>1600</admin>
       <denomunsold></denomunsold>
       <msn>{msn}</msn>
       <nama>TestDu''mmy&amp;Panjang773333</nama>
       <rc>0000</rc>
       <rcm>[0] CEK TAGIHAN SUKSES ke:{msn} refnum:F59D2CA7352C4552BD318D15C31D6DA5</rcm>
       <refnum>F59D2CA7352C4552BD318D15C31D6DA5</refnum>
       <status>SUCCESS</status>
       <subid>773333333333</subid>
       <tarif>R3/6600</tarif>
       <text>77777777777
            TestDu''mmy&amp;
            R3/6600 VA
            Token Unsold: 0
            Adm 1.600,00
            *Denom Belum Termasuk Admin</text>
       <trxid>{trxid}</trxid>
       <unsold>0</unsold>
    </root>
    """.format(msn=params["msn"], trxid=params["trxid"])
    request.response.text = result
    return request.response

def plnpre_pay_result(request, params):
    s = datetime.now()
    tanggal = ymdhms(s)
    tanggal2 = dmyhms(s)
    result ="""<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <admin>1600</admin>
       <angsuran>2400</angsuran>
       <idpel>776666666666</idpel>
       <info>Informasi Hubungi Call Center 123 Atau hubungi PLN Terdekat</info>
       <jmlkwh>35.2</jmlkwh>
       <materai>0</materai>
       <msn>{msn}</msn>
       <nama>TestDu''mmy&amp;Panjang776666</nama>
       <nominal>21600</nominal>
       <ppj>0</ppj>
       <ppn>0</ppn>
       <rc>0000</rc>
       <rcm>[0] PEMBAYARAN SUKSES ke:{msn} refnum:0BMS213515667BF970E3C2D532999FC7</rcm>
       <rptoken>17600</rptoken>
       <status>SUCCESS</status>
       <tanggal>{tanggal}</tanggal>
       <tarifdaya>R1/7000</tarifdaya>
       <text>{tanggal2}
            0BMS213515667BF970E3C2D532999FC7
            TestDu''mmy&amp;
            {msn}
            776666666666
            R1/7000 VA
            RP 21.600
            KWH35,2
            STROOM/TOKEN 9536 6725 7956 8770 2361
            ADM 1.600,00</text>
       <token>9536-6725-7956-8770-2361</token>
       <trxid>{trxid}</trxid>
    </root>
    """.format(msn=params["msn"], trxid=params["trxid"], tanggal=tanggal,
               tanggal2=tanggal2)
    request.response.text = result
    return request.response

def pln_inq_result(request, params):
    """
    :param request:
    :param params:
        {
          'idpel': '532110000056',
          'command': 'INQ',
          'cid': 'agratek8293-11e6-8325-002207194ks3s',
          'hc': '5be201353753e353f5208741b3ace4a07773921183d241b65807a7a314bfbfce',
          'trxid': 332,
          'modul': 'pln',
          'resp': 'XML',
          'dt': '20190901'
        }
    :return:
    """
    result = """<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <admin>1600</admin>
       <blth>JAN19</blth>
       <bulan>1 BLN</bulan>
       <nama>DU'MMY-VSI-{idpel}</nama>
       <rc>0000</rc>
       <rcm>[0] CEK TAGIHAN SUKSES ke:{idpel} refnum:EEC3FC4A371C44628C75E7AFC3313316</rcm>
       <refnum>EEC3FC4A371C44628C75E7AFC3313316</refnum>
       <status>SUCCESS</status>
       <subid>{idpel}</subid>
       <tagihan>363129</tagihan>
       <tarif>R1/450</tarif>
       <text>{idpel}
            DU'MMY-VSI-532110000
            R1/450
            1 BLN
            JAN19
            RP TAG PLN RP 363.129
            ADM RP 1.600
            TOTAL RP 364.729</text>
       <total>364729</total>
       <trxid>{trxid}</trxid>
    </root>
    """.format(idpel=params["idpel"], trxid=params["trxid"])
    request.response.text = result
    return request.response

def pln_pay_result(request, params):
    s = datetime.now()
    tanggal = ymdhms(s)
    tanggal2 = dmyhms(s)
    result ="""<?xml version="1.0" encoding="UTF-8"?>
    <root>
       <admin>1600</admin>
       <blth>JAN19</blth>
       <date>{tanggal}</date>
       <denda>9000</denda>
       <info1>Informasi Hubungi Call Center: 123 Atau Hub. PLN Terdekat:</info1>
       <info2>Terima Kasih</info2>
       <nama>DU'MMY-VSI-{idpel}</nama>
       <ppn>0</ppn>
       <rc>0000</rc>
       <rcm>[0] PEMBAYARAN SUKSES ke:532110000056 refnum:0BMS2135132129A7020C73244C9FD70E</rcm>
       <refnum>0BMS2135132129A7020C73244C9FD70E</refnum>
       <standmeter>888800-889900</standmeter>
       <status>SUCCESS</status>
       <subid>{idpel}</subid>
       <tagihan>363129</tagihan>
       <tarif>R1/450</tarif>
       <text>{tanggal2}
            0BMS2135132129A7020C73244C9FD70E
            {idpel}
            DU'MMY-VSI-532110000
            R1/450
            BLN JAN19
            RP 363.129
            ADM RP 1.600
            TOTAL RP 364.729
            SUKSES</text>
       <total>364729</total>
       <trxid>trxid</trxid>
    </root>
    """.format(idpel=params["idpel"], trxid=params["trxid"], tanggal=tanggal,
               tanggal2=tanggal2)
    request.response.text = result
    return request.response

@view_config(route_name='api-vsi', renderer='json', request_method="GET")
def view_vsi(request):
    params = request.params
    command = params["command"]
    modul = params["modul"]

    if modul=="ISI" :
        voucherid = params["voucherid"]
        if  command == "PAY" and voucherid=="TN5":
            return pulsa_result(request, params)
        else:
            return pulsa_produk_not_found(request, params)
    elif modul=="PRE":
        # PLN Prabayar
        if command == "INQ":
            return plnpre_inq_result(request, params)
        elif command == "PAY":
            return plnpre_pay_result(request, params)

    elif modul=="pln":
        # PLN Pasca
        if command == "INQ":
            return pln_inq_result(request, params)
        elif command == "PAY":
            return pln_pay_result(request, params)

    # elif modul == "PDAM":
    #     # PDAM
    #     if command == "INQ":
    #         return pdam_inq_result(request, params)
    #     elif command == "PAY":
    #         return pdam_pay_result(request, params)
    #
    # elif modul == "gp":
    #     # BPJS Kesehatan
    #     if command == "INQ":
    #         return bpjs_inq_result(request, params)
    #     elif command == "PAY":
    #         return bpjs_pay_result(request, params)

    tanggal = dmyhms(datetime.now())
    tujuan = "tujuan" in params and "tujuan" or ""
    tujuan = "msn" in params and "msn" or tujuan
    tujuan = "idpel" in params and "idpel" or tujuan
    voucherid = "voucherid" in params and params["voucherid"] or ""

    result = """
               <root>
                 <nomor>{tujuan}</nomor>
                 <rc>0500</rc>
                 <rcm>[500] Command Error {modul} command {command}</rcm>
                 <status>FAILED</status>
                 <tanggal>{tanggal}</tanggal>
                 <text>Command Error</text>
                 <trxid>{trxid}</trxid>
                 <voucherid>{voucherid}</voucherid>
                 <voucherid>{modul}</voucherid>
                 <voucherid>{command}</voucherid>
               </root>
               """.format(tujuan=params[tujuan], tanggal=tanggal,
                          trxid=params["trxid"], voucherid=voucherid,
                          modul=params["modul"], command=params["command"])
    request.response.text = result
    return request.response