vsi_pulsa.py 5.08 KB
# 1. Inquiry: protokol untuk melakukan pengecekan data pembelian
"""
VOUCHER
REQ :
        cid={CLIENT_ID}
        dt={DATE}
        hc={HASHCODE}
        modul=ISI
        command=INQ
        tujuan=nomor
        voucherid={VOUCHERID}
        trxid={TRXID}
        resp=XML

Contoh response Sukses:
<?xml version="1.0"?>
<root>
    <status>SUCCESS</status>
    <rc>0000</rc>
    <rcm>0000</rcm>
    <text>[0] Cek Tagihan Sukses ke:628523123789</text>
    <refnum>Cek pulsa TN5 berhasil dengan nominal 5.000,
        refnum 4DB3DC0A2539419F8C50000000000000</refnum>
    <voucherid>4DB3DC0A2539419F8C50000000000000</voucherid>
    <destnum>TN5</destnum>
    <nominal>628523123789</nominal>
</root>
Contoh response Error:
ERROR#0053#[53] ERROR Produk tidak ditemukan
"""

# 2. Auto Payment: protokol untuk melakukan pembayaran/pembelian tanpa harus
#         melakukan inquiry terlebih dahulu
"""
REQ :
        cid={CLIENT_ID}
        dt={DATE}
        hc={HASHCODE}
        modul=ISI
        command=PAY
        tujuan=nomor
        voucherid={VOUCHERID}
        trxid={TRXID}
        resp=XML

Contoh request :
    cid=btsp6ffacfed-6293-11e6-8325-002590495dna
    &dt=20180723
    &hc=a85a020f3896298140c99a8509afcfad6272a717cc2aba8f842e68485e0a2642
    &modul=ISI
    &command=PAY
    &tujuan=08572120002
    &voucherid=TN25
    &trxid=xxx1
    &resp=XML
RESP :
Contoh response Sukses:
<?xml version="1.0"?>
<root>
    <status>SUCCESS</status>
    <rc>0000</rc>
    <rcm>0000</rcm>
    <text>[0] Pembayaran Sukses ke:08527778889</text>
    <date>Isi pulsa TN10 berhasil untuk nomor 628527778889 sebesar 10.000, refnum
    F148919BB5F4093A0F40000000000000 pada tgl 17/04/17 15:40</date>
    <refnum>2017-04-17 15:40:28</refnum>
    <voucherid>47C6DEFB60A34939B18DDBE2FE86D5D3</voucherid>
    <destnum>TN10</destnum>
    <nominal>628527778889</nominal>
    <serial>10000</serial>
</root>
Contoh response Error:
ERROR#0056#[56] Nomor Telpon tidak diketahui
"""
# 3. Advice: protokol untuk melakukan pengecekan transaksi dengan input payment refnum

import requests
import xmltodict
from ..tools import log
from .vsi import Vendor as VendorClass


# todo: result harus distandarisasi
class Vendor(VendorClass):
    def pars_data(self, data):
        """
        <status>SUCCESS</status>
        <rc>0000</rc>
        <rcm>0000</rcm>
        <text>[0] Pembayaran Sukses</text>
        <date>Isi pulsa TN10 berhasil untuk nomor 628527778889 sebesar 10.000, refnum F148919BB5F4093A0F40000000000000 pada tgl 17/04/17 15:32</date>
        <refnum>2017-04-17 15:40:28</refnum>
        <voucherid>4A61D574138A2D6B4B6 </voucherid>
        <destnum>TN10</destnum>
        <nominal>10000</nominal>
        <serial>4A61D574138A2D6B4B6 </serial>
        :return:
        """
        result = dict(
            status="status" in data and data["status"] or "FAILED",
            code="rc" in data and int(data["rc"]) or 0,
            message="rcm" in data \
                    and (data["rcm"] == "00000" and "Sukses" or data["rcm"]) \
                    or "PENDING",
            serial_number="voucherid" in data and data["voucherid"] or ""
        )
        return result

    def inquiry(self):
        params = self.get_params(cmd='INQ', modul='ISI')
        params["tujuan"] = self.id_pel
        params["voucherid"] = self.invoice_det.produk.kode
        self.request = params
        self.save_log('inquiry')
        log.info("VSI PULSA Request: %s %s" % (self.url, self.request))
        try:
            result = requests.get(self.url, params=params)
            if result.ok:
                data = xmltodict.parse(result.text)["root"]
            else:
                data = dict(code=result.status_code,
                            message=result.text)

        except requests.exceptions.RequestException as e:
            data = dict(code=e.errno,
                        message=e.strerror)

        self.response = data
        self.result = self.pars_data(data)
        self.save_log('inquiry')
        return data

    def payment(self):
        params = self.get_params(cmd='PAY', modul='ISI')
        self.request = params
        result = requests.get(self.url, params=params)
        if result.ok:
            data = xmltodict.parse(result.text)["root"]
            self.response = data
        else:
            data = dict(error=result.status_code)

        self.save_log('payment')
        return data

    def advice(self):
        params = self.get_params(cmd='ADV', modul='ISI')
        self.request = params
        result = requests.get(self.url, params=params)
        if result.ok:
            data = xmltodict.parse(result.text)["root"]
            self.response = data
        else:
            data = dict(error=result.status_code)
        self.save_log('advice')
        return data

    def info(self):
        params = self.get_params(cmd='info', modul='ISI')
        self.request = params
        result = requests.get(self.url, params=params)
        if result.ok:
            data = xmltodict.parse(result.text)["root"]
            self.response = data
        else:
            data = dict(error=result.status_code)
        self.save_log('info')
        return data