示例#1
0
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
示例#2
0
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"
示例#3
0
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
示例#4
0
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"