Subversion Repositories SmartDukaan

Rev

Rev 6276 | Rev 6298 | 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
6092 rajveer 7
logging.basicConfig(level=logging.INFO)
6102 rajveer 8
#logging.getLogger('suds.client').setLevel(logging.DEBUG)
9
#logging.getLogger('suds.transport').setLevel(logging.DEBUG)
6048 rajveer 10
 
11
 
12
username = base64.b64encode('saholic20')
13
password = base64.b64encode('ap2020sh')
6151 rajveer 14
account_url = 'http://125.19.68.55/McommWebServices/AccountApiMcomm?wsdl'
6048 rajveer 15
recharge_url = 'http://125.19.68.55/McommWebServices/RechargeApiMcomm?wsdl'
6144 rajveer 16
aclient = None
17
raclient = None
6048 rajveer 18
 
19
 
6144 rajveer 20
def getAccountClient():
21
    global aclient
22
    if aclient is None:
6227 rajveer 23
        aclient = Client(account_url, timeout=70)
6144 rajveer 24
    return aclient
25
 
26
def getRechargeClient():
27
    global raclient
28
    if raclient is None:
6227 rajveer 29
        raclient = Client(recharge_url, timeout=70)    
6144 rajveer 30
    return raclient
31
 
6161 rajveer 32
def rechargeDevice(transactionId, rechargeType, strProviderCode, deviceNumber, amount, plan):
6162 rajveer 33
    spString = getRechargeClient().service.getRecharge(username, password, '919650889334', 'SOAP', '115.249.47.66', transactionId, rechargeType, strProviderCode, deviceNumber, amount, 'DEBIT', '', plan, '')
6093 rajveer 34
    print spString
6048 rajveer 35
    spString = re.sub('<\?.*\?>','',spString)
36
    spString = "<dom>" + spString + "</dom>"
37
    dom = parseString(spString)
38
    response = dom.getElementsByTagName('ActiveServicesPojo')[0]
39
    retStatus = response.getElementsByTagName('resStatus')[0].childNodes[0].data
40
    retCode = response.getElementsByTagName('respCode')[0].childNodes[0].data
41
    spiceTID = response.getElementsByTagName('SpiceTID')[0].childNodes[0].data
6092 rajveer 42
    retDesc = response.getElementsByTagName('shotDesc')[0].childNodes[0].data
43
    return retStatus, retCode, spiceTID, retDesc 
6048 rajveer 44
 
45
def getAccountdetail():
6144 rajveer 46
    return getAccountClient().service.getAccountdetail(username, password)
6151 rajveer 47
 
6048 rajveer 48
def getBalance():
6151 rajveer 49
    spString = getAccountClient().service.getBalance(username, password)
50
    print spString
51
    spString = re.sub('<\?.*\?>','',spString)
52
    spString = "<dom>" + spString + "</dom>"
53
    dom = parseString(spString)
54
    response = dom.getElementsByTagName('BalancePojo')[0]
55
    balanceAmount = response.getElementsByTagName('balance_amt')[0].childNodes[0].data
56
    return balanceAmount
6048 rajveer 57
 
58
def checkServiceProviderApi(strServiceCode, strDeviceNumber):
6144 rajveer 59
    spString = getAccountClient().service.checkServiceProviderApi(username, password, strServiceCode, strDeviceNumber)
6093 rajveer 60
    print spString
6054 rajveer 61
    spString = re.sub('<\?.*\?>','',spString)
62
    spString = "<dom>" + spString + "</dom>"
63
    dom = parseString(spString)
64
    response = dom.getElementsByTagName('CheckServiceProviderPojo')[0]
65
    providerCode = response.getElementsByTagName('providerCode')[0].childNodes[0].data
6235 rajveer 66
    try:
67
        operatorCircle = response.getElementsByTagName('operatorCircle')[0].childNodes[0].data
68
    except:
69
        operatorCircle = ""
70
    return providerCode, operatorCircle
6048 rajveer 71
 
72
def validateService(strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan):
6144 rajveer 73
    return getAccountClient().service.validateService(username, password, strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan)
6048 rajveer 74
 
75
def getAvailableServices():
6144 rajveer 76
    spString = getAccountClient().service.getServiceApi(username, password)
6109 rajveer 77
    print spString
6048 rajveer 78
    spString = re.sub('<\?.*\?>','',spString)
79
    spString = "<dom>" + spString + "</dom>"
80
    dom = parseString(spString)
81
    serviceApis = dom.getElementsByTagName('ServiceApiPojo')
82
    services = {}
83
    for serviceApi in serviceApis:
84
        services[serviceApi.getElementsByTagName('serviceCode')[0].childNodes[0].data] = serviceApi.getElementsByTagName('serviceDescription')[0].childNodes[0].data 
85
    return services
86
 
87
 
88
def getServiceProvidersForMobile():
89
    return getServiceProvider('MTP')
90
 
91
def getServiceProvidersForDTH():
92
    return getServiceProvider('RCH')
93
 
94
def getServiceProvider(strServiceCode):
6144 rajveer 95
    spString = getAccountClient().service.getServiceProvider(username, password, strServiceCode)
6109 rajveer 96
    print spString
6048 rajveer 97
    spString = re.sub('<\?.*\?>','',spString)
98
    spString = "<dom>" + spString + "</dom>"
99
    dom = parseString(spString)
100
    providers = dom.getElementsByTagName('ServicesProviderPojo')
101
    serviceProviders = {}
102
    for provider in providers:
103
        serviceProviders[provider.getElementsByTagName('providerCode')[0].childNodes[0].data] = provider.getElementsByTagName('providerDescription')[0].childNodes[0].data 
104
    return serviceProviders
6151 rajveer 105
 
6048 rajveer 106
def getServiceDetails(strServiceCode, strProviderCode):
6144 rajveer 107
    spString = getAccountClient().service.getServiceDetail(username, password, strServiceCode, strProviderCode)
6109 rajveer 108
    print spString
6048 rajveer 109
    spString = re.sub('<\?.*\?>','',spString)
110
    spString = "<dom>" + spString + "</dom>"
111
    dom = parseString(spString)
112
    details = dom.getElementsByTagName('ServiceDetailPojo')
113
    serviceDetails = {}
114
    for detail in details:
115
        serviceDetails['Denomination Type'] = detail.getElementsByTagName('DenominationType')[0].childNodes[0].data
116
        serviceDetails['Denomination Value'] = detail.getElementsByTagName('DenominationValue')[0].childNodes[0].data 
117
    return serviceDetails
118
 
6112 rajveer 119
def checkTransactionStatus(spiceTID='', merchantTxnId=''):
6144 rajveer 120
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
6112 rajveer 121
    print spString
122
    spString = re.sub('<\?.*\?>','',spString)
123
    spString = "<dom>" + spString + "</dom>"
124
    dom = parseString(spString)
125
    response = dom.getElementsByTagName('CheckStatusObj')[0]
126
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
6276 rajveer 127
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
128
    responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
6286 rajveer 129
    aggregatorRespCode = response.getElementsByTagName('aggregatorRespCode')[0].childNodes[0].data
6112 rajveer 130
    if responseCode == '00' and transStatus == 'S':
131
        return True, responseDescription
6276 rajveer 132
    elif responseCode in ('STO','US', 'UP') and transStatus == 'S':
6286 rajveer 133
        if aggregatorRespCode == '00':
134
            return True, responseDescription    
6276 rajveer 135
        raise Exception(111, "Still status is not known")
6112 rajveer 136
    else:
6235 rajveer 137
        return False, responseDescription
138
 
139
def getRefunds(forDate):
140
    spString = getRechargeClient().service.checkRefundHistory(username, password, '3306', forDate.strftime("%d-%m-%Y"))
141
    print spString
142
    refundDetails = {}
143
    if spString is None or spString == "":
144
        return refundDetails
145
    spString = re.sub('<\?.*\?>','',spString)
146
    spString = "<dom>" + spString + "</dom>"
147
    dom = parseString(spString)
148
    refunds = dom.getElementsByTagName('checkRefundHistoryPojo')
149
    for refund in refunds:
150
        respStatus = refund.getElementsByTagName('respStatus')[0].childNodes[0].data
151
        respCode = refund.getElementsByTagName('respCode')[0].childNodes[0].data
152
        respDesc = refund.getElementsByTagName('respDesc')[0].childNodes[0].data
153
        refundAmmount = refund.getElementsByTagName('refundAmmount')[0].childNodes[0].data
154
        transId = refund.getElementsByTagName('transId')[0].childNodes[0].data
155
        deviceNo = refund.getElementsByTagName('deviceNo')[0].childNodes[0].data
156
        refundDateString = refund.getElementsByTagName('refundDate')[0].childNodes[0].data
157
        transactionDate  = refund.getElementsByTagName('transactionDate')[0].childNodes[0].data
158
        openningBalance  = refund.getElementsByTagName('openningBalance')[0].childNodes[0].data
159
        closingBalance  = refund.getElementsByTagName('closingBalance')[0].childNodes[0].data
160
        refundTime = time.strptime(refundDateString, "%Y-%m-%d %H:%M:%S.0")
161
        refundDate = datetime(*refundTime[0:6])
162
        refundDetails[transId] = int(refundAmmount), refundDate
163
    return refundDetails