Subversion Repositories SmartDukaan

Rev

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