Rev 21993 | Rev 22387 | 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 RechargeModefrom suds.cache import NoCachelogging.basicConfig(level=logging.INFO)username = base64.b64encode('saholic20')password = base64.b64encode('ap2020sh')account_url = "file:///recharge-wsdls/AccountApiMcomm.xml"recharge_url = "file:///recharge-wsdls/RechargeApiMcomm.xml"aclient = Noneraclient = Noneallow_recharge = Falsestore_map = {'H01':'105','H02':'109','H03':'113','H04':'115','H05':'116','H06':'119','H07':'120','H08':'125','H09':'129','H10':'130','H11':'131','H12':'132','H13':'133','H14':'134','H15':'135','H16':'141','H17':'143','H18':'144','H19':'146','H20':'147','H21':'150','H22':'151','H23':'153','H24':'159','H25':'164','H26':'189','H27':'226','H28':'230','H29':'253','H30':'254','H31':'265','H32':'281','H33':'296','H34':'327','H35':'358','H36':'425','H37':'427','H38':'440','H39':'441','H40':'469','H41':'475','H42':'502','H43':'C31','H44':'C33','H45':'C34','H46':'C52','H47':'C70','H48':'C76','H49':'C86','H50':'C87','H51':'CA6','H52':'CB7','H53':'CC5','H54':'CC9','H55':'CE0','H56':'CF6','H57':'CF8','H58':'CG3','H59':'CQ0','H60':'CQ9','H61':'CR4','H62':'CS0','H70':'M01','H71':'M02','H72':'M07','H73':'M08','H74':'MB5','H75':'CM8','H76':'M78','H77':'112','H78':'137','H79':'138','H80':'165','H81':'255','H82':'317','H83':'347','H84':'476','H85':'477','H86':'518','H87':'C49','H88':'CC4','H89':'CF9','H90':'178','H91':'183','H92':'200','H93':'239','H94':'309','H95':'CD1','H96':'CD8','H97':'CE1','H98':'CI5','H99':'CK6','HA0':'CL2','HA1':'CN5','HA2':'G02','HA3':'G03','HA4':'G04','HA5':'G05','HA6':'G06','HA7':'G07','HA8':'G10','HA9':'G12','HB0':'G14','HB1':'G15','HB2':'G17','HB3':'M49','HB4':'M51','HB5':'M54','HB6':'353','HB7':'414','HB8':'431','HB9':'CA0','HC0':'CK4','HC1':'M26','HC2':'M27','HC3':'208','HC4':'215','HC5':'231','HC6':'240','HC7':'252','HC8':'289','HC9':'383','HD0':'CB3','HD1':'CD7','HD2':'CJ0','HD3':'CM3','HD4':'CN9','HD5':'CO3','HD6':'CQ1','HD7':'M46','HD8':'424','HD9':'M64','HE0':'145','HE1':'160','HE2':'328','HE3':'331','HE4':'343','HE5':'393','HE6':'460','HE7':'C25','HE8':'C84','HE9':'CB2','HF0':'CC3','HF1':'CC7','HF2':'CH5','HF3':'CP3','HF7':'M15','HF8':'471','HF9':'472','HG0':'481','HG1':'483','HG2':'484','HG3':'486','HG4':'C14','HG5':'C15','HG6':'C21','HG7':'C23','HG8':'C98','HG9':'CD2','HH0':'CD4','HH1':'CD5','HH2':'CG4','HH3':'CG5','HH4':'CG7','HH5':'CG8','HH6':'CI1','HH7':'CJ1','HH8':'CJ7','HH9':'CK1','HI0':'CK2','HI1':'CM1','HI2':'CM2','HI3':'CM5','HI4':'CN0','HI5':'CN4','HI6':'CO0','HI7':'CQ4','HI8':'CQ5','HI9':'CR8','H64':'CS3','H68':'CT4','H63':'CS1','H65':'CS6'}allow_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,cache=NoCache())return aclientdef getRechargeClient():global raclientif raclient is None:raclient = Client(recharge_url, timeout=70,cache=NoCache())return raclientdef rechargeDevice(transactionId, rechargeType, strProviderCode, deviceNumber, amount, plan, storeCode = '', rechargeMode=None):if not allow_recharge:return 'S', '00', 'spiceTID', 'SUCCESS', 'aggTID', 'providerTID'if storeCode:if store_map.get(storeCode) is not None:storeCode = store_map.get(storeCode)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("", 1004866117)getBalance()if __name__=='__main__':main()