| | |
| | | from lib import mylog, CommFunc
|
| | | import os.path
|
| | | import zipfile
|
| | | import time
|
| | |
|
| | | # get: request.query.username request.GET.get('username','')
|
| | | # post: request.forms.get('username') request.POST.get('username')
|
| | |
| | |
|
| | | myapp = Bottle()
|
| | |
|
| | | # 防止短时间内的多次无效访问 accid:time
|
| | | AccID_Cache_Dict = {}
|
| | |
|
| | | def CleanAccID():
|
| | | global AccID_Cache_Dict
|
| | | |
| | | if len(AccID_Cache_Dict) < 100:
|
| | | return |
| | | AccID_Cache_Dict = {}
|
| | |
|
| | |
|
| | | #/api/Coupon/index.php?couponBatchId=%s&agentName=%s"
|
| | |
| | | # http://center.xxx.com:53003/Coupon/CouponCode.php
|
| | | @myapp.route('/Coupon/CouponCode.php')
|
| | | def CouponCode():
|
| | | global AccID_Cache_Dict
|
| | | dataDict = request.GET
|
| | |
|
| | | for key, value in dataDict.items():
|
| | |
| | | codeStr = dataDict.get("code", "")
|
| | | if not codeStr:
|
| | | return
|
| | | |
| | | codeStr = codeStr.strip()
|
| | | #只是用来拼接账号
|
| | | spID = dataDict.get("spid", "")
|
| | | if not spID:
|
| | | tdict = {"jisugame":"jisu", 'spxjgame':'sipu', 'mrgame':'maoer',
|
| | | "jisugameios":"jisu", 'spyxxjios':'sipu', 'mrgameios':'maoer'}
|
| | | |
| | | # 没传的话默认和appid一样
|
| | | spID = tdict.get(agentName, agentName)
|
| | |
|
| | | accid = dataDict.get("accid", "")
|
| | | if not accid:
|
| | |
| | | return
|
| | |
|
| | | # 转化为游戏账号
|
| | | accid = "%s@%s@s%s"%(accid, spID, sid)
|
| | | accid = "%s@%s@s%s"%(accid.lower(), spID, sid)
|
| | | |
| | | try:
|
| | | CleanAccID()
|
| | | #mylog.debug("AccID_Cache_Dict : %s"%str(AccID_Cache_Dict))
|
| | | if accid not in AccID_Cache_Dict:
|
| | | AccID_Cache_Dict[accid] = int(time.time())
|
| | | elif time.time() - AccID_Cache_Dict[accid] < 2:
|
| | | mylog.debug("==========bad: fast click %s"%accid)
|
| | | return |
| | | |
| | | AccID_Cache_Dict[accid] = int(time.time())
|
| | | except:
|
| | | pass
|
| | | |
| | |
|
| | | dbController = CouponDB.GetDBEventCon()
|
| | | if not dbController:
|
| | |
| | | gmresult = {'accID':accid, 'sid':sid, 'channel':agentName}
|
| | |
|
| | | #-----------统一固定码处理----------------------
|
| | | if codeStr in CommonCards:
|
| | | CommonCardsList = CommonCards.get(agentName, [])
|
| | | if codeStr in CommonCardsList:
|
| | | # 不同固定码各自只能领一次
|
| | | result, commondata = dbController.find_one(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
|
| | | if commondata:
|
| | |
| | |
|
| | | wxdata['status'] = 1
|
| | | wxdata['accid'] = dataDict.get("accid", "") # 此处用原始账号
|
| | | wxdata['usetime'] = str(datetime.datetime.today())
|
| | | wxdata['usetime'] = str(datetime.datetime.today()).split(".")[0]
|
| | |
|
| | | wxdata['appid'] = agentName
|
| | | wxdata['serverid'] = 's%s'%sid
|
| | |
| | | SendDataCollectorBillInfo(wxdata, pushurl, operateID)
|
| | | return
|
| | |
|
| | | |
| | | #-----------批量兑换码处理----------------------
|
| | | #-----------批量兑换码处理,同类型可重复领取----------------------
|
| | | if codeStr.startswith('h'):
|
| | | result, data = dbController.find_one(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName})
|
| | |
|
| | | if not data:
|
| | | #无此卡
|
| | | gmresult['status'] = 0
|
| | | mylog.debug("no card")
|
| | | return SendGm(gmresult, pushurl)
|
| | | if int(data['status']) == 1:
|
| | | #已使用,同卡号记录默认可用,避免断线发送失败的情况(未返回结果验证情况下)
|
| | | gmresult['status'] = 2
|
| | | mylog.debug("card used!")
|
| | | return SendGm(gmresult, pushurl)
|
| | | |
| | | result, data2 = dbController.find_one(CouponDB.CouponBatchColName, {"couponid":data["couponid"]})
|
| | | if not data2:
|
| | | #此批次卡已删除
|
| | | gmresult['status'] = 0
|
| | | mylog.debug("no couponid")
|
| | | return SendGm(gmresult, pushurl)
|
| | | if int(data2['status']) == 1:
|
| | | #暂停使用该批次卡
|
| | | gmresult['status'] = 0
|
| | | mylog.debug("couponid frozed")
|
| | | return SendGm(gmresult, pushurl)
|
| | | if (data2["minserverno"] != 0 and data2["maxserverno"] != 0):
|
| | | if int(data2["minserverno"]) > sid or int(data2["maxserverno"]) < sid:
|
| | | #不在指定区
|
| | | gmresult['status'] = 0
|
| | | mylog.debug("no sid")
|
| | | return SendGm(gmresult, pushurl)
|
| | | if data2["expiretime"] != "" and datetime.datetime.today() > GetDateTimeByStr(data2["expiretime"]):
|
| | | #已过期
|
| | | gmresult['status'] = 0
|
| | | mylog.debug("time pass")
|
| | | return SendGm(gmresult, pushurl)
|
| | | |
| | | #可重复领取则不验证同批次卡
|
| | | data['status'] = 1
|
| | | data['accid'] = accid
|
| | | data['usetime'] = str(datetime.datetime.today())
|
| | | |
| | | dbController.update(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName}, data)
|
| | | # 0 不可用,1.可用发放奖励 ,2.已使用 3.同类型卡不能使用两次
|
| | | gmresult['status'] = 1
|
| | | gmresult['code'] = codeStr
|
| | | gmresult['coupontype'] = data["coupontype"]
|
| | | |
| | | mylog.debug("card ok!")
|
| | | return SendGm(gmresult, pushurl)
|
| | |
|
| | | #-----------批量兑换码处理,同类型只领取一次----------------------
|
| | | result, data = dbController.find_one(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName})
|
| | |
|
| | | if not data:
|
| | |
| | | for itemList in Items:
|
| | | pack_data["ItemID%s"%i] = str(itemList[0])
|
| | | pack_data["ItemCnt%s"%i] = str(itemList[1])
|
| | | pack_data["IsBind%s"%i] = '1'
|
| | | pack_data["IsBind%s"%i] = str(itemList[2] if len(itemList) > 2 else 0)
|
| | | i += 1
|
| | |
|
| | | pack_data["pack_type"] = "GMT_AddPersonalCompensation"
|
| | |
| | | post = {}
|
| | | post['pack'] = pack_data_dict;
|
| | | post['sign'] = sign;
|
| | | result = urllib2.urlopen(gmurl, urllib.urlencode(post), 10)
|
| | | result = urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
|
| | |
|
| | | content = result.read()
|
| | | #content = result.read()
|
| | | result.close()
|
| | |
|
| | | # 成功提示
|
| | |
| | | post['sign'] = sign;
|
| | | urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
|
| | |
|
| | | return content
|
| | | return 0
|
| | | except Exception, e:
|
| | | mylog.debug("gm error %s"%e)
|
| | | return
|
| | |
| | | post['ip'] = wxdata['ip']
|
| | | post['level'] = wxdata['level']
|
| | | post['viplevel'] = wxdata['viplevel']
|
| | | post['time'] = wxdata['usetime'] |
| | | post['time'] = int(time.time())
|
| | |
|
| | | key = ConfigIO.GetValue("Coupon", "%s_wxkey"%operateID)
|
| | | key = ConfigIO.GetValue("Coupon", "key_%s"%post['appid'])
|
| | | #md5(appid=$appid®ionid=$regionid&passport=$passport&&money=$money&time=$time$app_secret)
|
| | | sign = md5.md5("appid=%s®ionid=%s&passport=%s&money=%s&time=%s%s"%(\
|
| | | post['appid'], post['regionid'], post['passport'], post['money'], post['time'], key)).hexdigest()
|
| | | |
| | | post['Sign'] = sign
|
| | | result = urllib2.urlopen(billurl, urllib.urlencode(post), 3)
|
| | | mylog.debug("SendDataCollectorBillInfo result %s"%result.read())
|
| | | signStr = "appid=%s®ionid=%s&passport=%s&money=%s&time=%s%s"%(\
|
| | | post['appid'], post['regionid'], post['passport'], post['money'], post['time'], key)
|
| | | sign = md5.md5(signStr).hexdigest()
|
| | | #mylog.debug("SendDataCollectorBillInfo %s-%s-%s-%s"%(signStr, sign, key, post))
|
| | | post['sign'] = sign
|
| | | result = urllib2.urlopen(billurl +"?" + urllib.urlencode(post), timeout =3)
|
| | | #mylog.debug("SendDataCollectorBillInfo result %s"%result.read())
|
| | |
|
| | | except Exception, e:
|
| | | mylog.debug("SendDataCollectorBillInfo error %s"%e)
|