Subversion Repositories SmartDukaan

Rev

Rev 12771 | Rev 12979 | 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
6092 rajveer 9
logging.basicConfig(level=logging.INFO)
6048 rajveer 10
 
11
username = base64.b64encode('saholic20')
12
password = base64.b64encode('ap2020sh')
12771 kshitij.so 13
account_url = 'https://api.spicesafar.com/McommWebServices/AccountApiMcomm?wsdl'
14
recharge_url = 'https://api.spicesafar.com/McommWebServices/RechargeApiMcomm?wsdl'
6144 rajveer 15
aclient = None
16
raclient = None
6338 rajveer 17
allow_recharge = False
6048 rajveer 18
 
6338 rajveer 19
allow_recharge_string = ConfigClient().get_property('allow_recharge')
6048 rajveer 20
 
6338 rajveer 21
if allow_recharge_string in ['True', 'true']:
22
    allow_recharge = True    
23
 
6144 rajveer 24
def getAccountClient():
25
    global aclient
26
    if aclient is None:
6227 rajveer 27
        aclient = Client(account_url, timeout=70)
6144 rajveer 28
    return aclient
29
 
30
def getRechargeClient():
31
    global raclient
32
    if raclient is None:
6227 rajveer 33
        raclient = Client(recharge_url, timeout=70)    
6144 rajveer 34
    return raclient
35
 
7669 rajveer 36
def rechargeDevice(transactionId, rechargeType, strProviderCode, deviceNumber, amount, plan, storeCode = ''):
6338 rajveer 37
    if not allow_recharge:
7996 anupam.sin 38
        return 'S', '00', 'spiceTID', 'SUCCESS', 'aggTID', 'providerTID'
7669 rajveer 39
    spString = getRechargeClient().service.getRecharge(username, password, '919650889334', 'SOAP', '115.249.47.66', transactionId, rechargeType, strProviderCode, deviceNumber, amount, 'DEBIT', plan, storeCode)
6093 rajveer 40
    print spString
6048 rajveer 41
    spString = re.sub('<\?.*\?>','',spString)
42
    spString = "<dom>" + spString + "</dom>"
43
    dom = parseString(spString)
44
    response = dom.getElementsByTagName('ActiveServicesPojo')[0]
45
    retStatus = response.getElementsByTagName('resStatus')[0].childNodes[0].data
46
    retCode = response.getElementsByTagName('respCode')[0].childNodes[0].data
47
    spiceTID = response.getElementsByTagName('SpiceTID')[0].childNodes[0].data
6092 rajveer 48
    retDesc = response.getElementsByTagName('shotDesc')[0].childNodes[0].data
7369 rajveer 49
 
50
    try:
51
        aggTID = response.getElementsByTagName('aggregatorId')[0].childNodes[0].data
52
        providerTID = response.getElementsByTagName('ProviderTID')[0].childNodes[0].data
53
    except:
54
        aggTID = ''
55
        providerTID = ''
12780 kshitij.so 56
 
57
    if retCode !='00' or retStatus !='S':
58
        try:
59
            if (checkTransactionStatus('',transactionId))[0]:
60
                return 'S','00', spiceTID, retDesc, aggTID, providerTID
61
        except:
62
            pass
63
 
64
    return retStatus, retCode, spiceTID, retDesc, aggTID, providerTID
6048 rajveer 65
 
12780 kshitij.so 66
def checkTransactionStatus(spiceTID='', merchantTxnId=''):
67
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
68
    print spString
69
    spString = re.sub('<\?.*\?>','',spString)
70
    spString = "<dom>" + spString + "</dom>"
71
    dom = parseString(spString)
72
    response = dom.getElementsByTagName('CheckStatusObj')[0]
73
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
74
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
75
    try:
76
        responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
77
    except:
78
        responseDescription = ""
79
    aggregatorRespCode = response.getElementsByTagName('aggregatorRespCode')[0].childNodes[0].data
80
    if responseCode == '00' and transStatus == 'S':
81
        return True, responseDescription
82
    elif responseCode in ('STO','US', 'UP') and transStatus == 'S':
83
        if aggregatorRespCode == '00':
84
            return True, responseDescription
85
        if aggregatorRespCode != 'NA':
86
            return False, responseDescription
87
        raise Exception(111, "Still status is not known")
88
    else:
89
        return False, responseDescription 
90
 
6048 rajveer 91
def getAccountdetail():
6144 rajveer 92
    return getAccountClient().service.getAccountdetail(username, password)
6151 rajveer 93
 
6048 rajveer 94
def getBalance():
6151 rajveer 95
    spString = getAccountClient().service.getBalance(username, password)
96
    print spString
97
    spString = re.sub('<\?.*\?>','',spString)
98
    spString = "<dom>" + spString + "</dom>"
99
    dom = parseString(spString)
100
    response = dom.getElementsByTagName('BalancePojo')[0]
101
    balanceAmount = response.getElementsByTagName('balance_amt')[0].childNodes[0].data
6345 rajveer 102
    return Decimal(balanceAmount)
6048 rajveer 103
 
104
def checkServiceProviderApi(strServiceCode, strDeviceNumber):
6144 rajveer 105
    spString = getAccountClient().service.checkServiceProviderApi(username, password, strServiceCode, strDeviceNumber)
6093 rajveer 106
    print spString
6054 rajveer 107
    spString = re.sub('<\?.*\?>','',spString)
108
    spString = "<dom>" + spString + "</dom>"
109
    dom = parseString(spString)
110
    response = dom.getElementsByTagName('CheckServiceProviderPojo')[0]
111
    providerCode = response.getElementsByTagName('providerCode')[0].childNodes[0].data
6235 rajveer 112
    try:
113
        operatorCircle = response.getElementsByTagName('operatorCircle')[0].childNodes[0].data
114
    except:
115
        operatorCircle = ""
116
    return providerCode, operatorCircle
6048 rajveer 117
 
118
def validateService(strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan):
6144 rajveer 119
    return getAccountClient().service.validateService(username, password, strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan)
6048 rajveer 120
 
121
def getAvailableServices():
6144 rajveer 122
    spString = getAccountClient().service.getServiceApi(username, password)
6109 rajveer 123
    print spString
6048 rajveer 124
    spString = re.sub('<\?.*\?>','',spString)
125
    spString = "<dom>" + spString + "</dom>"
126
    dom = parseString(spString)
127
    serviceApis = dom.getElementsByTagName('ServiceApiPojo')
128
    services = {}
129
    for serviceApi in serviceApis:
130
        services[serviceApi.getElementsByTagName('serviceCode')[0].childNodes[0].data] = serviceApi.getElementsByTagName('serviceDescription')[0].childNodes[0].data 
131
    return services
132
 
133
 
134
def getServiceProvidersForMobile():
135
    return getServiceProvider('MTP')
136
 
137
def getServiceProvidersForDTH():
138
    return getServiceProvider('RCH')
139
 
140
def getServiceProvider(strServiceCode):
6144 rajveer 141
    spString = getAccountClient().service.getServiceProvider(username, password, strServiceCode)
6109 rajveer 142
    print spString
6048 rajveer 143
    spString = re.sub('<\?.*\?>','',spString)
144
    spString = "<dom>" + spString + "</dom>"
145
    dom = parseString(spString)
146
    providers = dom.getElementsByTagName('ServicesProviderPojo')
147
    serviceProviders = {}
148
    for provider in providers:
149
        serviceProviders[provider.getElementsByTagName('providerCode')[0].childNodes[0].data] = provider.getElementsByTagName('providerDescription')[0].childNodes[0].data 
150
    return serviceProviders
6151 rajveer 151
 
6048 rajveer 152
def getServiceDetails(strServiceCode, strProviderCode):
6144 rajveer 153
    spString = getAccountClient().service.getServiceDetail(username, password, strServiceCode, strProviderCode)
6109 rajveer 154
    print spString
6048 rajveer 155
    spString = re.sub('<\?.*\?>','',spString)
156
    spString = "<dom>" + spString + "</dom>"
157
    dom = parseString(spString)
158
    details = dom.getElementsByTagName('ServiceDetailPojo')
159
    serviceDetails = {}
160
    for detail in details:
161
        serviceDetails['Denomination Type'] = detail.getElementsByTagName('DenominationType')[0].childNodes[0].data
162
        serviceDetails['Denomination Value'] = detail.getElementsByTagName('DenominationValue')[0].childNodes[0].data 
163
    return serviceDetails
164
 
6235 rajveer 165
 
166
def getRefunds(forDate):
167
    spString = getRechargeClient().service.checkRefundHistory(username, password, '3306', forDate.strftime("%d-%m-%Y"))
168
    print spString
169
    refundDetails = {}
170
    if spString is None or spString == "":
171
        return refundDetails
172
    spString = re.sub('<\?.*\?>','',spString)
173
    spString = "<dom>" + spString + "</dom>"
174
    dom = parseString(spString)
175
    refunds = dom.getElementsByTagName('checkRefundHistoryPojo')
176
    for refund in refunds:
6317 rajveer 177
        try:
178
            respStatus = refund.getElementsByTagName('respStatus')[0].childNodes[0].data
179
            respCode = refund.getElementsByTagName('respCode')[0].childNodes[0].data
180
            respDesc = refund.getElementsByTagName('respDesc')[0].childNodes[0].data
181
            refundAmmount = refund.getElementsByTagName('refundAmmount')[0].childNodes[0].data
182
            transId = refund.getElementsByTagName('transId')[0].childNodes[0].data
183
            deviceNo = refund.getElementsByTagName('deviceNo')[0].childNodes[0].data
184
            refundDateString = refund.getElementsByTagName('refundDate')[0].childNodes[0].data
185
            transactionDate  = refund.getElementsByTagName('transactionDate')[0].childNodes[0].data
186
            openningBalance  = refund.getElementsByTagName('openningBalance')[0].childNodes[0].data
187
            closingBalance  = refund.getElementsByTagName('closingBalance')[0].childNodes[0].data
188
            refundTime = time.strptime(refundDateString, "%Y-%m-%d %H:%M:%S.0")
189
            refundDate = datetime(*refundTime[0:6])
190
            refundDetails[transId] = int(refundAmmount), refundDate
191
        except:
192
            continue
9321 anupam.sin 193
    return refundDetails
194
 
195
def getAllTransactions(startDate, endDate):
196
    spString = getRechargeClient().service.getTransactionHistory(username, password, startDate.strftime("%d-%m-%Y"), endDate.strftime("%d-%m-%Y"))
197
    txnDetails = {}
198
    transactions = []
199
    if spString is None or spString == "":
200
        return txnDetails
201
    spString = re.sub('<\?.*\?>','',spString)
202
    spString = "<dom>" + spString + "</dom>"
203
    dom = parseString(spString)
204
    try:
205
        transactions = dom.getElementsByTagName('TransactionHistoryPojo')
206
    except:
9345 anupam.sin 207
        pass
11488 kshitij.so 208
    return transactions
209
 
210
def getRechargeStatus(spiceTID='', merchantTxnId=''):
211
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
212
    print spString
213
    spString = re.sub('<\?.*\?>','',spString)
214
    spString = "<dom>" + spString + "</dom>"
215
    dom = parseString(spString)
216
    response = dom.getElementsByTagName('CheckStatusObj')[0]
217
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
218
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
219
    try:
220
        responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
221
    except:
222
        responseDescription = ""
223
    return responseCode, responseDescription