xltunai.py 4.54 KB
import re
import time
    
nominalCodes = {
    5000: 1,
    10000: 2,
    25000: 3,
    50000: 4,
    100000: 5,
    200000: 6
}

nominalCosts = {
    5000: 5500,
    10000: 10500,
    25000: 25000,
    50000: 50000,
    100000: 100000,
    200000: 200000
}

valid_senders = ['120',]
message_codes = {
    'telah berhasil diisi pulsa sebesar': '00',
    'Maaf, transaksi Anda masih dalam proses': '40'
}

ussd_response_codes = {
    'nomor yang Anda masukkan tidak valid': '14',
    'Maaf, transaksi Anda masih dalam proses': '40',
    'Mohon maaf, transaksi Anda melebihi limit': '40',
    'http url not found': '40',
    'operation timeout': '40',
    'Maaf, saat ini sistem sedang proses maintenance': '91'
}

def getOperatorFromProduct(product):
    return re.sub(r'\d+.*', '', product)

def getNominalFromProduct(product):
    return int("".join(re.findall(r'\d+', product))) * 1000

def getNominalFromMessage(message):
    nominal = "".join(re.findall(r'pulsa sebesar \d+\.', message))
    nominal = "".join(re.findall(r'\d+', nominal))
    return nominal
    
def getDenomCodeFromProduct(product):
    nominal = getNominalFromProduct(product)
    try:
        result = nominalCodes[nominal]
    except:
        result = None
    
    return result

def getCostFromProduct(product):
    nominal = getNominalFromProduct(product)
    try:
        result = nominalCosts[nominal]
    except:
        result = 0
    
    return int(result)
    
def getDestinationFromMessage(message):
    result = "".join(re.findall(r'^Nomor \d+ telah berhasil', message))
    result = "".join(re.findall(r'\d+', result))
    return result

def getSNFromMessage(message):
    try:
        sn = "".join(re.findall(r'Ref (?:ID :|No )(\d+)', message))
        sn = "".join(re.findall(r'\d+', sn))
    except:
        sn = ""
    
    return sn
    
def getBalanceFromMessage(message):
    try:
        sn = "".join(re.findall(r'Saldo Rp (\d+)', message))
        return int(sn)
    except:
        return 0

def getSNFromReceiveTransferMessage(message):
    try:
        sn = "".join(re.findall(r'RefID (\d+)', message))
        return sn
    except:
        return
        
def getSNFromSentTransferMessage(message):
    try:
        sn = "".join(re.findall(r'Ref id (\d+)', message))
        return sn
    except:
        return
        
def getSNFromCashInMessage(message):
    try:
        sn = "".join(re.findall(r'Ref ID: (\d+)$', message))
        return sn
    except:
        return

def toInternationalNumber(number):
    return re.sub(r'^0', '62', number)

def getSIMCardInfoUSSDCommand():
    return '*123*7*3*1*1#'

def  getHistoryUSSDCommand():
    return '*123*120*8*3#'
    
def getMSISDNFromSIMCardInfo(message):
    msisdn = "".join(re.findall(r'Nomor \d+ adalah nomor', message))
    msisdn = "".join(re.findall(r'\d+', msisdn))
    return msisdn
    
def getIMSIFromSIMCardInfo(message):
    imsi = "".join(re.findall(r'dengan ICCID \d+', message))
    imsi = "".join(re.findall(r'\d+', imsi))
    return imsi
    
def getBalanceFromUSSDResponse(message):
    balance = "".join(re.findall(r'Saldo Rp\d+', message))
    balance = re.sub('Saldo Rp', '', balance)
    try:
        return int(balance)
    except:
        return 0
    
def getTopupUSSDCommand(destination, product, pin_trx):
    denom_code = getDenomCodeFromProduct(product)
    if not denom_code:
        return None
        
    ussdCommand = u'*123*120*2*2*{0}*{1}*{2}#'.format(destination, denom_code, pin_trx);
    return ussdCommand

def isValidSender(sender):
    return str(sender) in valid_senders

def getResponseCodeByMessage(message):
    for pattern in message_codes:
        if message.find(pattern) >= 0:
            return message_codes[pattern]
    
    return '68'

def getResponseCodeByUSSDResponse(response_message):
    for pattern in ussd_response_codes:
        if response_message.find(pattern) >= 0:
            return ussd_response_codes[pattern]
    
    return '68'

def getPulsaFromUssdResponseMessage(message):
    pulsa = re.findall(r"Pulsa (\d+) s", message)
    if pulsa:
        return int(pulsa[0])

def getMasaAktifFromUssdResponseMessage(message):
    masa_aktif = re.findall(' s[\./]d (\w+)\.', message)
    if not  masa_aktif:
        return
        
    masa_aktif = time.strptime(masa_aktif[0], '%d%b%y')
    return time.strftime("%Y-%m-%d", masa_aktif)
    
def getLastSNFromHistoryMessage(message):
    sn = re.findall(r"Transaksi Terakhir\s:\s(\d+)", message)
    if sn:
        return sn[0]

def getLastTrxTypeFromMessage(message):
    try:
        trxType = message.split('/')[-1]
        return trxType
    except:
        return