Commit b4dfd3b151b89b611f98c2c2c2f3d3573cc52f37

Authored by Adhidarma Hadiwinoto
1 parent f1c3c3e1ef
Exists in master

ussd response maintenance: 91

Showing 1 changed file with 2 additions and 1 deletions Inline Diff

1 import re 1 import re
2 import time 2 import time
3 3
4 nominalCodes = { 4 nominalCodes = {
5 5000: 1, 5 5000: 1,
6 10000: 2, 6 10000: 2,
7 25000: 3, 7 25000: 3,
8 50000: 4, 8 50000: 4,
9 100000: 5, 9 100000: 5,
10 200000: 6 10 200000: 6
11 } 11 }
12 12
13 nominalCosts = { 13 nominalCosts = {
14 5000: 5500, 14 5000: 5500,
15 10000: 10500, 15 10000: 10500,
16 25000: 25000, 16 25000: 25000,
17 50000: 50000, 17 50000: 50000,
18 100000: 100000, 18 100000: 100000,
19 200000: 200000 19 200000: 200000
20 } 20 }
21 21
22 valid_senders = ['120',] 22 valid_senders = ['120',]
23 message_codes = { 23 message_codes = {
24 'telah berhasil diisi pulsa sebesar': '00', 24 'telah berhasil diisi pulsa sebesar': '00',
25 'Maaf, transaksi Anda masih dalam proses': '40' 25 'Maaf, transaksi Anda masih dalam proses': '40'
26 } 26 }
27 27
28 ussd_response_codes = { 28 ussd_response_codes = {
29 'nomor yang Anda masukkan tidak valid': '14', 29 'nomor yang Anda masukkan tidak valid': '14',
30 'Maaf, transaksi Anda masih dalam proses': '40', 30 'Maaf, transaksi Anda masih dalam proses': '40',
31 'Mohon maaf, transaksi Anda melebihi limit': '40', 31 'Mohon maaf, transaksi Anda melebihi limit': '40',
32 'http url not found': '40', 32 'http url not found': '40',
33 'operation timeout': '40' 33 'operation timeout': '40',
34 'Maaf, saat ini sistem sedang proses maintenance': '91'
34 } 35 }
35 36
36 def getOperatorFromProduct(product): 37 def getOperatorFromProduct(product):
37 return re.sub(r'\d+.*', '', product) 38 return re.sub(r'\d+.*', '', product)
38 39
39 def getNominalFromProduct(product): 40 def getNominalFromProduct(product):
40 return int("".join(re.findall(r'\d+', product))) * 1000 41 return int("".join(re.findall(r'\d+', product))) * 1000
41 42
42 def getNominalFromMessage(message): 43 def getNominalFromMessage(message):
43 nominal = "".join(re.findall(r'pulsa sebesar \d+\.', message)) 44 nominal = "".join(re.findall(r'pulsa sebesar \d+\.', message))
44 nominal = "".join(re.findall(r'\d+', nominal)) 45 nominal = "".join(re.findall(r'\d+', nominal))
45 return nominal 46 return nominal
46 47
47 def getDenomCodeFromProduct(product): 48 def getDenomCodeFromProduct(product):
48 nominal = getNominalFromProduct(product) 49 nominal = getNominalFromProduct(product)
49 try: 50 try:
50 result = nominalCodes[nominal] 51 result = nominalCodes[nominal]
51 except: 52 except:
52 result = None 53 result = None
53 54
54 return result 55 return result
55 56
56 def getCostFromProduct(product): 57 def getCostFromProduct(product):
57 nominal = getNominalFromProduct(product) 58 nominal = getNominalFromProduct(product)
58 try: 59 try:
59 result = nominalCosts[nominal] 60 result = nominalCosts[nominal]
60 except: 61 except:
61 result = 0 62 result = 0
62 63
63 return int(result) 64 return int(result)
64 65
65 def getDestinationFromMessage(message): 66 def getDestinationFromMessage(message):
66 result = "".join(re.findall(r'^Nomor \d+ telah berhasil', message)) 67 result = "".join(re.findall(r'^Nomor \d+ telah berhasil', message))
67 result = "".join(re.findall(r'\d+', result)) 68 result = "".join(re.findall(r'\d+', result))
68 return result 69 return result
69 70
70 def getSNFromMessage(message): 71 def getSNFromMessage(message):
71 try: 72 try:
72 sn = "".join(re.findall(r'Ref (?:ID :|No )(\d+)', message)) 73 sn = "".join(re.findall(r'Ref (?:ID :|No )(\d+)', message))
73 sn = "".join(re.findall(r'\d+', sn)) 74 sn = "".join(re.findall(r'\d+', sn))
74 except: 75 except:
75 sn = "" 76 sn = ""
76 77
77 return sn 78 return sn
78 79
79 def getBalanceFromMessage(message): 80 def getBalanceFromMessage(message):
80 try: 81 try:
81 sn = "".join(re.findall(r'Saldo Rp (\d+)', message)) 82 sn = "".join(re.findall(r'Saldo Rp (\d+)', message))
82 return int(sn) 83 return int(sn)
83 except: 84 except:
84 return 0 85 return 0
85 86
86 def getSNFromReceiveTransferMessage(message): 87 def getSNFromReceiveTransferMessage(message):
87 try: 88 try:
88 sn = "".join(re.findall(r'RefID (\d+)', message)) 89 sn = "".join(re.findall(r'RefID (\d+)', message))
89 return sn 90 return sn
90 except: 91 except:
91 return 92 return
92 93
93 def getSNFromSentTransferMessage(message): 94 def getSNFromSentTransferMessage(message):
94 try: 95 try:
95 sn = "".join(re.findall(r'Ref id (\d+)', message)) 96 sn = "".join(re.findall(r'Ref id (\d+)', message))
96 return sn 97 return sn
97 except: 98 except:
98 return 99 return
99 100
100 def getSNFromCashInMessage(message): 101 def getSNFromCashInMessage(message):
101 try: 102 try:
102 sn = "".join(re.findall(r'Ref ID: (\d+)$', message)) 103 sn = "".join(re.findall(r'Ref ID: (\d+)$', message))
103 return sn 104 return sn
104 except: 105 except:
105 return 106 return
106 107
107 def toInternationalNumber(number): 108 def toInternationalNumber(number):
108 return re.sub(r'^0', '62', number) 109 return re.sub(r'^0', '62', number)
109 110
110 def getSIMCardInfoUSSDCommand(): 111 def getSIMCardInfoUSSDCommand():
111 return '*123*7*3*1*1#' 112 return '*123*7*3*1*1#'
112 113
113 def getHistoryUSSDCommand(): 114 def getHistoryUSSDCommand():
114 return '*123*120*8*3#' 115 return '*123*120*8*3#'
115 116
116 def getMSISDNFromSIMCardInfo(message): 117 def getMSISDNFromSIMCardInfo(message):
117 msisdn = "".join(re.findall(r'Nomor \d+ adalah nomor', message)) 118 msisdn = "".join(re.findall(r'Nomor \d+ adalah nomor', message))
118 msisdn = "".join(re.findall(r'\d+', msisdn)) 119 msisdn = "".join(re.findall(r'\d+', msisdn))
119 return msisdn 120 return msisdn
120 121
121 def getIMSIFromSIMCardInfo(message): 122 def getIMSIFromSIMCardInfo(message):
122 imsi = "".join(re.findall(r'dengan ICCID \d+', message)) 123 imsi = "".join(re.findall(r'dengan ICCID \d+', message))
123 imsi = "".join(re.findall(r'\d+', imsi)) 124 imsi = "".join(re.findall(r'\d+', imsi))
124 return imsi 125 return imsi
125 126
126 def getBalanceFromUSSDResponse(message): 127 def getBalanceFromUSSDResponse(message):
127 balance = "".join(re.findall(r'Saldo Rp\d+', message)) 128 balance = "".join(re.findall(r'Saldo Rp\d+', message))
128 balance = re.sub('Saldo Rp', '', balance) 129 balance = re.sub('Saldo Rp', '', balance)
129 try: 130 try:
130 return int(balance) 131 return int(balance)
131 except: 132 except:
132 return 0 133 return 0
133 134
134 def getTopupUSSDCommand(destination, product, pin_trx): 135 def getTopupUSSDCommand(destination, product, pin_trx):
135 denom_code = getDenomCodeFromProduct(product) 136 denom_code = getDenomCodeFromProduct(product)
136 if not denom_code: 137 if not denom_code:
137 return None 138 return None
138 139
139 ussdCommand = u'*123*120*2*2*{0}*{1}*{2}#'.format(destination, denom_code, pin_trx); 140 ussdCommand = u'*123*120*2*2*{0}*{1}*{2}#'.format(destination, denom_code, pin_trx);
140 return ussdCommand 141 return ussdCommand
141 142
142 def isValidSender(sender): 143 def isValidSender(sender):
143 return str(sender) in valid_senders 144 return str(sender) in valid_senders
144 145
145 def getResponseCodeByMessage(message): 146 def getResponseCodeByMessage(message):
146 for pattern in message_codes: 147 for pattern in message_codes:
147 if message.find(pattern) >= 0: 148 if message.find(pattern) >= 0:
148 return message_codes[pattern] 149 return message_codes[pattern]
149 150
150 return '68' 151 return '68'
151 152
152 def getResponseCodeByUSSDResponse(response_message): 153 def getResponseCodeByUSSDResponse(response_message):
153 for pattern in ussd_response_codes: 154 for pattern in ussd_response_codes:
154 if response_message.find(pattern) >= 0: 155 if response_message.find(pattern) >= 0:
155 return ussd_response_codes[pattern] 156 return ussd_response_codes[pattern]
156 157
157 return '68' 158 return '68'
158 159
159 def getPulsaFromUssdResponseMessage(message): 160 def getPulsaFromUssdResponseMessage(message):
160 pulsa = re.findall(r"Pulsa (\d+) s", message) 161 pulsa = re.findall(r"Pulsa (\d+) s", message)
161 if pulsa: 162 if pulsa:
162 return int(pulsa[0]) 163 return int(pulsa[0])
163 164
164 def getMasaAktifFromUssdResponseMessage(message): 165 def getMasaAktifFromUssdResponseMessage(message):
165 masa_aktif = re.findall(' s[\./]d (\w+)\.', message) 166 masa_aktif = re.findall(' s[\./]d (\w+)\.', message)
166 if not masa_aktif: 167 if not masa_aktif:
167 return 168 return
168 169
169 masa_aktif = time.strptime(masa_aktif[0], '%d%b%y') 170 masa_aktif = time.strptime(masa_aktif[0], '%d%b%y')
170 return time.strftime("%Y-%m-%d", masa_aktif) 171 return time.strftime("%Y-%m-%d", masa_aktif)
171 172
172 def getLastSNFromHistoryMessage(message): 173 def getLastSNFromHistoryMessage(message):
173 if not re.findall(r"RELOAD", message): 174 if not re.findall(r"RELOAD", message):
174 return 'NON RELOAD' 175 return 'NON RELOAD'
175 176
176 sn = re.findall(r"Transaksi Terakhir\s:\s(\d+)", message) 177 sn = re.findall(r"Transaksi Terakhir\s:\s(\d+)", message)
177 if sn: 178 if sn:
178 return sn[0] 179 return sn[0]
179 180