5416 【工具】兑换码优化(增加超时时间秒配置;修复兑换码在发送游戏服务器使用失败的情况下依然设置已使用的bug;优化错误日志详情输出)
2个文件已修改
79 ■■■■■ 已修改文件
Tool/WebCenter/Coupon/config.ini 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/WebCenter/CouponCode/webapp.py 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/WebCenter/Coupon/config.ini
@@ -18,6 +18,7 @@
;发放礼包卡 通过邮件 失败通知通过 GMT_MediaCard,配置为同一个key
PushPort = 30001
PushKey = GVFoyGfhFDHfgHOU1OQ3RtUFgy5QxPV1
PushTimeout = 10
;固定码列表,没有则放空, 以字母z开头避免混淆; 公共固定码,所有人用同一个码,每个人只能领取一次 {APPID:[码, ...], ...}
;CommonCards = ["zj98u2j0ud1"]
Tool/WebCenter/CouponCode/webapp.py
@@ -25,6 +25,7 @@
import os.path
import zipfile
import time
import traceback
# get: request.query.username request.GET.get('username','')
# post: request.forms.get('username')  request.POST.get('username')
@@ -45,6 +46,7 @@
# GM端口
PushPort = ConfigIO.GetValue("Coupon", "PushPort")
PushKey = ConfigIO.GetValue("Coupon", "PushKey")
PushTimeout = ConfigIO.GetInt("Coupon", "PushTimeout", 5)
CommonCards = eval(ConfigIO.GetValue("Coupon", "CommonCards"))
# 发放奖励邮件内容json,utf8编码
@@ -83,8 +85,11 @@
    if msgEx:
        errmsg = "%s : %s" % (errmsg, msgEx)
    resData = {"errcode":errcode, "errmsg":errmsg}
    mylog.debug("resData: %s" % str(resData))
    #mylog.info("resData: %s" % str(resData))
    if errcode != ErrCode_OK:
        mylog.error("resError: %s" % str(resData))
    else:
        mylog.debug("resData: %s" % str(resData))
        #mylog.info("resData: %s" % str(resData))
    return json.dumps(resData, ensure_ascii=False)
                
@@ -218,18 +223,20 @@
        result, commondata = dbController.find_one(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
        if commondata:
            # 已使用
            return SendGm(ErrCode_Used, gmresult, pushurl)
            return SendGm(ErrCode_Used, gmresult, pushurl)[1]
        
        commCheckStatus = CommCheck(dataDict, codeStr)
        if commCheckStatus != None:
            return SendGm(commCheckStatus, gmresult, pushurl)
            return SendGm(commCheckStatus, gmresult, pushurl)[1]
        
        gmresult['code'] = codeStr
        gmresult['coupontype'] = codeStr  # 统一格式,服务器不一定有用,固定码根据 codeStr 发奖励
        
        dbController.insert(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
        mylog.debug("common ok")
        return SendGm(ErrCode_OK, gmresult, pushurl)
        retCode, retMsg = SendGm(ErrCode_OK, gmresult, pushurl)
        if retCode == ErrCode_OK:
            dbController.insert(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
            mylog.debug("common ok")
        return retMsg
    
    #-----------微信商城----------------------
    if codeStr.startswith('wx'):
@@ -242,7 +249,7 @@
        
        if int(wxdata['status']) == 1:
            mylog.debug("wxcard used!")
            return SendGm(ErrCode_Used, gmresult, pushurl)
            return SendGm(ErrCode_Used, gmresult, pushurl)[1]
        
        wxdata['status'] = 1
        wxdata['accid'] = dataDict.get("accid", "")     # 此处用原始账号
@@ -267,35 +274,35 @@
    if not data:
        #无此卡
        mylog.debug("no card")
        return SendGm(ErrCode_Invalid, gmresult, pushurl)
        return SendGm(ErrCode_Invalid, gmresult, pushurl)[1]
    if int(data['status']) == 1:
        #已使用,同卡号记录默认可用,避免断线发送失败的情况(未返回结果验证情况下)
        mylog.debug("card used!")
        return SendGm(ErrCode_Used, gmresult, pushurl)
        return SendGm(ErrCode_Used, gmresult, pushurl)[1]
        
    couponType = data["coupontype"]
    commCheckStatus = CommCheck(dataDict, data["coupontype"])
    if commCheckStatus != None:
        return SendGm(commCheckStatus, gmresult, pushurl)
        return SendGm(commCheckStatus, gmresult, pushurl)[1]
    
    result, data2 = dbController.find_one(CouponDB.CouponBatchColName, {"couponid":data["couponid"]})
    if not data2:
        #此批次卡已删除
        mylog.debug("no couponid")
        return SendGm(ErrCode_Invalid, gmresult, pushurl)
        return SendGm(ErrCode_Invalid, gmresult, pushurl)[1]
    if int(data2['status']) == 1:
        #暂停使用该批次卡
        mylog.debug("couponid frozed")
        return SendGm(ErrCode_Invalid, gmresult, pushurl)
        return SendGm(ErrCode_Invalid, gmresult, pushurl)[1]
    if (data2["minserverno"] != 0 and data2["maxserverno"] != 0):
        if int(data2["minserverno"]) > sid or int(data2["maxserverno"]) < sid:
            #不在指定区
            mylog.debug("no sid")
            return SendGm(ErrCode_Invalid, gmresult, pushurl)
            return SendGm(ErrCode_Invalid, gmresult, pushurl)[1]
    if data2["expiretime"] != "" and datetime.datetime.today() > GetDateTimeByStr(data2["expiretime"]):
        #已过期
        mylog.debug("time pass")
        return SendGm(ErrCode_Invalid, gmresult, pushurl)
        return SendGm(ErrCode_Invalid, gmresult, pushurl)[1]
    
    prefix = "" # 固定前缀
    if couponType in MailJson:
@@ -315,18 +322,20 @@
            gmresult['coupontype'] = data["coupontype"]
            gmresult['code'] = codeStr
            mylog.debug("use again")
            return SendGm(ErrCode_TypeUsed, gmresult, pushurl)
            return SendGm(ErrCode_TypeUsed, gmresult, pushurl)[1]
        
    data['status'] = 1
    data['accid'] = accid
    data['usetime'] = str(datetime.datetime.today())
    
    dbController.update(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName}, data)
    gmresult['code'] = codeStr
    gmresult['coupontype'] = data["coupontype"]
    
    mylog.debug("card ok!")
    return SendGm(ErrCode_OK, gmresult, pushurl)
    retCode, retMsg = SendGm(ErrCode_OK, gmresult, pushurl)
    if retCode == ErrCode_OK:
        dbController.update(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName}, data)
        mylog.debug("card ok!")
    return retMsg
def CommCheck(dataDict, coupontype):
    ## 通用常规检查
@@ -363,9 +372,9 @@
        else:
            gmurl = "http://%s:%s/Server/Tool.php" % (pushurl, PushPort)            
        gmkey = PushKey
        mylog.debug("SendGm:%s" % gmurl)
        if not gmkey or not PushPort:
            return CouponCodeResponse(ErrCode_OtherErr, "no PushKey or not PushPort")
            return ErrCode_OtherErr, CouponCodeResponse(ErrCode_OtherErr, "no PushKey or not PushPort")
        mylog.debug("SendGm:%s" % gmurl)
        
        notifyMsg = ""
        if errcode in ErrCodeMsgInfo:
@@ -378,7 +387,7 @@
            SendGMTCMD(gmurl, gmtData, gmkey, "GMT_MediaCard")
            
        if errcode != ErrCode_OK:
            return CouponCodeResponse(errcode)
            return errcode, CouponCodeResponse(errcode)
        
        coupontype = gmresult["coupontype"]
        if coupontype in MailJson:
@@ -411,14 +420,15 @@
            
        pack_data["Detail"] = "cardCode:" + gmresult["code"]
        
        SendGMTCMD(gmurl, pack_data, gmkey, "GMT_AddPersonalCompensation")
        return CouponCodeResponse(ErrCode_OK)
    except Exception, e:
        mylog.debug("SendGm error %s" % e)
        return CouponCodeResponse(ErrCode_OtherErr, "gm error")
    return
        ResultType = SendGMTCMD(gmurl, pack_data, gmkey, "GMT_AddPersonalCompensation")
        if ResultType == 0:
            return ErrCode_OK, CouponCodeResponse(ErrCode_OK)
        else:
            return ErrCode_OtherErr, CouponCodeResponse(ErrCode_OtherErr, "ResultType error is %s" % ResultType)
    except BaseException:
        mylog.error("SendGm error %s" % traceback.format_exc())
    return ErrCode_OtherErr, CouponCodeResponse(ErrCode_OtherErr, "gm error")
def SendGMTCMD(gmurl, gmtData, gmkey, pack_type):
    ## 发送GM工具命令
    pack_data = {}
@@ -434,10 +444,12 @@
    post = {}
    post['pack'] = pack_data_dict;
    post['sign'] = sign;
    result = urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
    #content = result.read()
    result = urllib2.urlopen(gmurl, urllib.urlencode(post), PushTimeout)
    retContent = result.read()
    resultDict = json.loads(retContent)
    result.close()
    return
    ResultType = resultDict.get("ResultType", 5) # 5未知错误
    return ResultType
    
def GetDateTimeByStr(timeStr, timeFomat="%Y-%m-%d"):