Rev 12979 | Rev 20256 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
from suds.client import Clientimport base64, refrom xml.dom.minidom import parseStringimport loggingfrom datetime import datetimeimport timefrom shop2020.config.client.ConfigClient import ConfigClientfrom decimal import Decimalfrom shop2020.thriftpy.model.v1.order.ttypes import RechargeModelogging.basicConfig(level=logging.INFO)username = base64.b64encode('saholic20')password = base64.b64encode('ap2020sh')account_url = 'https://api.spicesafar.com/McommWebServices/AccountApiMcomm?wsdl'recharge_url = 'https://api.spicesafar.com/McommWebServices/RechargeApiMcomm?wsdl'aclient = Noneraclient = Noneallow_recharge = Falseallow_recharge_string = ConfigClient().get_property('allow_recharge')if allow_recharge_string in ['True', 'true']:allow_recharge = Truedef getAccountClient():global aclientif aclient is None:aclient = Client(account_url, timeout=70)return aclientdef getRechargeClient():global raclientif raclient is None:raclient = Client(recharge_url, timeout=70)return raclientdef rechargeDevice(transactionId, rechargeType, strProviderCode, deviceNumber, amount, plan, storeCode = '', rechargeMode=None):if not allow_recharge:return 'S', '00', 'spiceTID', 'SUCCESS', 'aggTID', 'providerTID'spString = getRechargeClient().service.getRecharge(username, password, '919650889334', 'SOAP', '115.249.47.66', transactionId, rechargeType, strProviderCode, deviceNumber, amount, 'DEBIT', plan, storeCode)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)response = dom.getElementsByTagName('ActiveServicesPojo')[0]retStatus = response.getElementsByTagName('resStatus')[0].childNodes[0].dataretCode = response.getElementsByTagName('respCode')[0].childNodes[0].dataspiceTID = response.getElementsByTagName('SpiceTID')[0].childNodes[0].dataretDesc = response.getElementsByTagName('shotDesc')[0].childNodes[0].datatry:aggTID = response.getElementsByTagName('aggregatorId')[0].childNodes[0].dataproviderTID = response.getElementsByTagName('ProviderTID')[0].childNodes[0].dataexcept:aggTID = ''providerTID = ''if (retCode !='00' or retStatus !='S') and rechargeMode == RechargeMode._NAMES_TO_VALUES.get('SYNC'):try:if (checkTransactionStatus('',transactionId))[0]:return 'S','00', spiceTID, retDesc, aggTID, providerTIDexcept:passreturn retStatus, retCode, spiceTID, retDesc, aggTID, providerTIDdef checkTransactionStatus(spiceTID='', merchantTxnId=''):if not allow_recharge:return True, ''spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)response = dom.getElementsByTagName('CheckStatusObj')[0]transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].dataresponseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].datatry:responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].dataexcept:responseDescription = ""aggregatorRespCode = response.getElementsByTagName('aggregatorRespCode')[0].childNodes[0].dataif responseCode == '00' and transStatus == 'S':return True, responseDescriptionelif responseCode == 'STP' and transStatus == 'S':raise Exception(111, "Still status is not known")elif responseCode in ('STO','US', 'UP') and transStatus == 'S':if aggregatorRespCode == '00':return True, responseDescriptionif aggregatorRespCode != 'NA':return False, responseDescriptionraise Exception(111, "Still status is not known")else:return False, responseDescriptiondef getAccountdetail():return getAccountClient().service.getAccountdetail(username, password)def getBalance():spString = getAccountClient().service.getBalance(username, password)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)response = dom.getElementsByTagName('BalancePojo')[0]balanceAmount = response.getElementsByTagName('balance_amt')[0].childNodes[0].datareturn Decimal(balanceAmount)def checkServiceProviderApi(strServiceCode, strDeviceNumber):spString = getAccountClient().service.checkServiceProviderApi(username, password, strServiceCode, strDeviceNumber)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)response = dom.getElementsByTagName('CheckServiceProviderPojo')[0]providerCode = response.getElementsByTagName('providerCode')[0].childNodes[0].datatry:operatorCircle = response.getElementsByTagName('operatorCircle')[0].childNodes[0].dataexcept:operatorCircle = ""return providerCode, operatorCircledef validateService(strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan):return getAccountClient().service.validateService(username, password, strServiceCode, strProviderCode, strDeviceNumber, dbAmount, strPlan)def getAvailableServices():spString = getAccountClient().service.getServiceApi(username, password)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)serviceApis = dom.getElementsByTagName('ServiceApiPojo')services = {}for serviceApi in serviceApis:services[serviceApi.getElementsByTagName('serviceCode')[0].childNodes[0].data] = serviceApi.getElementsByTagName('serviceDescription')[0].childNodes[0].datareturn servicesdef getServiceProvidersForMobile():return getServiceProvider('MTP')def getServiceProvidersForDTH():return getServiceProvider('RCH')def getServiceProvider(strServiceCode):spString = getAccountClient().service.getServiceProvider(username, password, strServiceCode)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)providers = dom.getElementsByTagName('ServicesProviderPojo')serviceProviders = {}for provider in providers:serviceProviders[provider.getElementsByTagName('providerCode')[0].childNodes[0].data] = provider.getElementsByTagName('providerDescription')[0].childNodes[0].datareturn serviceProvidersdef getServiceDetails(strServiceCode, strProviderCode):spString = getAccountClient().service.getServiceDetail(username, password, strServiceCode, strProviderCode)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)details = dom.getElementsByTagName('ServiceDetailPojo')serviceDetails = {}for detail in details:serviceDetails['Denomination Type'] = detail.getElementsByTagName('DenominationType')[0].childNodes[0].dataserviceDetails['Denomination Value'] = detail.getElementsByTagName('DenominationValue')[0].childNodes[0].datareturn serviceDetailsdef getRefunds(forDate):spString = getRechargeClient().service.checkRefundHistory(username, password, '3306', forDate.strftime("%d-%m-%Y"))print spStringrefundDetails = {}if spString is None or spString == "":return refundDetailsspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)refunds = dom.getElementsByTagName('checkRefundHistoryPojo')for refund in refunds:try:respStatus = refund.getElementsByTagName('respStatus')[0].childNodes[0].datarespCode = refund.getElementsByTagName('respCode')[0].childNodes[0].datarespDesc = refund.getElementsByTagName('respDesc')[0].childNodes[0].datarefundAmmount = refund.getElementsByTagName('refundAmmount')[0].childNodes[0].datatransId = refund.getElementsByTagName('transId')[0].childNodes[0].datadeviceNo = refund.getElementsByTagName('deviceNo')[0].childNodes[0].datarefundDateString = refund.getElementsByTagName('refundDate')[0].childNodes[0].datatransactionDate = refund.getElementsByTagName('transactionDate')[0].childNodes[0].dataopenningBalance = refund.getElementsByTagName('openningBalance')[0].childNodes[0].dataclosingBalance = refund.getElementsByTagName('closingBalance')[0].childNodes[0].datarefundTime = time.strptime(refundDateString, "%Y-%m-%d %H:%M:%S.0")refundDate = datetime(*refundTime[0:6])refundDetails[transId] = int(refundAmmount), refundDateexcept:continuereturn refundDetailsdef getAllTransactions(startDate, endDate):spString = getRechargeClient().service.getTransactionHistory(username, password, startDate.strftime("%d-%m-%Y"), endDate.strftime("%d-%m-%Y"))txnDetails = {}transactions = []if spString is None or spString == "":return txnDetailsspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)try:transactions = dom.getElementsByTagName('TransactionHistoryPojo')except:passreturn transactionsdef getRechargeStatus(spiceTID='', merchantTxnId=''):spString = getRechargeClient().service.getCheckStatus(username,password,spiceTID,merchantTxnId)print spStringspString = re.sub('<\?.*\?>','',spString)spString = "<dom>" + spString + "</dom>"dom = parseString(spString)response = dom.getElementsByTagName('CheckStatusObj')[0]transStatus = response.getElementsByTagName('transStatus')[0].childNodes[0].dataresponseCode = response.getElementsByTagName('ResponseCode')[0].childNodes[0].datatry:responseDescription = response.getElementsByTagName('ResponseDescription')[0].childNodes[0].dataexcept:responseDescription = ""return responseCode, responseDescriptiondef main():#print rechargeDevice(20141031157,'MTP','BSP','9459060666',1,'')print checkTransactionStatus('','664267')if __name__=='__main__':main()