Subversion Repositories SmartDukaan

Rev

Rev 7369 | Rev 7996 | 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')
6719 anupam.sin 13
account_url = 'https://smsapi.spiceharbour.com/McommWebServices/AccountApiMcomm?wsdl'
14
recharge_url = 'https://smsapi.spiceharbour.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:
38
        return 'S', '00', 'Testing', 'SUCCESS'
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 = ''
56
    return retStatus, retCode, spiceTID, retDesc, aggTID, providerTID 
6048 rajveer 57
 
58
def getAccountdetail():
6144 rajveer 59
    return getAccountClient().service.getAccountdetail(username, password)
6151 rajveer 60
 
6048 rajveer 61
def getBalance():
6151 rajveer 62
    spString = getAccountClient().service.getBalance(username, password)
63
    print spString
64
    spString = re.sub('<\?.*\?>','',spString)
65
    spString = "<dom>" + spString + "</dom>"
66
    dom = parseString(spString)
67
    response = dom.getElementsByTagName('BalancePojo')[0]
68
    balanceAmount = response.getElementsByTagName('balance_amt')[0].childNodes[0].data
6345 rajveer 69
    return Decimal(balanceAmount)
6048 rajveer 70
 
71
def checkServiceProviderApi(strServiceCode, strDeviceNumber):
6144 rajveer 72
    spString = getAccountClient().service.checkServiceProviderApi(username, password, strServiceCode, strDeviceNumber)
6093 rajveer 73
    print spString
6054 rajveer 74
    spString = re.sub('<\?.*\?>','',spString)
75
    spString = "<dom>" + spString + "</dom>"
76
    dom = parseString(spString)
77
    response = dom.getElementsByTagName('CheckServiceProviderPojo')[0]
78
    providerCode = response.getElementsByTagName('providerCode')[0].childNodes[0].data
6235 rajveer 79
    try:
80
        operatorCircle = response.getElementsByTagName('operatorCircle')[0].childNodes[0].data
81
    except:
82
        operatorCircle = ""
83
    return providerCode, operatorCircle
6048 rajveer 84
 
85
def validateService(strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan):
6144 rajveer 86
    return getAccountClient().service.validateService(username, password, strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan)
6048 rajveer 87
 
88
def getAvailableServices():
6144 rajveer 89
    spString = getAccountClient().service.getServiceApi(username, password)
6109 rajveer 90
    print spString
6048 rajveer 91
    spString = re.sub('<\?.*\?>','',spString)
92
    spString = "<dom>" + spString + "</dom>"
93
    dom = parseString(spString)
94
    serviceApis = dom.getElementsByTagName('ServiceApiPojo')
95
    services = {}
96
    for serviceApi in serviceApis:
97
        services[serviceApi.getElementsByTagName('serviceCode')[0].childNodes[0].data] = serviceApi.getElementsByTagName('serviceDescription')[0].childNodes[0].data 
98
    return services
99
 
100
 
101
def getServiceProvidersForMobile():
102
    return getServiceProvider('MTP')
103
 
104
def getServiceProvidersForDTH():
105
    return getServiceProvider('RCH')
106
 
107
def getServiceProvider(strServiceCode):
6144 rajveer 108
    spString = getAccountClient().service.getServiceProvider(username, password, strServiceCode)
6109 rajveer 109
    print spString
6048 rajveer 110
    spString = re.sub('<\?.*\?>','',spString)
111
    spString = "<dom>" + spString + "</dom>"
112
    dom = parseString(spString)
113
    providers = dom.getElementsByTagName('ServicesProviderPojo')
114
    serviceProviders = {}
115
    for provider in providers:
116
        serviceProviders[provider.getElementsByTagName('providerCode')[0].childNodes[0].data] = provider.getElementsByTagName('providerDescription')[0].childNodes[0].data 
117
    return serviceProviders
6151 rajveer 118
 
6048 rajveer 119
def getServiceDetails(strServiceCode, strProviderCode):
6144 rajveer 120
    spString = getAccountClient().service.getServiceDetail(username, password, strServiceCode, strProviderCode)
6109 rajveer 121
    print spString
6048 rajveer 122
    spString = re.sub('<\?.*\?>','',spString)
123
    spString = "<dom>" + spString + "</dom>"
124
    dom = parseString(spString)
125
    details = dom.getElementsByTagName('ServiceDetailPojo')
126
    serviceDetails = {}
127
    for detail in details:
128
        serviceDetails['Denomination Type'] = detail.getElementsByTagName('DenominationType')[0].childNodes[0].data
129
        serviceDetails['Denomination Value'] = detail.getElementsByTagName('DenominationValue')[0].childNodes[0].data 
130
    return serviceDetails
131
 
6112 rajveer 132
def checkTransactionStatus(spiceTID='', merchantTxnId=''):
6144 rajveer 133
    spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)
6112 rajveer 134
    print spString
135
    spString = re.sub('<\?.*\?>','',spString)
136
    spString = "<dom>" + spString + "</dom>"
137
    dom = parseString(spString)
138
    response = dom.getElementsByTagName('CheckStatusObj')[0]
139
    transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].data
6276 rajveer 140
    responseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].data
6298 rajveer 141
    try:
142
        responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].data
143
    except:
144
        responseDescription = ""
6286 rajveer 145
    aggregatorRespCode = response.getElementsByTagName('aggregatorRespCode')[0].childNodes[0].data
6112 rajveer 146
    if responseCode == '00' and transStatus == 'S':
147
        return True, responseDescription
6276 rajveer 148
    elif responseCode in ('STO','US', 'UP') and transStatus == 'S':
6286 rajveer 149
        if aggregatorRespCode == '00':
6357 rajveer 150
            return True, responseDescription
151
        if aggregatorRespCode != 'NA':
152
            return False, responseDescription
6276 rajveer 153
        raise Exception(111, "Still status is not known")
6112 rajveer 154
    else:
6235 rajveer 155
        return False, responseDescription
156
 
157
def getRefunds(forDate):
158
    spString = getRechargeClient().service.checkRefundHistory(username, password, '3306', forDate.strftime("%d-%m-%Y"))
159
    print spString
160
    refundDetails = {}
161
    if spString is None or spString == "":
162
        return refundDetails
163
    spString = re.sub('<\?.*\?>','',spString)
164
    spString = "<dom>" + spString + "</dom>"
165
    dom = parseString(spString)
166
    refunds = dom.getElementsByTagName('checkRefundHistoryPojo')
167
    for refund in refunds:
6317 rajveer 168
        try:
169
            respStatus = refund.getElementsByTagName('respStatus')[0].childNodes[0].data
170
            respCode = refund.getElementsByTagName('respCode')[0].childNodes[0].data
171
            respDesc = refund.getElementsByTagName('respDesc')[0].childNodes[0].data
172
            refundAmmount = refund.getElementsByTagName('refundAmmount')[0].childNodes[0].data
173
            transId = refund.getElementsByTagName('transId')[0].childNodes[0].data
174
            deviceNo = refund.getElementsByTagName('deviceNo')[0].childNodes[0].data
175
            refundDateString = refund.getElementsByTagName('refundDate')[0].childNodes[0].data
176
            transactionDate  = refund.getElementsByTagName('transactionDate')[0].childNodes[0].data
177
            openningBalance  = refund.getElementsByTagName('openningBalance')[0].childNodes[0].data
178
            closingBalance  = refund.getElementsByTagName('closingBalance')[0].childNodes[0].data
179
            refundTime = time.strptime(refundDateString, "%Y-%m-%d %H:%M:%S.0")
180
            refundDate = datetime(*refundTime[0:6])
181
            refundDetails[transId] = int(refundAmmount), refundDate
182
        except:
183
            continue
6235 rajveer 184
    return refundDetails