Subversion Repositories SmartDukaan

Rev

Rev 23120 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6048 rajveer 1
from suds.client import Client
2
import base64, re
3
from xml.dom.minidom import parseString
6092 rajveer 4
import logging
6235 rajveer 5
from datetime import datetime
6
import time
6338 rajveer 7
from shop2020.config.client.ConfigClient import ConfigClient
6345 rajveer 8
from decimal import Decimal
12979 kshitij.so 9
from shop2020.thriftpy.model.v1.order.ttypes import RechargeMode
21993 kshitij.so 10
from suds.cache import NoCache
22387 amit.gupta 11
import ssl
12
from functools import wraps
13
 
14
def sslwrap(func):
15
    @wraps(func)
16
    def bar(*args, **kw):
17
        kw['ssl_version'] = ssl.PROTOCOL_TLSv1
18
        return func(*args, **kw)
19
    return bar
20
 
21
ssl.wrap_socket = sslwrap(ssl.wrap_socket)
22
 
6092 rajveer 23
logging.basicConfig(level=logging.INFO)
6048 rajveer 24
 
12991 kshitij.so 25
username = base64.b64encode('saholic20')
26
password = base64.b64encode('ap2020sh')
21994 kshitij.so 27
account_url = "file:///recharge-wsdls/AccountApiMcomm.xml"
28
recharge_url = "file:///recharge-wsdls/RechargeApiMcomm.xml"
6144 rajveer 29
aclient = None
30
raclient = None
6338 rajveer 31
allow_recharge = False
6048 rajveer 32
 
20251 amit.gupta 33
store_map = {
34
             'H01':'105',
35
'H02':'109',
36
'H03':'113',
37
'H04':'115',
38
'H05':'116',
39
'H06':'119',
40
'H07':'120',
41
'H08':'125',
42
'H09':'129',
43
'H10':'130',
44
'H11':'131',
45
'H12':'132',
46
'H13':'133',
47
'H14':'134',
48
'H15':'135',
49
'H16':'141',
50
'H17':'143',
51
'H18':'144',
52
'H19':'146',
53
'H20':'147',
54
'H21':'150',
55
'H22':'151',
56
'H23':'153',
57
'H24':'159',
58
'H25':'164',
59
'H26':'189',
60
'H27':'226',
61
'H28':'230',
62
'H29':'253',
63
'H30':'254',
64
'H31':'265',
65
'H32':'281',
66
'H33':'296',
67
'H34':'327',
68
'H35':'358',
69
'H36':'425',
70
'H37':'427',
71
'H38':'440',
72
'H39':'441',
73
'H40':'469',
74
'H41':'475',
75
'H42':'502',
76
'H43':'C31',
77
'H44':'C33',
78
'H45':'C34',
79
'H46':'C52',
80
'H47':'C70',
81
'H48':'C76',
82
'H49':'C86',
83
'H50':'C87',
84
'H51':'CA6',
85
'H52':'CB7',
86
'H53':'CC5',
87
'H54':'CC9',
88
'H55':'CE0',
89
'H56':'CF6',
90
'H57':'CF8',
91
'H58':'CG3',
92
'H59':'CQ0',
93
'H60':'CQ9',
94
'H61':'CR4',
95
'H62':'CS0',
96
'H70':'M01',
97
'H71':'M02',
98
'H72':'M07',
99
'H73':'M08',
100
'H74':'MB5',
101
'H75':'CM8',
102
'H76':'M78',
103
'H77':'112',
104
'H78':'137',
105
'H79':'138',
106
'H80':'165',
107
'H81':'255',
108
'H82':'317',
109
'H83':'347',
110
'H84':'476',
111
'H85':'477',
112
'H86':'518',
113
'H87':'C49',
114
'H88':'CC4',
115
'H89':'CF9',
116
'H90':'178',
117
'H91':'183',
118
'H92':'200',
119
'H93':'239',
120
'H94':'309',
121
'H95':'CD1',
122
'H96':'CD8',
123
'H97':'CE1',
124
'H98':'CI5',
125
'H99':'CK6',
126
'HA0':'CL2',
127
'HA1':'CN5',
128
'HA2':'G02',
129
'HA3':'G03',
130
'HA4':'G04',
131
'HA5':'G05',
132
'HA6':'G06',
133
'HA7':'G07',
134
'HA8':'G10',
135
'HA9':'G12',
136
'HB0':'G14',
137
'HB1':'G15',
138
'HB2':'G17',
139
'HB3':'M49',
140
'HB4':'M51',
141
'HB5':'M54',
142
'HB6':'353',
143
'HB7':'414',
144
'HB8':'431',
145
'HB9':'CA0',
146
'HC0':'CK4',
147
'HC1':'M26',
148
'HC2':'M27',
149
'HC3':'208',
150
'HC4':'215',
151
'HC5':'231',
152
'HC6':'240',
153
'HC7':'252',
154
'HC8':'289',
155
'HC9':'383',
156
'HD0':'CB3',
157
'HD1':'CD7',
158
'HD2':'CJ0',
159
'HD3':'CM3',
160
'HD4':'CN9',
161
'HD5':'CO3',
162
'HD6':'CQ1',
163
'HD7':'M46',
164
'HD8':'424',
165
'HD9':'M64',
166
'HE0':'145',
167
'HE1':'160',
168
'HE2':'328',
169
'HE3':'331',
170
'HE4':'343',
171
'HE5':'393',
172
'HE6':'460',
173
'HE7':'C25',
174
'HE8':'C84',
175
'HE9':'CB2',
176
'HF0':'CC3',
177
'HF1':'CC7',
178
'HF2':'CH5',
179
'HF3':'CP3',
180
'HF7':'M15',
181
'HF8':'471',
182
'HF9':'472',
183
'HG0':'481',
184
'HG1':'483',
185
'HG2':'484',
186
'HG3':'486',
187
'HG4':'C14',
188
'HG5':'C15',
189
'HG6':'C21',
190
'HG7':'C23',
191
'HG8':'C98',
192
'HG9':'CD2',
193
'HH0':'CD4',
194
'HH1':'CD5',
195
'HH2':'CG4',
196
'HH3':'CG5',
197
'HH4':'CG7',
198
'HH5':'CG8',
199
'HH6':'CI1',
200
'HH7':'CJ1',
201
'HH8':'CJ7',
202
'HH9':'CK1',
203
'HI0':'CK2',
204
'HI1':'CM1',
205
'HI2':'CM2',
206
'HI3':'CM5',
207
'HI4':'CN0',
208
'HI5':'CN4',
209
'HI6':'CO0',
210
'HI7':'CQ4',
211
'HI8':'CQ5',
20256 kshitij.so 212
'HI9':'CR8',
20304 kshitij.so 213
'H64':'CS3',
20348 kshitij.so 214
'H68':'CT4',
20349 kshitij.so 215
'H63':'CS1',
216
'H65':'CS6'
20251 amit.gupta 217
            }
218
 
23446 amit.gupta 219
#allow_recharge_string = ConfigClient().get_property('allow_recharge')
220
allow_recharge_string = 'True'
6048 rajveer 221
 
6338 rajveer 222
if allow_recharge_string in ['True', 'true']:
223
    allow_recharge = True    
224
 
6144 rajveer 225
def getAccountClient():
226
    global aclient
227
    if aclient is None:
21993 kshitij.so 228
        aclient = Client(account_url, timeout=70,cache=NoCache())
6144 rajveer 229
    return aclient
230
 
231
def getRechargeClient():
232
    global raclient
233
    if raclient is None:
21993 kshitij.so 234
        raclient = Client(recharge_url, timeout=70,cache=NoCache())    
6144 rajveer 235
    return raclient
236
 
12979 kshitij.so 237
def rechargeDevice(transactionId, rechargeType, strProviderCode, deviceNumber, amount, plan, storeCode = '', rechargeMode=None):
6338 rajveer 238
    if not allow_recharge:
7996 anupam.sin 239
        return 'S', '00', 'spiceTID', 'SUCCESS', 'aggTID', 'providerTID'
20251 amit.gupta 240
    if storeCode:
21089 kshitij.so 241
        if store_map.get(storeCode) is not None:
242
            storeCode = store_map.get(storeCode)
7669 rajveer 243
    spString = getRechargeClient().service.getRecharge(username, password, '919650889334', 'SOAP', '115.249.47.66', transactionId, rechargeType, strProviderCode, deviceNumber, amount, 'DEBIT', plan, storeCode)
6093 rajveer 244
    print spString
6048 rajveer 245
    spString = re.sub('<\?.*\?>','',spString)
246
    spString = "<dom>" + spString + "</dom>"
247
    dom = parseString(spString)
248
    response = dom.getElementsByTagName('ActiveServicesPojo')[0]
249
    retStatus = response.getElementsByTagName('resStatus')[0].childNodes[0].data
250
    retCode = response.getElementsByTagName('respCode')[0].childNodes[0].data
251
    spiceTID = response.getElementsByTagName('SpiceTID')[0].childNodes[0].data
6092 rajveer 252
    retDesc = response.getElementsByTagName('shotDesc')[0].childNodes[0].data
12979 kshitij.so 253
 
7369 rajveer 254
    try:
255
        aggTID = response.getElementsByTagName('aggregatorId')[0].childNodes[0].data
256
        providerTID = response.getElementsByTagName('ProviderTID')[0].childNodes[0].data
257
    except:
258
        aggTID = ''
259
        providerTID = ''
12979 kshitij.so 260
 
261
    if (retCode !='00' or retStatus !='S') and rechargeMode == RechargeMode._NAMES_TO_VALUES.get('SYNC'):
12780 kshitij.so 262
        try:
263
            if (checkTransactionStatus('',transactionId))[0]:
264
                return 'S','00', spiceTID, retDesc, aggTID, providerTID
265
        except:
266
            pass
267
 
268
    return retStatus, retCode, spiceTID, retDesc, aggTID, providerTID
6048 rajveer 269
 
12780 kshitij.so 270
def checkTransactionStatus(spiceTID='', merchantTxnId=''):
12991 kshitij.so 271
    if not allow_recharge:
272
        return True, ''
12780 kshitij.so 273
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
274
    print spString
275
    spString = re.sub('<\?.*\?>','',spString)
276
    spString = "<dom>" + spString + "</dom>"
277
    dom = parseString(spString)
278
    response = dom.getElementsByTagName('CheckStatusObj')[0]
279
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
280
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
281
    try:
282
        responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
283
    except:
284
        responseDescription = ""
285
    aggregatorRespCode = response.getElementsByTagName('aggregatorRespCode')[0].childNodes[0].data
286
    if responseCode == '00' and transStatus == 'S':
287
        return True, responseDescription
12979 kshitij.so 288
    elif responseCode == 'STP' and transStatus == 'S':
289
        raise Exception(111, "Still status is not known")
12780 kshitij.so 290
    elif responseCode in ('STO','US', 'UP') and transStatus == 'S':
291
        if aggregatorRespCode == '00':
292
            return True, responseDescription
293
        if aggregatorRespCode != 'NA':
294
            return False, responseDescription
295
        raise Exception(111, "Still status is not known")
296
    else:
297
        return False, responseDescription 
298
 
6048 rajveer 299
def getAccountdetail():
6144 rajveer 300
    return getAccountClient().service.getAccountdetail(username, password)
6151 rajveer 301
 
6048 rajveer 302
def getBalance():
6151 rajveer 303
    spString = getAccountClient().service.getBalance(username, password)
304
    print spString
305
    spString = re.sub('<\?.*\?>','',spString)
306
    spString = "<dom>" + spString + "</dom>"
307
    dom = parseString(spString)
308
    response = dom.getElementsByTagName('BalancePojo')[0]
309
    balanceAmount = response.getElementsByTagName('balance_amt')[0].childNodes[0].data
6345 rajveer 310
    return Decimal(balanceAmount)
6048 rajveer 311
 
312
def checkServiceProviderApi(strServiceCode, strDeviceNumber):
6144 rajveer 313
    spString = getAccountClient().service.checkServiceProviderApi(username, password, strServiceCode, strDeviceNumber)
6093 rajveer 314
    print spString
6054 rajveer 315
    spString = re.sub('<\?.*\?>','',spString)
316
    spString = "<dom>" + spString + "</dom>"
317
    dom = parseString(spString)
318
    response = dom.getElementsByTagName('CheckServiceProviderPojo')[0]
319
    providerCode = response.getElementsByTagName('providerCode')[0].childNodes[0].data
6235 rajveer 320
    try:
321
        operatorCircle = response.getElementsByTagName('operatorCircle')[0].childNodes[0].data
322
    except:
323
        operatorCircle = ""
324
    return providerCode, operatorCircle
6048 rajveer 325
 
326
def validateService(strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan):
6144 rajveer 327
    return getAccountClient().service.validateService(username, password, strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan)
6048 rajveer 328
 
329
def getAvailableServices():
6144 rajveer 330
    spString = getAccountClient().service.getServiceApi(username, password)
6109 rajveer 331
    print spString
6048 rajveer 332
    spString = re.sub('<\?.*\?>','',spString)
333
    spString = "<dom>" + spString + "</dom>"
334
    dom = parseString(spString)
335
    serviceApis = dom.getElementsByTagName('ServiceApiPojo')
336
    services = {}
337
    for serviceApi in serviceApis:
338
        services[serviceApi.getElementsByTagName('serviceCode')[0].childNodes[0].data] = serviceApi.getElementsByTagName('serviceDescription')[0].childNodes[0].data 
339
    return services
340
 
341
 
342
def getServiceProvidersForMobile():
343
    return getServiceProvider('MTP')
344
 
345
def getServiceProvidersForDTH():
346
    return getServiceProvider('RCH')
347
 
348
def getServiceProvider(strServiceCode):
6144 rajveer 349
    spString = getAccountClient().service.getServiceProvider(username, password, strServiceCode)
6109 rajveer 350
    print spString
6048 rajveer 351
    spString = re.sub('<\?.*\?>','',spString)
352
    spString = "<dom>" + spString + "</dom>"
353
    dom = parseString(spString)
354
    providers = dom.getElementsByTagName('ServicesProviderPojo')
355
    serviceProviders = {}
356
    for provider in providers:
357
        serviceProviders[provider.getElementsByTagName('providerCode')[0].childNodes[0].data] = provider.getElementsByTagName('providerDescription')[0].childNodes[0].data 
358
    return serviceProviders
6151 rajveer 359
 
6048 rajveer 360
def getServiceDetails(strServiceCode, strProviderCode):
6144 rajveer 361
    spString = getAccountClient().service.getServiceDetail(username, password, strServiceCode, strProviderCode)
6109 rajveer 362
    print spString
6048 rajveer 363
    spString = re.sub('<\?.*\?>','',spString)
364
    spString = "<dom>" + spString + "</dom>"
365
    dom = parseString(spString)
366
    details = dom.getElementsByTagName('ServiceDetailPojo')
367
    serviceDetails = {}
368
    for detail in details:
369
        serviceDetails['Denomination Type'] = detail.getElementsByTagName('DenominationType')[0].childNodes[0].data
370
        serviceDetails['Denomination Value'] = detail.getElementsByTagName('DenominationValue')[0].childNodes[0].data 
371
    return serviceDetails
372
 
6235 rajveer 373
 
374
def getRefunds(forDate):
375
    spString = getRechargeClient().service.checkRefundHistory(username, password, '3306', forDate.strftime("%d-%m-%Y"))
376
    print spString
377
    refundDetails = {}
378
    if spString is None or spString == "":
379
        return refundDetails
380
    spString = re.sub('<\?.*\?>','',spString)
381
    spString = "<dom>" + spString + "</dom>"
382
    dom = parseString(spString)
383
    refunds = dom.getElementsByTagName('checkRefundHistoryPojo')
384
    for refund in refunds:
6317 rajveer 385
        try:
386
            respStatus = refund.getElementsByTagName('respStatus')[0].childNodes[0].data
387
            respCode = refund.getElementsByTagName('respCode')[0].childNodes[0].data
388
            respDesc = refund.getElementsByTagName('respDesc')[0].childNodes[0].data
389
            refundAmmount = refund.getElementsByTagName('refundAmmount')[0].childNodes[0].data
390
            transId = refund.getElementsByTagName('transId')[0].childNodes[0].data
391
            deviceNo = refund.getElementsByTagName('deviceNo')[0].childNodes[0].data
392
            refundDateString = refund.getElementsByTagName('refundDate')[0].childNodes[0].data
393
            transactionDate  = refund.getElementsByTagName('transactionDate')[0].childNodes[0].data
394
            openningBalance  = refund.getElementsByTagName('openningBalance')[0].childNodes[0].data
395
            closingBalance  = refund.getElementsByTagName('closingBalance')[0].childNodes[0].data
396
            refundTime = time.strptime(refundDateString, "%Y-%m-%d %H:%M:%S.0")
397
            refundDate = datetime(*refundTime[0:6])
398
            refundDetails[transId] = int(refundAmmount), refundDate
399
        except:
400
            continue
9321 anupam.sin 401
    return refundDetails
402
 
403
def getAllTransactions(startDate, endDate):
404
    spString = getRechargeClient().service.getTransactionHistory(username, password, startDate.strftime("%d-%m-%Y"), endDate.strftime("%d-%m-%Y"))
405
    txnDetails = {}
406
    transactions = []
407
    if spString is None or spString == "":
408
        return txnDetails
409
    spString = re.sub('<\?.*\?>','',spString)
410
    spString = "<dom>" + spString + "</dom>"
411
    dom = parseString(spString)
412
    try:
413
        transactions = dom.getElementsByTagName('TransactionHistoryPojo')
414
    except:
9345 anupam.sin 415
        pass
11488 kshitij.so 416
    return transactions
417
 
418
def getRechargeStatus(spiceTID='', merchantTxnId=''):
419
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
420
    print spString
421
    spString = re.sub('<\?.*\?>','',spString)
422
    spString = "<dom>" + spString + "</dom>"
423
    dom = parseString(spString)
424
    response = dom.getElementsByTagName('CheckStatusObj')[0]
425
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
426
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
427
    try:
428
        responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
429
    except:
430
        responseDescription = ""
431
    return responseCode, responseDescription
12979 kshitij.so 432
 
433
def main():
21993 kshitij.so 434
    getBalance()
23446 amit.gupta 435
    print rechargeDevice(9999999999,'MTP','ART','9811524460',10,'')
436
    #print rechargeDevice(20180102,'RCH','ATV','3010059202',100,'')
437
    print checkTransactionStatus("", 9999999999)
438
    getBalance()
12979 kshitij.so 439
 
440
if __name__=='__main__':
21993 kshitij.so 441
    main()