xltunai.py
3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import re
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'
}
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 Rp\.\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 :\d+', message))
sn = "".join(re.findall(r'\d+', sn))
except:
sn = ""
return sn
def toInternationalNumber(number):
return re.sub(r'^0', '62', number)
def getSIMCardInfoUSSDCommand():
return '*123*7*3*1*1#'
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'