__init__.py 5.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

from ..vendor import VendorClass

vsi_status = {
    "11":{"message":"ERROR NEED TO SIGN ON", "status":-1},
    "12":{"message":"ERROR Tidak bisa dibatalkan","status":-1},
    "13":{"message":"ERROR Nilai Transaksi tidak valid","status":-3},
    "14":{"message":"ERROR ID Tidak Terdaftar","status":-3},
    "15":{"message":"ERROR No Meter Tidak Terdaftar","status":-3},
    "16":{"message":"ERROR PRR SUBSCRIBER","status":-3},
    "17":{"message":"ERROR ID Punya Tunggakan","status":-3},
    "18":{"message":"ERROR Permintaan Sedang diproses","status":-1},
    "26":{"message":"Quota Transaksi Agen Tidak Mencukupi. Silahkan Kontak Agen.","status":-2},
    "29":{"message":"ERROR Kode Hash tidak valid","status":-2},
    "30":{"message":"ERROR Pesan tidak valid","status":-2},
    "31":{"message":"ERROR Kode Bank tidak terdaftar","status":-2},
    "32":{"message":"ERROR Sentral tidak terdaftar","status":-2},
    "33":{"message":"ERROR Produk tidak terdaftar","status":-2},
    "34":{"message":"ERROR PPID Tidak terdaftar","status":-2},
    "35":{"message":"ERROR Akun Tidak Terdaftar","status":-2},
    "41":{"message":"ERROR Nilai Transaksi dibawah Nilai Minimum","status":-2},
    "42":{"message":"ERROR Nilai Transaksi diatas Nilai Maximum","status":-2},
    "43":{"message":"ERROR Daya Baru Lebih Kecil dari Daya Sekarang","status":-3},
    "44":{"message":"ERROR Nilai Daya Tidak Valid","status":-3},
    "45":{"message":"ERROR Nilai Biaya Administrasi Tidak Valid","status":-3},
    "46":{"message":"ERROR Deposit Tidak Mencukupi","status":-2},
    "47":{"message":"ERROR Diluar Batas KWH","status":-3},
    "48":{"message":"ERROR Permintaan sudah kadaluarsa","status":-3},
    "51":{"message":"ERROR Transaksi Gagal dari Mesin Vending","status":-3},
    "52":{"message":"ERROR Transaksi dipending dari Mesin Vending","status":-1},
    "53":{"message":"ERROR Produk tidak ditemukan","status":-1},
    "54":{"message":"ERROR Jawaban dari Biller Tidak ditemukan","status":-3},
    "55":{"message":"ERROR Lainnya Mesin Vending","status":-2},
    "56":{"message":"ERROR Nomor Telpon Tidak diketahui","status":-3},
    "63":{"message":"ERROR Tidak ada Pembayaran","status":-1},
    "60":{"message":"ERROR Akun sudah didaftarkan","status":-3},
    "67":{"message":"ERROR CANNOT CONNECT","status":-3},
    "68":{"message":"ERROR Timeout","status":-2},
    "69":{"message":"ERROR Sertifikat tidak dikenal","status":-2},
    "70":{"message":"ERROR Timeout tidak refund","status":-1},
    "72":{"message":"ERROR Permintaan tidak mungkin dilayani","status":-2},
    "73":{"message":"ERROR Request dipending di Biller","status":-1},
    "77":{"message":"ERROR Id di suspend","status":-2},
    "88":{"message":"ERROR Tagihan sudah dibayar","status":-3},
    "89":{"message":"ERROR Tagihan tidak tersedia","status":-3},
    "90":{"message":"ERROR sedang proses CUT OFF","status":-1},
    "91":{"message":"ERROR Database","status":-1},
    "92":{"message":"ERROR Nomor Referensi Switching tidak ditemukan","status":-2},
    "93":{"message":"ERROR Nomor Referensi Switching tidak valid","status":-2},
    "94":{"message":"ERROR Pembatalan sudah dilakukan","status":-3},
    "95":{"message":"ERROR Kode Merchant tidak terdaftar","status":-2},
    "96":{"message":"ERROR Transaksi tidak ditemukan","status":-3},
    "97":{"message":"ERROR SW BANK Tidak identik","status":-2},
    "98":{"message":"ERROR Nomor Referensi Switching tidak valid","status":-2},
    "146":{"message":"ERROR di servis deposit","status":-1},
    }

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