def utc2local(utc_datetime, utc_format='%Y-%m-%dT%H:%M:%SZ'): ''' The DateTime format of UTC is not the same even in the same OpenStack: - instance: %Y-%m-%dT%H:%M:%SZ - volume: %Y-%m-%d %H:%M:%S - swift: %Y-%m-%dT%H:%M:%S.%f (eg: 2012-06-26T08:44:09.557970) ''' try: if isinstance(utc_datetime, unicode) or isinstance(utc_datetime, str): utc_datetime = datetime.strptime(utc_datetime.replace(' ', ''), utc_format) utc_dt = pytz.utc.localize(utc_datetime) local_dt = LOCAL_TIME_ZONE.normalize(utc_dt.astimezone(LOCAL_TIME_ZONE)) return local_dt except Exception, e: LOG.error(e) return utc_datetime
def notify_url(request): #首先得到财付通的发来的GET请求 resHandler = ResponseHandler(request) resHandler.setKey(key) if resHandler.isTenpaySign(): #得到notify_id notify_id = resHandler.getParameter("notify_id") LOG.debug("got notify_id: %s" % notify_id) queryReq = RequestHandler() queryReq.init() queryReq.setKey(key) queryReq.setGateURL("https://gw.tenpay.com/gateway/verifynotifyid.xml") queryReq.setParameter("partner", partner) queryReq.setParameter("notify_id", notify_id) httpClient = TenpayHttpClient() httpClient.setTimeOut(5) httpClient.setReqContent(queryReq.getRequestURL()) LOG.debug("queryReq.getRequestURL() : %s" % queryReq.getRequestURL()) #根据得到的notify_id再次到财付通查询验证订单消息 if httpClient.call(): #负责解析httpClient从财付通得到的xml格式中的内容 queryRes = ClientResponseHandler() #加载由httpClient返回的内容 queryRes.setContent(httpClient.getResContent()) LOG.debug("queryRes.getALLParameters(): %s" % queryRes.getALLParameters()) LOG.debug("httpClient.getResContent() : %s" % httpClient.getResContent()) queryRes.setKey(key) if queryRes.isTenpaySign() and queryRes.getParameter( "retcode") == "0" and queryRes.getParameter( "trade_state") == "0" and queryRes.getParameter( "trade_mode") == "1": out_trade_no = queryRes.getParameter("out_trade_no") transaction_id = queryRes.getParameter("transaction_id") trade_state = queryRes.getParameter("trade_state") trade_mode = queryRes.getParameter("trade_mode") total_fee = queryRes.getParameter("total_fee") discount = queryRes.getParameter("discount") #开始处理业务 #注意验证订单不要重复 #注意判断返回金额 p = PayOrder.objects.get(trade_no=out_trade_no) if p.total_fee == int(total_fee) and p.payment_info != '2': p.transaction_id = transaction_id p.trade_state = trade_state p.trade_mode = trade_mode p.ret_code = queryRes.getParameter("retcode") p.ret_msg = queryRes.getParameter("retmsg") p.payment_info = 2 p.save() try: tenant_id = p.tenant_id tenant = Tenant.objects.get(tenant_id=tenant_id) increase = (int(total_fee) * int(recharge_exchange_rate)) tenant.balance += increase tenant.save() if p.send_sms: send_balance_increase_sms(p, tenant, increase) except Exception, e: LOG.error(e) raise e else: pass #处理完毕 LOG.debug( "Trade completed processed: out_trade_no: %s\n total_fee:%s\n transaction_id:%s\n" % (out_trade_no, total_fee, transaction_id)) return "success" else: LOG.debug( "Check sign failed or trade err: trade_state=%s\n retcode=%s\n retmsg=%s\n" % (queryRes.getParameter("trade_state"), queryRes.getParameter("ret_code"), queryRes.getParameter("retmsg"))) return "fail"
def startswith(string, prefix): if isinstance(string, str) or isinstance(string, unicode): return string.startswith(prefix) LOG.error("[%s] is not str object, return False", string) return False
def notify_url(request): #首先得到财付通的发来的GET请求 resHandler = ResponseHandler(request) resHandler.setKey(key) if resHandler.isTenpaySign(): #得到notify_id notify_id = resHandler.getParameter("notify_id") LOG.debug("got notify_id: %s" % notify_id) queryReq = RequestHandler() queryReq.init() queryReq.setKey(key) queryReq.setGateURL("https://gw.tenpay.com/gateway/verifynotifyid.xml") queryReq.setParameter("partner",partner) queryReq.setParameter("notify_id",notify_id) httpClient = TenpayHttpClient() httpClient.setTimeOut(5) httpClient.setReqContent(queryReq.getRequestURL()) LOG.debug("queryReq.getRequestURL() : %s" % queryReq.getRequestURL()) #根据得到的notify_id再次到财付通查询验证订单消息 if httpClient.call(): #负责解析httpClient从财付通得到的xml格式中的内容 queryRes = ClientResponseHandler() #加载由httpClient返回的内容 queryRes.setContent(httpClient.getResContent()) LOG.debug("queryRes.getALLParameters(): %s" % queryRes.getALLParameters()) LOG.debug("httpClient.getResContent() : %s" % httpClient.getResContent()) queryRes.setKey(key) if queryRes.isTenpaySign() and queryRes.getParameter("retcode") == "0" and queryRes.getParameter("trade_state") == "0" and queryRes.getParameter("trade_mode") == "1": out_trade_no = queryRes.getParameter("out_trade_no") transaction_id = queryRes.getParameter("transaction_id") trade_state = queryRes.getParameter("trade_state") trade_mode = queryRes.getParameter("trade_mode") total_fee = queryRes.getParameter("total_fee") discount = queryRes.getParameter("discount") #开始处理业务 #注意验证订单不要重复 #注意判断返回金额 p = PayOrder.objects.get(trade_no=out_trade_no) if p.total_fee == int(total_fee) and p.payment_info != '2': p.transaction_id = transaction_id p.trade_state = trade_state p.trade_mode = trade_mode p.ret_code = queryRes.getParameter("retcode") p.ret_msg = queryRes.getParameter("retmsg") p.payment_info = 2 p.save() try: tenant_id = p.tenant_id tenant = Tenant.objects.get(tenant_id=tenant_id) increase = (int(total_fee) * int(recharge_exchange_rate)) tenant.balance += increase tenant.save() if p.send_sms: send_balance_increase_sms(p, tenant, increase) except Exception,e: LOG.error(e) raise e else: pass #处理完毕 LOG.debug("Trade completed processed: out_trade_no: %s\n total_fee:%s\n transaction_id:%s\n" % (out_trade_no,total_fee,transaction_id)) return "success" else: LOG.debug("Check sign failed or trade err: trade_state=%s\n retcode=%s\n retmsg=%s\n" % (queryRes.getParameter("trade_state"), queryRes.getParameter("ret_code"), queryRes.getParameter("retmsg"))) return "fail"