Commit b4dfd3b151b89b611f98c2c2c2f3d3573cc52f37
1 parent
f1c3c3e1ef
Exists in
master
ussd response maintenance: 91
Showing 1 changed file with 2 additions and 1 deletions Inline Diff
xltunai.py
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 |