__init__.py 6.13 KB
import base64
import hashlib
import json
from datetime import datetime

import requests
import xmltodict
from opensipkd.base import get_settings
from opensipkd.pasar.models import Partner, PartnerProduk, Produk
from pyramid_rpc.jsonrpc import JsonRpcError

vsi_status = {
    "11": {"message": "ERROR NEED TO SIGN ON", "status": -3, "code": 99},
    "12": {"message": "ERROR Tidak bisa dibatalkan", "status": -1, "code": 68},
    "13": {"message": "ERROR Nilai Transaksi tidak valid", "status": -3, "code": 99},
    "17": {"message": "ERROR ID Punya Tunggakan", "status": -3, "code": 99},

    "88": {"message": "ERROR Tagihan sudah dibayar", "status": -3, "code": 54},
    "89": {"message": "ERROR Tagihan tidak tersedia", "status": -3, "code": 55},

    "14": {"message": "ERROR ID Tidak Terdaftar", "status": -3, "code": 55},
    "15": {"message": "ERROR No Meter Tidak Terdaftar", "status": -3, "code": 55},
    "33": {"message": "ERROR Produk tidak terdaftar", "status": -3, "code": 55},
    "31": {"message": "ERROR Kode Bank tidak terdaftar", "status": -3, "code": 55},
    "32": {"message": "ERROR Sentral tidak terdaftar", "status": -3, "code": 55},
    "16": {"message": "ERROR PRR SUBSCRIBER", "status": -3, "code": 55},
    "34": {"message": "ERROR PPID Tidak terdaftar", "status": -3, "code": 55},
    "35": {"message": "ERROR Akun Tidak Terdaftar", "status": -3, "code": 55},
    "53": {"message": "ERROR Produk tidak ditemukan", "status": -3, "code": 55},
    "56": {"message": "ERROR Nomor Telpon Tidak diketahui", "status": -3, "code": 55},

    "18": {"message": "ERROR Permintaan Sedang diproses", "status": -1, "code": 68},
    "26": {"message": "Quota Transaksi Agen Tidak Mencukupi. Silahkan Kontak Agen.", "status": 0, "code": 68},
    "29": {"message": "ERROR Kode Hash tidak valid", "status": -2, "code": 68},
    "30": {"message": "ERROR Pesan tidak valid", "status": -2, "code": 68},
    "46": {"message": "ERROR Deposit Tidak Mencukupi", "status": -2, "code": 68},
    "52": {"message": "ERROR Transaksi dipending dari Mesin Vending", "status": -1, "code": 68 },
    "68": {"message": "ERROR Timeout", "status": -1, "code": 68 },
    "70": {"message": "ERROR Timeout tidak refund", "status": -1, "code": 68},
    "73": {"message": "ERROR Request dipending di Biller", "status": -1, "code": 68},

    "51": {"message": "ERROR Transaksi Gagal dari Mesin Vending", "status": -3, "code": 99},

    "41": {"message": "ERROR Nilai Transaksi dibawah Nilai Minimum", "status": -3, "code": 99},
    "42": {"message": "ERROR Nilai Transaksi diatas Nilai Maximum", "status": -3, "code": 99},
    "43": {"message": "ERROR Daya Baru Lebih Kecil dari Daya Sekarang", "status": -3, "code": 99},
    "44": {"message": "ERROR Nilai Daya Tidak Valid", "status": -3, "code": 99},
    "45": {"message": "ERROR Nilai Biaya Administrasi Tidak Valid", "status": -3, "code": 99},
    "47": {"message": "ERROR Diluar Batas KWH", "status": -3, "code": 99},
    "48": {"message": "ERROR Permintaan sudah kadaluarsa", "status": -3, "code": 99},
    "54": {"message": "ERROR Jawaban dari Biller Tidak ditemukan", "status": -3, "code": 99},
    "55": {"message": "ERROR Lainnya Mesin Vending", "status": -3, "code": 99},
    "63": {"message": "ERROR Tidak ada Pembayaran", "status": -3, "code": 99},
    "60": {"message": "ERROR Akun sudah didaftarkan", "status": -3, "code": 99},
    "67": {"message": "ERROR CANNOT CONNECT", "status": -3, "code": 99},
    "69": {"message": "ERROR Sertifikat tidak dikenal", "status": -3, "code": 99},
    "72": {"message": "ERROR Permintaan tidak mungkin dilayani", "status": -3, "code": 99},
    "77": {"message": "ERROR Id di suspend", "status": -2, "code": 68},
    "90": {"message": "ERROR sedang proses CUT OFF", "status": -3, "code": 99},
    "91": {"message": "ERROR Database", "status": -3, "code": 99},
    "92": {"message": "ERROR Nomor Referensi Switching tidak ditemukan", "status": -3, "code": 99},
    "93": {"message": "ERROR Nomor Referensi Switching tidak valid", "status": -3, "code": 99},
    "94": {"message": "ERROR Pembatalan sudah dilakukan", "status": -3, "code": 99},
    "95": {"message": "ERROR Kode Merchant tidak terdaftar", "status": -3, "code": 99},
    "96": {"message": "ERROR Transaksi tidak ditemukan", "status": -3, "code": 99},
    "97": {"message": "ERROR SW BANK Tidak identik", "status": -3, "code": 99},
    "98": {"message": "ERROR Nomor Referensi Switching tidak valid", "status": -3, "code": 99},
   "146": {"message": "ERROR di servis deposit", "status": -3, "code": 99},
   "500": {"message": "ERROR Other Error", "status": -2, "code": 68},
   "400": {"message": "ERROR Other Error", "status": -2, "code": 68},
   "999": {"message": "ERROR Other Error", "status": -2, "code": 68},
}
from ..vendor import VendorClass

class Vendor(VendorClass):
    def __init__(self, vendor_produk, invoice_det, **kwargs):
        # customer_id=None,
        #         cust_trx_id=None, row=None):
        """
        :param produk_kd:
            merupakan kode produk versi vendor

        :param trx_id:
            kode unik transaksi
        :param cid:
            merupakan customer id seperti MSN dan atu id pelanggaan
        """
        VendorClass.__init__(self, vendor_produk=vendor_produk,
                             invoice_det=invoice_det)
        # , customer_id, cust_trx_id, row)
        settings = get_settings()
        self.mid = 'vsi_mid' in settings and settings['vsi_mid'] or None
        self.key = 'vsi_key' in settings and settings['vsi_key'] or None
        self.url = 'vsi_url' in settings and settings['vsi_url'] or None

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

    def get_params(self, cmd, msn=None, idpel=None, modul=None):
        tanggal = datetime.now().strftime('%Y%m%d')
        params = dict(
            cid=self.mid,
            dt=tanggal,
            hc=self.get_hc(tanggal),
            modul=modul,
            command=cmd,
            resp='XML',
            trxid=self.invoice_det.id,
        )
        if msn:
            params['msn'] = msn

        if idpel:
            params['idpel'] = idpel

        return params