Subversion Repositories SmartDukaan

Rev

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