Subversion Repositories SmartDukaan

Rev

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