示例#1
0
def _bind_new_platform(request, platform_name, platform_openId, old_account,
                       result):
    subarea = request.REQUEST.get("subarea", "1")
    fg = False
    msg = ''
    pid = md5.md5(platform_name + str(platform_openId)).hexdigest()
    #检查新账户是否已经被关联
    account_mapping_obj = AccountMapping.get(pid)
    if account_mapping_obj:
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    #检查被绑定用户类型是否是oc
    old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea))
    if old_user_obj.baseinfo['platform'] != 'oc':
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    fg = True
    #创建新账户,将旧账户uid关联到新账户后,删除旧账户
    account_mapping_obj = AccountMapping.create(pid)
    account_mapping_obj.subarea_uids = old_account.subarea_uids
    account_mapping_obj.put()
    #删除oc账户
    old_account.delete()
    #给request安装用户
    request.rk_user = UserBase._install(pid, platform_name, subarea=subarea)
    request.rk_user.baseinfo['pid'] = pid
    request.rk_user.baseinfo['platform'] = platform_name
    request.rk_user.baseinfo['bind_time'] = int(time.time())
    request.rk_user.put()
    update_function = request.rk_user.update_platform_openid(
        platform_name, platform_openId)
    if update_function:
        update_function(result)
    return fg, pid, msg
示例#2
0
def _bind_new_platform(request, platform_name, platform_openId, old_account, result):
    subarea = request.REQUEST.get("subarea", "1")
    fg = False
    msg = ''
    pid = md5.md5(platform_name + str(platform_openId)).hexdigest()
    #检查新账户是否已经被关联
    account_mapping_obj = AccountMapping.get(pid)
    if account_mapping_obj:
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    #检查被绑定用户类型是否是oc
    old_user_obj = UserBase.get(old_account.get_subarea_uid(subarea))
    if old_user_obj.baseinfo['platform'] != 'oc':
        msg = get_msg('login', 'already_bind')
        return fg, pid, msg
    fg = True
    #创建新账户,将旧账户uid关联到新账户后,删除旧账户
    account_mapping_obj = AccountMapping.create(pid)
    account_mapping_obj.subarea_uids = old_account.subarea_uids
    account_mapping_obj.put()
    #删除oc账户
    old_account.delete()
    #给request安装用户
    request.rk_user = UserBase._install(pid, platform_name, subarea=subarea)
    request.rk_user.baseinfo['pid'] = pid
    request.rk_user.baseinfo['platform'] = platform_name
    request.rk_user.baseinfo['bind_time'] = int(time.time())
    request.rk_user.put()
    update_function = request.rk_user.update_platform_openid(platform_name, platform_openId)
    if update_function:
        update_function(result)
    return fg, pid, msg
示例#3
0
def auth_token_for_oc(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证无账号用户
    """
    print "debug_guochen access_token, openid", access_token, openid
    fg = False
    pid = ''
    msg = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    #没有openid时,检查后控制自动分配id的开头是否开启,如果已经关闭,返回提示
    if not openid:
       if game_config.system_config.get('account_assign_switch'):
           fg = True
           pid = get_uuid()
           #验证成功,安装用户
           request.rk_user = UserBase._install(pid,'oc',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
           access_token = get_upwd()
           request.rk_user.account.update_info(pid, access_token)
       else:
           msg = get_msg('login','cannot_register')
           return fg,pid,msg
    if not check_openid(openid):
        msg = get_msg('login','cannot_register')
        return fg,pid,msg
    #有openid时,检查access_token是否正确
    account = AccountMapping.get(openid)
    if not account: 
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = openid
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,'oc',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            # debug 模式下,将传入的access_token 作为新用户taken
            if settings.DEBUG is True:
                access_token = access_token or get_upwd()
            else:
                access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
            account = request.rk_user.account
            print "debug_guochen_new_token pid, access_token, openid", pid, access_token, openid
        else:
            msg = get_msg('login','cannot_register')
            return fg,pid,msg

    elif account.access_token == access_token:
        fg = True
        pid = openid
        #验证成功,安装用户
        request.rk_user = UserBase._install(pid, 'oc', subarea=subarea)
    else:
        print "debug_guochen_erro_token pid, access_token, openid", pid, access_token, openid
        msg = get_msg('login','session_overdue')
    return fg,pid,msg
示例#4
0
def get_friend_list(rk_user, params):
    """获取好友列表
    """
    data = {"friends": []}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.get_friend_ids():
        friend_user = UserBase.get(fid)
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        user_pvp_obj = UserPvp.getEx(fid)
        if user_pvp_obj:
            pvp_title = user_pvp_obj.pvp_title
        else:
            pvp_title = ""
        temp = {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "login_time": friend_property.login_time,
            "want_gift": Friend.getEx(fid).friend_gift.get("want_gift", ["", "", ""]),
            "signature": friend_user.signature,
            "lock": user_friend_obj.is_lock(fid),
            "pvp_title": pvp_title,
        }
        data["friends"].append(temp)
    data["now_num"] = len(data["friends"])
    data["max_num"] = rk_user.user_property.max_friend_num
    return 0, data
示例#5
0
def accept_request(rk_user, params):
    """
    同意好友申请
    """
    fid = params["fid"]
    user_friend_obj = Friend.get(rk_user.uid)
    # 检查是否有这条请求
    if not fid in user_friend_obj.requests:
        return 11, {"msg": utils.get_msg("friend", "no_request")}
    friend_obj = UserBase.get(fid)
    friend_friend_obj = Friend.get(fid)
    rc, msg = __check_can_add_friend(rk_user, friend_obj)
    if rc:
        return rc, {"msg": msg}
    else:
        # 将对方加入到自己的好友列表
        user_friend_obj.add_friend(fid)
        # 将自己加入到对方的好友列表
        friend_friend_obj.add_friend(rk_user.uid)
        if rk_user.uid in friend_friend_obj.self_requests:
            friend_friend_obj.self_requests.pop(rk_user.uid)
            friend_friend_obj.put()
        # 将对方从自己的申请列表中删除
        user_friend_obj.del_request(fid)
        return 0, {}
示例#6
0
def recover_copy():
    """
    * 重置副本次数
    """
    rk_user = UserBase.get(uid)
    recover_copy_coin = game_config.system_config['recover_copy_coin']
    #检查vip可以回复的次数到了没
    if not vip.check_limit_recover(rk_user,'recover_copy'):
        return 11,{'msg':utils.get_msg('user','max_recover_copy_times')}
    else:
        try:
            #检测参数是否合法
            dungeon_type = 'normal' 
            floor_id = '1' 
            room_id  = '1' 
        except:
            return 11,{'msg':utils.get_msg('dungeon','invalid_dungeon_info')}
        #检查用户coin是否足够
        if not rk_user.user_property.minus_coin(recover_copy_coin, 'recover_copy'):
            return 11,{'msg':utils.get_msg('user','not_enough_coin')}
        #添加回复次数
        rk_user.user_property.add_recover_times('recover_copy',dungeon_type)
        user_dungeon_obj = UserDungeon.get(rk_user.uid)
        user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id)

        rk_user.user_property.do_put()
        user_dungeon_obj.do_put()
        return 0,{}
示例#7
0
def pk_top(request):
    ''' PK, 即实时 PvP (Real Time Peer-vs-Peer)
    '''
    data = []
    #       data.append(tmp)

    top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp')
    top_30_uid_score = top_model.get(30, desc=False)
    top_30_uid_score.reverse()

    for uid, score in top_30_uid_score:
        pk_obj = UserRealPvp.get(uid)
        ub_obj = UserBase.get(uid)

        if pk_obj and ub_obj:
            user_prop_obj = UserProperty.get(uid)
            tmp = {}
            #base_info = pvp_obj.pvp_info['base_info']
            tmp['uid'] = uid
            tmp['pt'] = int(score)
            tmp['pvp_title'] = pk_obj.pvp_title
            tmp['username'] = ub_obj.username
            tmp['lv'] = user_prop_obj.lv
            data.append(tmp)

    return "admin/pk_top.html", {'data': data}
示例#8
0
def auth_token_for_91(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """验证91平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    OPEN_URL = 'http://service.sj.91.com/usercenter/AP.aspx'
    #request_url = '%s?AppId=%s&Act=4&Uin=%s&SessionId=%s&Sign=%s'
    sign = md5.new(settings.APP_ID_91 + '4' + openid + access_token\
     + settings.APP_KEY_91).hexdigest()
    data = dict(    
        AppId = settings.APP_ID_91,
        Act = '4',
        Uin = openid,
        SessionId = access_token,
        Sign = sign,
    )
    pairs = urllib.urlencode(data)
    request_url = OPEN_URL + '?' + pairs
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc,res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if rc == 200 and res_dict['ErrorCode'] == '1':
        fg = True
        pid = md5.md5('91'+str(openid)).hexdigest()
        #给request安装用户
        request.rk_user = UserBase._install(pid, '91',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid,access_token)
            #更新用户平台信息
            request.rk_user.update_user_from_91(openid)
    return fg,pid
示例#9
0
def accept_request(rk_user,params):
    """
    同意好友申请
    """
    fid = params['fid']
    user_friend_obj = Friend.get(rk_user.uid)
    #检查是否有这条请求
    if not fid in user_friend_obj.requests:
        return 11,{'msg':utils.get_msg('friend','no_request')}
    friend_obj = UserBase.get(fid)
    friend_friend_obj = Friend.get(fid)
    rc,msg = __check_can_add_friend(rk_user,friend_obj)
    if rc:
        return rc,{'msg':msg}
    else:
        #将对方加入到自己的好友列表
        user_friend_obj.add_friend(fid)
        #将自己加入到对方的好友列表
        friend_friend_obj.add_friend(rk_user.uid)
        if rk_user.uid in friend_friend_obj.self_requests:
            friend_friend_obj.self_requests.pop(rk_user.uid)
            friend_friend_obj.put()
        #将对方从自己的申请列表中删除
        user_friend_obj.del_request(fid)
        return 0,{}
示例#10
0
def get_friend_list(rk_user,params):
    """获取好友列表
    """
    data = {'friends':[]}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.get_friend_ids():
        friend_user = UserBase.get(fid)
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        user_pvp_obj = UserPvp.getEx(fid)
        if user_pvp_obj:
            pvp_title = user_pvp_obj.pvp_title
        else:
            pvp_title = ''
        temp = {
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'login_time':friend_property.login_time,
            'want_gift':Friend.getEx(fid).friend_gift.get('want_gift',['','','']),
            'signature':friend_user.signature,
            'lock':user_friend_obj.is_lock(fid),
            'pvp_title':pvp_title,
        }
        data['friends'].append(temp)
    data['now_num'] = len(data['friends'])
    data['max_num'] = rk_user.user_property.max_friend_num
    return 0,data
示例#11
0
def search_friend(rk_user,params):
    """查找好友
    """
    fid = params['fid']
    try:
        fid = str(fid)
    except:
        return 11,{'msg':utils.get_msg('friend','invalid_fid')}
    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11,{'msg':utils.get_msg('user','no_user')}
    friend_friend_obj = Friend.getEx(fid)
    friend_property = UserProperty.get(fid)
    leader_card = friend_property.leader_card
    user_pvp_obj = UserPvp.getEx(fid)
    if user_pvp_obj:
        pvp_title = user_pvp_obj.pvp_title
    else:
        pvp_title = ''
    data = {
        'friend_info':{
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'max_friend_num':friend_property.max_friend_num,
            'now_friend_num':friend_friend_obj.friend_num,
            'signature':friend_user.signature,
            'pvp_title':pvp_title,
        }
    }
    return 0,data
示例#12
0
def search_friend(rk_user, params):
    """查找好友
    """
    fid = params["fid"]
    try:
        fid = str(fid)
    except:
        return 11, {"msg": utils.get_msg("friend", "invalid_fid")}
    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11, {"msg": utils.get_msg("user", "no_user")}
    friend_friend_obj = Friend.getEx(fid)
    friend_property = UserProperty.get(fid)
    leader_card = friend_property.leader_card
    user_pvp_obj = UserPvp.getEx(fid)
    if user_pvp_obj:
        pvp_title = user_pvp_obj.pvp_title
    else:
        pvp_title = ""
    data = {
        "friend_info": {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "max_friend_num": friend_property.max_friend_num,
            "now_friend_num": friend_friend_obj.friend_num,
            "signature": friend_user.signature,
            "pvp_title": pvp_title,
        }
    }
    return 0, data
示例#13
0
def pk_top(request):
    ''' PK, 即实时 PvP (Real Time Peer-vs-Peer)
    '''
    data = []
#       data.append(tmp)

    top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp')
    top_30_uid_score = top_model.get(30, desc=False)
    top_30_uid_score.reverse()

    for uid, score in top_30_uid_score:
        pk_obj = UserRealPvp.get(uid)
        ub_obj = UserBase.get(uid)

        if pk_obj and ub_obj:
            user_prop_obj = UserProperty.get(uid)
            tmp = {}
            #base_info = pvp_obj.pvp_info['base_info']
            tmp['uid'] = uid
            tmp['pt'] = int(score)
            tmp['pvp_title'] = pk_obj.pvp_title
            tmp['username'] = ub_obj.username
            tmp['lv'] = user_prop_obj.lv
            data.append(tmp)

    return "admin/pk_top.html", {'data':data}
示例#14
0
def add_request(rk_user,params):
    """
    添加好友的请求
    """
    fid = params.get('fid','')
    #检查好友id是否存在

    if 'npc' in fid:
        return 0, {}

    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11,{'msg':utils.get_msg('user','no_user')}
    rc,msg = __check_can_add_friend(rk_user,friend_user)
    if rc:
        return rc,{'msg':msg}
    else:
        user_friend_obj = Friend.get(rk_user.uid)
        friend_friend_obj = Friend.get(fid)
        #如果对方申请过加自己为好友,则直接建立好友关系
        if fid in user_friend_obj.requests:
            #将对方加入到自己的好友列表
            user_friend_obj.add_friend(fid)
            #将自己加入到对方的好友列表
            friend_friend_obj.add_friend(rk_user.uid)
            #将对方从自己的申请列表中删除
            user_friend_obj.del_request(fid)
            #将自己从好友的申请列表中删除
            friend_friend_obj.del_self_request(rk_user.uid)
        else:
            user_friend_obj.self_requests[fid] = int(time.time())
            user_friend_obj.put()
            friend_friend_obj.add_request(rk_user.uid)
        return 0,{}
示例#15
0
def auth_token_for_fb(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证fb开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    user_info_url = 'https://graph.facebook.com/me?access_token=%s' % str(access_token)
    res = urllib2.urlopen(user_info_url, timeout=12).read()
    res = res.strip()
    res = res.replace('false','False')
    res = res.replace('true','True')
    res = res.replace('null','None')
    exec('result = %s' % res)
    if 'error' not in result:
        get_openid = str(result.get('id'))
        openid = get_openid
        if get_openid == openid:
            fg = True
            pid = md5.md5('fb' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,'fb',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'fb':
                request.rk_user.baseinfo['platform'] = 'fb'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                # request.rk_user.update_user_from_fb(result)
    return fg,pid
示例#16
0
    def new_func(request, *args, **argw):
        pid = request.REQUEST.get("pid")
        platform = request.REQUEST.get("platform")
        subarea = request.REQUEST.get("subarea", "1")

        if pid and platform:
            request.rk_user = UserBase._install(pid, platform, subarea=subarea)
            frozen_msg = get_frozen_msg(request.rk_user)
            if frozen_msg:
                data = {
                    'rc': 10,
                    'data': {
                        'msg': frozen_msg,
                        'server_now': int(time.time())
                    }
                }
                return HttpResponse(
                    json.dumps(data, indent=1),
                    content_type='application/x-javascript',
                )
        else:
            #print '#### set_user, rc: 6'
            data = {
                'rc': 6,
                'data': {
                    'msg': get_msg('login', 'platform_overdue'),
                    'server_now': int(time.time())
                }
            }
            return HttpResponse(
                json.dumps(data, indent=1),
                content_type='application/x-javascript',
            )
        return func(request, *args, **argw)
示例#17
0
    def new_func(request,*args,**argw):
        pid = request.REQUEST.get("pid")
        platform = request.REQUEST.get("platform")
        subarea = request.REQUEST.get("subarea", "1")

        if pid and platform:
            request.rk_user = UserBase._install(pid, platform, subarea=subarea)
            frozen_msg = get_frozen_msg(request.rk_user)
            if frozen_msg:
                data = {
                    'rc': 10,
                    'data': {
                        'msg': frozen_msg,
                        'server_now': int(time.time())
                    }
                }
                return HttpResponse(
                    json.dumps(data, indent=1),
                    content_type='application/x-javascript',
                )
        else:
            #print '#### set_user, rc: 6'
            data = {
                'rc': 6,
                'data': {
                    'msg': get_msg('login', 'platform_overdue'),
                    'server_now': int(time.time())
                }
            }
            return HttpResponse(
                json.dumps(data, indent=1),
                content_type='application/x-javascript',
            )
        return func(request, *args, **argw)
示例#18
0
def auth_token_for_pp(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    pp_url = 'http://passport_i.25pp.com:8080/index?tunnel-command=2852126756'
    headers = {"Host":"passport_i.25pp.com","Content-Length":"32"}
    req = urllib2.Request(pp_url, str(access_token))
    url_request = urllib2.urlopen(req, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc != 200:
        return fg, pid 
    res = res.strip()
    res = "{" + res + "}"
    result = {}
    exec('result = %s' % res)
    status = result.get('status', 1)
    if status != 0:
        return fg, pid
    
    get_openid = str(result.get('userid'))
    if get_openid != openid:
        return fg, pid
    pid = md5.md5('pp' + str(openid)).hexdigest()
    request.rk_user = UserBase._install(pid, 'pp',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
    #数据校正
    if request.rk_user.baseinfo['platform'] != 'pp':
        request.rk_user.baseinfo['platform'] = 'pp'
    #检查用户是否账户被冻结
    if not request.rk_user.frozen:
        #更新用户的openid和access_token
        request.rk_user.account.update_info(openid,access_token)
        request.rk_user.update_user_from_pp(get_openid)
    fg = True
    return fg, pid
示例#19
0
def add_request(rk_user, params):
    """
    添加好友的请求
    """
    fid = params.get("fid", "")
    # 检查好友id是否存在

    if "npc" in fid:
        return 0, {}

    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11, {"msg": utils.get_msg("user", "no_user")}
    rc, msg = __check_can_add_friend(rk_user, friend_user)
    if rc:
        return rc, {"msg": msg}
    else:
        user_friend_obj = Friend.get(rk_user.uid)
        friend_friend_obj = Friend.get(fid)
        # 如果对方申请过加自己为好友,则直接建立好友关系
        if fid in user_friend_obj.requests:
            # 将对方加入到自己的好友列表
            user_friend_obj.add_friend(fid)
            # 将自己加入到对方的好友列表
            friend_friend_obj.add_friend(rk_user.uid)
            # 将对方从自己的申请列表中删除
            user_friend_obj.del_request(fid)
            # 将自己从好友的申请列表中删除
            friend_friend_obj.del_self_request(rk_user.uid)
        else:
            user_friend_obj.self_requests[fid] = int(time.time())
            user_friend_obj.put()
            friend_friend_obj.add_request(rk_user.uid)
        return 0, {}
示例#20
0
def auth_token_for_qq(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证qq开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    user_info_url = 'https://open.t.qq.com/api/user/info?format=json&oauth_consumer_key=%s&access_token=%s&openid=%s&oauth_version=2.a&scope=all' % (settings.QQ_APP_ID,access_token,openid)
    url_request = urllib2.urlopen(str(user_info_url), timeout=12)
    rc = url_request.code
    res  = url_request.read()

    if rc == 200:
        res = res.strip()
        res = res.replace('false','False')
        res = res.replace('true','True')
        res = res.replace('null','None')
        exec('result = %s' % res)
        if not result['ret']:
            get_openid = str(result['data']['openid'])
            if get_openid == openid:
                fg = True
                pid = md5.md5('qq' + str(openid)).hexdigest()
                #给request安装用户
                request.rk_user = UserBase._install(pid,'qq',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
                #数据校正
                if request.rk_user.baseinfo['platform'] != 'qq':
                    request.rk_user.baseinfo['platform'] = 'qq'
                #检查用户是否账户被冻结
                if not request.rk_user.frozen:
                    #更新用户的openid和access_token
                    request.rk_user.account.update_info(openid,access_token)
                    request.rk_user.update_user_from_qq(result)
    return fg,pid
示例#21
0
def auth_token_for_360(request, access_token, openid, uuid, mktid, version,
                       client_type, macaddr, idfa, ios_ver):
    #print '##### in auth_token_for_360'
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    #360平台验证
    if not 'access_token' in request.REQUEST:
        return fg, pid
    else:
        access_token = str(request.REQUEST['access_token'])

    platform = str(request.REQUEST['platform'])
    if access_token:
        url_360 = 'https://openapi.360.cn/user/me.json'
        code_url = '%s?access_token=%s&fields=id,name,avatar,sex,area' % (
            url_360, access_token)
        url_request = urllib2.urlopen(code_url, timeout=12)
        code, res = url_request.code, url_request.read()

        #print '#### 360, code, res=', code, res
        #可能360不需要refresh_token ?
        #refresh_token = str(request.REQUEST['refresh_token'])
        refresh_token = ''
        #print '#### refresh_token=', refresh_token
        #expires_in = float(request.REQUEST['expires_in'])  # "['123.45']" ?
        #print '#### expires_in=', request.REQUEST['expires_in']
        expires_in = 24 * 3600

        if code == 200:
            res_dict = json.loads(res)
            #print '#### 360, res_dict=', res_dict

            fg = True
            openid = str(res_dict['id'])
            pid = md5.md5('360' + openid).hexdigest()
            request.rk_user = UserBase._install(pid,
                                                platform,
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                request.rk_user.update_user_from_360(res_dict)
                expires_time = time.time() + expires_in

                #print '##### 360 start set session'
                Session.set(platform, pid, access_token, refresh_token,
                            expires_time)
    return fg, pid
示例#22
0
def lv_top(request):
    data = []
    lv_top_100_list = lv_top_model.get(100)
    for uid,lv in lv_top_100_list:
        tmp = {}
        tmp['uid'] = uid
        tmp['lv'] = int(lv)
        tmp['username'] = UserBase.get(uid).username
        data.append(tmp)
    return "admin/lv_top.html", {'data':data}
示例#23
0
def lv_top(request):
    data = []
    lv_top_100_list = lv_top_model.get(100)
    for uid, lv in lv_top_100_list:
        tmp = {}
        tmp['uid'] = uid
        tmp['lv'] = int(lv)
        tmp['username'] = UserBase.get(uid).username
        data.append(tmp)
    return "admin/lv_top.html", {'data': data}
示例#24
0
def auth_token_for_sina(request, access_token, openid, uuid, mktid, version,
                        client_type, macaddr, idfa, ios_ver):
    """论证新浪开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    SINA_OPEN_URL = 'https://api.weibo.com/2/account/get_uid.json'
    request_url = '%s?access_token=%s' % (SINA_OPEN_URL, str(access_token))
    user_info_url = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s'
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc == 200:
        res = res.strip()
        res = res.replace('false', 'False')
        res = res.replace('true', 'True')
        res = res.replace('null', 'None')
        exec('result = %s' % res)
        get_openid = str(result.get('uid'))
        if get_openid == openid:
            fg = True
            pid = md5.md5('sina' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,
                                                'sina',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'sina':
                request.rk_user.baseinfo['platform'] = 'sina'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                #调用平台的api,取得用户名等信息,并且更新,但非必须
                try:
                    user_info_url = user_info_url % (str(access_token),
                                                     str(openid))
                    res = urllib2.urlopen(str(user_info_url),
                                          timeout=12).read()
                    res = res.strip()
                    res = res.replace('false', 'False')
                    res = res.replace('true', 'True')
                    res = res.replace('null', 'None')
                    exec('result = %s' % res)
                    request.rk_user.update_user_from_sina(result)
                except:
                    pass
    return fg, pid
示例#25
0
def charge_result_360(request):
    """充值回调
    """
    
    pay_dict = {}
    pay_dict['app_uid'] = str(request.REQUEST['app_uid'])#应用内用户ID
    pay_dict['order_id'] = str(request.REQUEST['order_id'])#360支付订单号
    pay_dict['app_key'] = str(request.REQUEST['app_key'])#应用app key
    pay_dict['product_id'] = str(request.REQUEST['product_id'])#所购商品id
    pay_dict['amount'] = str(request.REQUEST['amount'])#总价,单价,分
    pay_dict['app_order_id'] = str(request.REQUEST.get('app_order_id', ''))#应用订单号
    pay_dict['sign_type'] = str(request.REQUEST['sign_type'])#应用传给订单核实接口的参数
    pay_dict['sign_return'] = str(request.REQUEST['sign_return'])#应用传给订单核实接口的参数sign_type
    pay_dict['client_id'] = settings.APP_KEY_360#应用app key
    pay_dict['client_secret'] = settings.APP_SECRET_KEY_360#应用app_secret
    data = {
        'rc':12,
        'result':u'fail_验证失败',
        'data':{'msg':get_msg('charge','fail'),'server_now':int(time.time())},
    }
    rk_user = UserBase.get(pay_dict['app_uid'])
    pay_dict['gateway_flag'] = str(request.REQUEST.get('gateway_flag', ''))
    if pay_dict['gateway_flag'] != 'success':
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\
                                              'result':u'fail_gateway_flag','oid':pay_dict['order_id'],\
                                              'item_id':pay_dict['product_id'],'price':pay_dict['amount'], 'subarea': rk_user.subarea,})
        return HttpResponse('ok')
    pay_url = "https://openapi.360.cn/pay/verify_mobile_notification.json?app_key=%(app_key)s&product_id=%(product_id)s&amount=%(amount)s&app_uid=%(app_uid)s&order_id=%(order_id)s&app_order_id=%(app_order_id)s&sign_type=%(sign_type)s&sign_return=%(sign_return)s&client_id=%(client_id)s&client_secret=%(client_secret)s" % pay_dict
    try:
        url_request = urllib2.urlopen(pay_url, timeout=12)
        code, res = url_request.code, url_request.read()
    except:
        data = {
            'rc':7,
            'data':{
                  'msg':get_msg('login','refresh'),
                  'server_now':int(time.time()),
            },
        }
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\
                                              'result':u'fail_请求超时','oid':pay_dict['order_id'],\
                                              'item_id':pay_dict['product_id'],'price':pay_dict['amount'],'subarea': rk_user.subarea,})
        return HttpResponse('ok')
    oid = pay_dict["order_id"]
    item_id = pay_dict["product_id"]
    if code == 200:
        res_dict = json.loads(res)
        ret = res_dict.get('ret', '')
        if ret == 'verified':
            data = charge_api(rk_user, oid, item_id, platform = '360',res_dict={},request = request)
    data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'360',\
                                              'result':data['result'],'oid':oid,'item_id':item_id,'price':pay_dict['amount'],'subarea': rk_user.subarea,})
    return HttpResponse('ok')
示例#26
0
def auth_token_for_mi(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    #mi平台验证

    client_id = settings.MI_APP_ID
    url_mi = 'http://mis.migc.xiaomi.com/api/biz/service/verifySession.do'
    ready_signature = 'appId=%s&session=%s&uid=%s' % (client_id, access_token,
                                                      openid)

    signature = hmac.new(settings.MI_SECRET_KEY, ready_signature,
                         hashlib.sha1).hexdigest()

    data = dict(
        appId=client_id,
        session=access_token,
        uid=openid,
        signature=signature,
    )
    pairs = urllib.urlencode(data)
    code_url = url_mi + '?' + pairs
    url_request = urllib2.urlopen(code_url, timeout=12)
    code, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if code == 200 and res_dict['errcode'] == 200:

        pid = md5.md5('mi' + str(openid)).hexdigest()
        request.rk_user = UserBase._install(pid,
                                            'mi',
                                            uuid,
                                            mktid,
                                            version,
                                            client_type,
                                            macaddr,
                                            idfa,
                                            ios_ver,
                                            subarea=subarea)
        #数据校正
        if request.rk_user.baseinfo['platform'] != 'mi':
            request.rk_user.baseinfo['platform'] = 'mi'
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid, access_token)
            res_dict['openid'] = openid
            request.rk_user.update_user_from_mi(res_dict)
        fg = True
    return fg, pid
示例#27
0
def _check_invite_code(rk_user, invite_code):
    """检查
    """
    uid = ""
    if invite_code:
        try:
            invite_code = invite_code.lower()
            inviter_uid = str(int(invite_code, 16))
            inviter = UserBase.get(inviter_uid)
            if inviter and inviter_uid != rk_user.uid:
                uid = inviter_uid
        except:
            pass
    return uid
示例#28
0
def _check_invite_code(rk_user,invite_code):
    """检查
    """
    uid = ''
    if invite_code:
        try:
            invite_code = invite_code.lower()
            inviter_uid = str(int(invite_code,16))
            inviter = UserBase.get(inviter_uid)
            if inviter and inviter_uid != rk_user.uid:
                uid = inviter_uid
        except:
            pass
    return uid
示例#29
0
def get_request_list(rk_user, params):
    """获取申请列表以及自己申请的
    """
    data = {"self_requests": [], "friend_requests": []}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.self_requests:
        request_friend_user = UserBase.get(fid)
        if not request_friend_user:
            continue
        request_friend_property = UserProperty.get(fid)
        leader_card = request_friend_property.leader_card
        temp = {
            "fid": fid,
            "name": request_friend_user.username,
            "country": request_friend_property.country,
            "leader_card": leader_card,
            "lv": request_friend_property.lv,
            "request_time": user_friend_obj.self_requests[fid],
        }
        data["self_requests"].append(temp)
    fids = user_friend_obj.get_request_ids()
    for fid in fids:
        friend_user = UserBase.get(fid)
        if not friend_user:
            continue
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        temp = {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "request_time": user_friend_obj.requests[fid],
        }
        data["friend_requests"].append(temp)
    return 0, data
示例#30
0
def get_request_list(rk_user,params):
    """获取申请列表以及自己申请的
    """
    data = {'self_requests':[],'friend_requests':[]}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.self_requests:
        request_friend_user = UserBase.get(fid)
        if not request_friend_user:
            continue
        request_friend_property = UserProperty.get(fid)
        leader_card = request_friend_property.leader_card
        temp = {
            'fid':fid,
            'name':request_friend_user.username,
            'country':request_friend_property.country,
            'leader_card':leader_card,
            'lv':request_friend_property.lv,
            'request_time':user_friend_obj.self_requests[fid],
        }
        data['self_requests'].append(temp)
    fids = user_friend_obj.get_request_ids()
    for fid in fids:
        friend_user = UserBase.get(fid)
        if not friend_user:
            continue
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        temp = {
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'request_time':user_friend_obj.requests[fid],
        }
        data['friend_requests'].append(temp)
    return 0,data
示例#31
0
def auth_token_for_360(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    #print '##### in auth_token_for_360'
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    #360平台验证
    if not 'access_token' in request.REQUEST:
        return fg, pid
    else:
        access_token = str(request.REQUEST['access_token'])

    platform = str(request.REQUEST['platform'])
    if access_token:
        url_360 = 'https://openapi.360.cn/user/me.json'
        code_url = '%s?access_token=%s&fields=id,name,avatar,sex,area' % (url_360, access_token)
        url_request = urllib2.urlopen(code_url, timeout=12)
        code, res = url_request.code, url_request.read()

        #print '#### 360, code, res=', code, res
        #可能360不需要refresh_token ?
        #refresh_token = str(request.REQUEST['refresh_token'])
        refresh_token = ''
        #print '#### refresh_token=', refresh_token
        #expires_in = float(request.REQUEST['expires_in'])  # "['123.45']" ?
        #print '#### expires_in=', request.REQUEST['expires_in']
        expires_in = 24*3600

        if code == 200:
            res_dict = json.loads(res)
            #print '#### 360, res_dict=', res_dict

            fg = True
            openid = str(res_dict['id'])
            pid = md5.md5('360' + openid).hexdigest()
            request.rk_user = UserBase._install(pid, platform,uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                request.rk_user.update_user_from_360(res_dict)
                expires_time = time.time() + expires_in

                #print '##### 360 start set session'
                Session.set(platform, pid, access_token, refresh_token, expires_time)
    return fg,pid
示例#32
0
def auth_token_for_pp(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")

    pp_url = 'http://passport_i.25pp.com:8080/index?tunnel-command=2852126756'
    headers = {"Host": "passport_i.25pp.com", "Content-Length": "32"}
    req = urllib2.Request(pp_url, str(access_token))
    url_request = urllib2.urlopen(req, timeout=12)
    rc, res = url_request.code, url_request.read()
    if rc != 200:
        return fg, pid
    res = res.strip()
    res = "{" + res + "}"
    result = {}
    exec('result = %s' % res)
    status = result.get('status', 1)
    if status != 0:
        return fg, pid

    get_openid = str(result.get('userid'))
    if get_openid != openid:
        return fg, pid
    pid = md5.md5('pp' + str(openid)).hexdigest()
    request.rk_user = UserBase._install(pid,
                                        'pp',
                                        uuid,
                                        mktid,
                                        version,
                                        client_type,
                                        macaddr,
                                        idfa,
                                        ios_ver,
                                        subarea=subarea)
    #数据校正
    if request.rk_user.baseinfo['platform'] != 'pp':
        request.rk_user.baseinfo['platform'] = 'pp'
    #检查用户是否账户被冻结
    if not request.rk_user.frozen:
        #更新用户的openid和access_token
        request.rk_user.account.update_info(openid, access_token)
        request.rk_user.update_user_from_pp(get_openid)
    fg = True
    return fg, pid
示例#33
0
def auth_token_for_qq(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证qq开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    user_info_url = 'https://open.t.qq.com/api/user/info?format=json&oauth_consumer_key=%s&access_token=%s&openid=%s&oauth_version=2.a&scope=all' % (
        settings.QQ_APP_ID, access_token, openid)
    url_request = urllib2.urlopen(str(user_info_url), timeout=12)
    rc = url_request.code
    res = url_request.read()

    if rc == 200:
        res = res.strip()
        res = res.replace('false', 'False')
        res = res.replace('true', 'True')
        res = res.replace('null', 'None')
        exec('result = %s' % res)
        if not result['ret']:
            get_openid = str(result['data']['openid'])
            if get_openid == openid:
                fg = True
                pid = md5.md5('qq' + str(openid)).hexdigest()
                #给request安装用户
                request.rk_user = UserBase._install(pid,
                                                    'qq',
                                                    uuid,
                                                    mktid,
                                                    version,
                                                    client_type,
                                                    macaddr,
                                                    idfa,
                                                    ios_ver,
                                                    subarea=subarea)
                #数据校正
                if request.rk_user.baseinfo['platform'] != 'qq':
                    request.rk_user.baseinfo['platform'] = 'qq'
                #检查用户是否账户被冻结
                if not request.rk_user.frozen:
                    #更新用户的openid和access_token
                    request.rk_user.account.update_info(openid, access_token)
                    request.rk_user.update_user_from_qq(result)
    return fg, pid
示例#34
0
def auth_token_for_91(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """验证91平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    OPEN_URL = 'http://service.sj.91.com/usercenter/AP.aspx'
    #request_url = '%s?AppId=%s&Act=4&Uin=%s&SessionId=%s&Sign=%s'
    sign = md5.new(settings.APP_ID_91 + '4' + openid + access_token\
     + settings.APP_KEY_91).hexdigest()
    data = dict(
        AppId=settings.APP_ID_91,
        Act='4',
        Uin=openid,
        SessionId=access_token,
        Sign=sign,
    )
    pairs = urllib.urlencode(data)
    request_url = OPEN_URL + '?' + pairs
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if rc == 200 and res_dict['ErrorCode'] == '1':
        fg = True
        pid = md5.md5('91' + str(openid)).hexdigest()
        #给request安装用户
        request.rk_user = UserBase._install(pid,
                                            '91',
                                            uuid,
                                            mktid,
                                            version,
                                            client_type,
                                            macaddr,
                                            idfa,
                                            ios_ver,
                                            subarea=subarea)
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid, access_token)
            #更新用户平台信息
            request.rk_user.update_user_from_91(openid)
    return fg, pid
示例#35
0
def charge_result_pp(request):
    """
    pp获得玩家的充值行为后,用此api通知我们
    第一步  验证pp 的请求参数
    第二步  给玩家充值
    """
    status = int(request.REQUEST['status'])
    #已经兑现过了
    if status == 1:
        return HttpResponse('success')
    
    #订单验证失败
    sign = request.REQUEST['sign']
    rc, pp_sign = decode_pp_callback(sign) 
    if rc or pp_sign == {}:
        return HttpResponse('fail')
    
    #订单是否处理过
    billno = pp_sign['billno']
    billno_req = request.REQUEST['billno']
    if billno_req != billno:
        return HttpResponse('fail')
    #是否是正确的玩家
    uid = pp_sign['roleid']
    
    mi_record = data_log_mod.get_log_model("OrderRecord").find({'oid':billno})
    if not mi_record:
        return HttpResponse('fail')
    item_id = mi_record[0].item_id
    oc_uid = mi_record[0].uid
    if oc_uid != uid:
        return HttpResponse('fail')

    rk_user = UserBase.get(oc_uid)
    if not rk_user:
        return HttpResponse('fail')
    
    data = charge_api(rk_user, billno, item_id, platform = 'pp',res_dict={},request = request, charge_way='pp')
    data_log_mod.set_log('ChargeResultLog', rk_user, **{'charge_way':'pp',
                                              'result':data['result'],'oid':billno,'item_id':item_id})
    if data['rc'] != 0:
        return HttpResponse('fail')
    return HttpResponse('success') 
示例#36
0
def auth_token_for_sina(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    """论证新浪开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    SINA_OPEN_URL = 'https://api.weibo.com/2/account/get_uid.json'
    request_url = '%s?access_token=%s' % (SINA_OPEN_URL, str(access_token))
    user_info_url = 'https://api.weibo.com/2/users/show.json?access_token=%s&uid=%s'
    url_request = urllib2.urlopen(request_url, timeout=12)
    rc,res = url_request.code, url_request.read()
    if rc == 200:
        res = res.strip()
        res = res.replace('false','False')
        res = res.replace('true','True')
        res = res.replace('null','None')
        exec('result = %s' % res)
        get_openid = str(result.get('uid'))
        if get_openid == openid:
            fg = True
            pid = md5.md5('sina' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,'sina',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'sina':
                request.rk_user.baseinfo['platform'] = 'sina'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid,access_token)
                #调用平台的api,取得用户名等信息,并且更新,但非必须
                try:
                    user_info_url = user_info_url % (str(access_token),str(openid))
                    res = urllib2.urlopen(str(user_info_url), timeout=12).read()
                    res = res.strip()
                    res = res.replace('false','False')
                    res = res.replace('true','True')
                    res = res.replace('null','None')
                    exec('result = %s' % res)
                    request.rk_user.update_user_from_sina(result)
                except:
                    pass
    return fg,pid
示例#37
0
def auth_token_for_fb(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证fb开放平台
    """
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    user_info_url = 'https://graph.facebook.com/me?access_token=%s' % str(
        access_token)
    res = urllib2.urlopen(user_info_url, timeout=12).read()
    res = res.strip()
    res = res.replace('false', 'False')
    res = res.replace('true', 'True')
    res = res.replace('null', 'None')
    exec('result = %s' % res)
    if 'error' not in result:
        get_openid = str(result.get('id'))
        openid = get_openid
        if get_openid == openid:
            fg = True
            pid = md5.md5('fb' + str(openid)).hexdigest()
            #给request安装用户
            request.rk_user = UserBase._install(pid,
                                                'fb',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            #数据校正
            if request.rk_user.baseinfo['platform'] != 'fb':
                request.rk_user.baseinfo['platform'] = 'fb'
            #检查用户是否账户被冻结
            if not request.rk_user.frozen:
                #更新用户的openid和access_token
                request.rk_user.account.update_info(openid, access_token)
                # request.rk_user.update_user_from_fb(result)
    return fg, pid
示例#38
0
def auth_token_for_mi(request,access_token,openid,uuid,mktid,version,client_type,macaddr,idfa,ios_ver):
    fg = False
    pid = ''
    subarea = request.REQUEST.get("subarea", "1")
    #mi平台验证 

    client_id = settings.MI_APP_ID
    url_mi = 'http://mis.migc.xiaomi.com/api/biz/service/verifySession.do'
    ready_signature = 'appId=%s&session=%s&uid=%s' % (client_id, access_token, openid)

    signature = hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest()

    data = dict(    
        appId = client_id,
        session = access_token,
        uid = openid,
        signature = signature,
    )
    pairs = urllib.urlencode(data)
    code_url = url_mi + '?' + pairs
    url_request = urllib2.urlopen(code_url, timeout=12)
    code, res = url_request.code, url_request.read()
    res_dict = json.loads(res)
    if code == 200 and res_dict['errcode'] == 200:

        pid = md5.md5('mi' + str(openid)).hexdigest()
        request.rk_user = UserBase._install(pid, 'mi',uuid,mktid,version,client_type,macaddr,idfa,ios_ver, subarea=subarea)
        #数据校正
        if request.rk_user.baseinfo['platform'] != 'mi':
            request.rk_user.baseinfo['platform'] = 'mi'
        #检查用户是否账户被冻结
        if not request.rk_user.frozen:
            #更新用户的openid和access_token
            request.rk_user.account.update_info(openid,access_token)
            res_dict['openid'] = openid
            request.rk_user.update_user_from_mi(res_dict)
        fg = True
    return fg, pid
示例#39
0
def show_baseinfo():
    userbase = UserBase.get(uid)
    pprint (userbase.baseinfo)
    print len(userbase.baseinfo['received_mails'])
示例#40
0
def test_recover_bug():
    '''
    10-24
    '''
    userbase = UserBase.get(uid)
    print userbase.wrapper_info()
示例#41
0
    def login(self, params):
        """登录
        发送登录奖励邮件
        """
        user_base_obj = self.user_base
        user_property_obj = self.user_property
        # game_config = self.game_config
        # 获取当天的字符串
        now = datetime.datetime.now()
        # 获取注册时间
        add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date()
        # 获取双倍充值的时间
        # charge_double_date = game_config.shop_config.get('charge_double_date', '')
        mail_awards = {}
        
        now_str = utils.datetime_toString(now)
        self.login_info.setdefault('login_record_new', []).insert(0, now_str)
        if len(self.login_info['login_record_new']) > 5:
                self.login_info['login_record_new'].pop()
        last_login_time = self.login_info['login_time']
        # 新安装用户,或玩家每天首次登入
        if not last_login_time or now.date() != utils.timestamp_toDatetime(last_login_time).date():
            self.login_info['total_login_num'] += 1
            self.login_info['login_record'].insert(0, str(now.date()))
            # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug
            if len(self.login_info['login_record']) > 40:
                self.login_info['login_record'].pop()
            # 连续登录
            if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date():
                self.login_info['continuous_login_num'] += 1
            # 非连续登录
            else:
                self.login_info['continuous_login_num'] = 1
            
            # 每日登录奖励
            # mail_awards.update(self.get_daily_login_award())

            # # 判断有无系统奖励
            # mail_awards.update(self.get_system_bonus())

            #临时的一个系统补偿
            mail_awards.update(self.get_system_compensates())
            
            # #临时补偿
            # mail_awards.update(self.get_temp_bonus())

            # # 特定日期首次充值双倍再开放
            # if not user_property_obj.double_charge and (
            # str(add_date) != str(now.date()) and
            # str(now.date()) == charge_double_date):
            #     user_property_obj.property_info['double_charge'] = True

            # # 特定日期之后已充值过的用户首次充值双倍关闭
            # if user_property_obj.double_charge and charge_double_date and (
            # str(now.date()) > charge_double_date):
            #     user_property_obj.property_info['double_charge'] = False
            
            user_gift_obj = UserGift.get_instance(self.uid)

            # #连续登录奖励
            # mail_awards.update(self.get_continuous_login_award())

            # #累积登录奖励
            # mail_awards.update(self.get_login_award())

            # 领取以前未领取的等级奖励
            user_gift_obj.get_lv_gift()

            # 月卡返还
            mail_awards.update(self.get_monthCard_bonus())
            # if str(add_date) != str(now.date()):
            #     self.__refresh_month_card_info(user_property_obj)

            # 重置道具商店购买次数
            self.user_pack.reset_store_has_bought_cnt()

            # vip 玩家 每日奖励  通过邮件发放
            mail_awards.update(self.get_vip_daily_bonus())

            # 回复战场次数重置
            user_property_obj.reset_recover_times()


        # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导
        if user_property_obj.property_info.get('newbie_steps', 0) == 15 and user_property_obj.newbie:
            user_property_obj.user_cards.reset_cards()

        rtn_data = {}

        user_property_obj.property_info['login_time'] = int(time.time())

        #版本更新奖励
        strVersion = params.get("version", "")
        if last_login_time and strVersion != "":
            update_version_award = self.get_update_version_bonus(strVersion)
            if update_version_award and strVersion not in user_property_obj.update_award:
                mail_awards["update_version_award"] = {"award":update_version_award}
                #user_property_obj.give_award(update_version_award)
                user_property_obj.property_info["update_award"].append(strVersion)
        #判断有无绑定奖励
        if UserBase.get(self.uid).platform != 'oc' and \
        user_property_obj.property_info.get('bind_award'):
            mail_awards['bind_award'] = self.game_config.weibo_config['bind_award']
            user_property_obj.property_info['bind_award'] = False
        
        # if not user_property_obj.newbie:
        #     rtn_data = self.new_login_bonus(now, user_property_obj)

        # 根据上一次22:00的pvp排名给予相应的功勋奖励
        mail_awards.update(self.get_honor_award())
        # 发得奖邮件
        self.send_mails(mail_awards)
        
        #当天注册用户判断是否有活动双倍
        # if not self.login_info.get('set_newbie_double_charge',False) and\
        #  not user_property_obj.double_charge and\
        #  str(now.date()) == charge_double_date and\
        #  str(add_date) == str(now.date()):
        #     user_property_obj.property_info['double_charge'] = True
        #     self.login_info['set_newbie_double_charge'] = True

        #  若保底求将没开  清空保底求将元宝
        from apps.logics.gacha import is_open_safty
        self.user_gacha.reset_cost_coin()
        if not is_open_safty():
            self.user_gacha.reset_cost_coin()

        # 登录时间更新
        self.login_info['login_time'] = int(time.time())

        self.put()
        user_property_obj.put()
        
        return {}
示例#42
0
#-*- coding: utf-8 -*-

import os
import sys
import random

base_dir = os.path.dirname(os.path.abspath(__file__)).replace('/scripts/test', '')
sys.path.insert(0, base_dir)
import apps.settings as settings
from django.core.management import setup_environ
setup_environ(settings)

from apps.oclib import app
from apps.models.user_base import UserBase
from apps.views.charge import charge_api

uid = '56100215461' if len(sys.argv) != 2 else sys.argv[1]

ub = UserBase.get(uid)
print 'before_charge_coin', ub.user_property.coin
print charge_api(ub, 'test'+str(random.randint(0, 100)), 'coin60', platform='test', charge_way='test', charge_money='60')
print 'after_charge_coin', ub.user_property.coin

app.pier.save()
示例#43
0
 def user_base(self):
     if not hasattr(self, '_user_base'):
         from apps.models.user_base import UserBase
         self._user_base = UserBase.get(self.uid)
     return self._user_base
import os
import sys
import random

base_dir = os.path.dirname(os.path.abspath(__file__)).replace('/scripts/test', '')
sys.path.insert(0, base_dir)
import apps.settings_local as settings
from django.core.management import setup_environ
setup_environ(settings)

from apps.oclib import app
from apps.models.user_base import UserBase
from apps.views.charge import charge_api

uid = '0100000048' if len(sys.argv) != 2 else sys.argv[1]

ub = UserBase.get(uid)


def charge_test(item_id, charge_money):
    print 'before_charge_coin', ub.user_property.coin
    print charge_api(ub, 'test'+str(random.randint(0, 100)), 'monthCard300', platform='test', charge_way='test', charge_money='30')
    print 'after_charge_coin', ub.user_property.coin
    print '*'*20 + '\n'

charge_test('monthCard300', '30') 
charge_test('coin980', '98') 

app.pier.save()
示例#45
0
import apps.settings as settings
from django.core.management import setup_environ
setup_environ(settings)

from apps.models.user_base import UserBase

from apps.models.charge_record import ChargeRecord
from apps.common.utils import datetime_toString
import datetime
oid='12999763169054705758.1301353301481849'
uid='2100220172'
item_id = 'com.nega.fenglinhuoshangl.coin03'
item_num = 760
item_price = 68
charge_way='googleplay'
rk_user = UserBase.get(uid)
before_coin = rk_user.user_property.coin
rk_user.user_property.property_info['coin'] += item_num
after_coin = rk_user.user_property.property_info['coin']
record_data = {
    "oid":oid,
    "platform":rk_user.platform,
    "lv":rk_user.user_property.lv,
    "price":item_price,
    "item_id":item_id,
    "item_num":item_num,
    "createtime":datetime_toString(datetime.datetime.now()),
    "before_coin":before_coin,
    "after_coin":after_coin,
    "client_type":rk_user.client_type,
    "charge_way":charge_way,
示例#46
0
def view_user(request):
    """
     更新用户信息
    """

    uid = request.GET.get('uid', '').strip()
    if not uid:
        pid = request.GET.get('pid', '').strip()
        if not pid:
            username = request.GET.get('username', '')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid = ocapp.mongo_store.mongo.db['username'].find(
                    {'name': username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    ##### view raw db data
    check_raw_db_data = request.GET.get('check_raw_db_data', '').strip()
    db_data_name = request.GET.get('db_data_name', '').strip()

    #using exec/eval, need consider safety, or user could provide malicious
    #string, do bad behavior
    if db_data_name and db_data_name not in raw_db_data_list:
        return HttpResponse(
            'Wrong raw db data name, or not allowed to show yet')

    if check_raw_db_data in ('on', 'checked'):
        data = {'user': {}}
        data['user']['uid'] = uid
        data['user']['username'] = user.username
        module_name, data_class, db_data = db_data_name.split('.')

        #exec('from apps.models.' + module_name + ' import ' + data_class)
        exec 'from apps.models.' + module_name + ' import ' + data_class in globals(
        ), locals()

        if data_class == 'UserMail':
            raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid +
                               '").' + db_data)
        else:
            raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data)

        data['db_data_name'] = db_data_name
        data['raw_db_data'] = pformat(raw_db_data)
        return render_to_response('user/view_raw.html', data,
                                  RequestContext(request))
    ###### end view raw db

    user_card_obj = UserCards.get(user.uid)
    user_equips_obj = UserEquips.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_pack_obj = UserPack.get_instance(uid)

    data = {
        'user_property_obj': user_property_obj,
        'user': user,
        'deck_cards': [],
        'other_cards': [],
        'add_time': timestamp_toString(user.add_time),
        'last_login_time': timestamp_toString(user.user_property.login_time),
        'login_record': UserLogin.get(uid).login_info['login_record'],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k, v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key=lambda x: (all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_Ex(user.uid)
    #pvp_obj = UserPvp.getEx(user.uid)
    #pvp 排名
    top_model = pvp_redis.get_pvp_redis('1')
    rank = top_model.rank(uid)
    #pvp_obj.rank = rank+1 if rank != None else 0
    #data['pvp'] = pvp_obj
    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(
        map(lambda x: int(x), game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]
                              ['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id, room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']
                  ['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index(
            '%s-%s' % (data['current_dungeon']['floor_id'],
                       data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader', 0)
            eid = ''
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)

    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips]
    data['user_equips'] = [
        game_config.equip_config[eid_dict['eid']] for eid_dict in eqids_dict
    ]
    all_equips_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i, game_config.equip_config[str(i) + '_equip'])
                          for i in all_equips_tag]

    #mat
    data['user_materials'] = {
        mid: {
            'name': game_config.material_config[mid]['name'],
            'num': user_pack_obj.materials[mid]
        }
        for mid in user_pack_obj.materials
    }
    all_materials_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.material_config.keys()])
    data['all_materials'] = [(i, game_config.material_config[str(i) + '_mat'])
                             for i in all_materials_tag]
    #
    data['charge_sum_money'] = user.user_property.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find(
        {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {}

    ######将魂系统##############

    data.update(soul.get_all(user, None)[1])
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get(
            'star', '') + u'星 ' + game_config.card_config[sid].get('name',
                                                                   '') + u' 将魂'
    #data["index_list"] = request.index_list
    return render_to_response('user/view.html', data, RequestContext(request))
示例#47
0
def view_user(request):
    """
     更新用户信息
    """

    uid = request.GET.get('uid','').strip()
    if not uid:
        pid = request.GET.get('pid','').strip()
        if not pid:
            username = request.GET.get('username','')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')




    ##### view raw db data
    check_raw_db_data = request.GET.get('check_raw_db_data','').strip()
    db_data_name = request.GET.get('db_data_name','').strip()

    #using exec/eval, need consider safety, or user could provide malicious
    #string, do bad behavior
    if db_data_name and db_data_name not in raw_db_data_list:
        return HttpResponse('Wrong raw db data name, or not allowed to show yet')

    if check_raw_db_data in ('on', 'checked'):
        data={ 'user': {} }
        data['user']['uid'] = uid
        data['user']['username'] = user.username
        module_name, data_class, db_data = db_data_name.split('.')

        #exec('from apps.models.' + module_name + ' import ' + data_class)
        exec 'from apps.models.' + module_name + ' import ' + data_class in globals(), locals() 

        if data_class == 'UserMail':
            raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid + '").' + db_data )
        else:
            raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data )

        data['db_data_name'] = db_data_name
        data['raw_db_data'] = pformat(raw_db_data)
        return render_to_response('user/view_raw.html', data, 
                    RequestContext(request))
    ###### end view raw db


    user_card_obj = UserCards.get(user.uid)
    user_equips_obj = UserEquips.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_pack_obj = UserPack.get_instance(uid)

    data = {
        'user_property_obj':user_property_obj,
        'user':user,
        'deck_cards':[],
        'other_cards':[],
        'add_time':timestamp_toString(user.add_time),
        'last_login_time':timestamp_toString(user.user_property.login_time),
        'login_record':UserLogin.get(uid).login_info['login_record'],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k,v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key = lambda x :(all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_Ex(user.uid)
    #pvp_obj = UserPvp.getEx(user.uid)
    #pvp 排名
    top_model = pvp_redis.get_pvp_redis('1')
    rank = top_model.rank(uid)
    #pvp_obj.rank = rank+1 if rank != None else 0
    #data['pvp'] = pvp_obj
    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id,room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader',0)
            eid = ''
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)

    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ]
    data['user_equips'] = [game_config.equip_config[eid_dict['eid']]  for eid_dict in eqids_dict]
    all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i,game_config.equip_config[str(i)+'_equip']) for i in all_equips_tag]

    #mat
    data['user_materials'] = {mid :{'name':game_config.material_config[mid]['name'],'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials }
    all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()])
    data['all_materials'] = [(i,game_config.material_config[str(i)+'_mat']) for i in all_materials_tag]
    #
    data['charge_sum_money'] = user.user_property.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {}


######将魂系统##############

    data.update(soul.get_all(user, None)[1])
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 将魂'
    #data["index_list"] = request.index_list
    return render_to_response('user/view.html',data,RequestContext(request))
示例#48
0
def auth_token_for_oc(request, access_token, openid, uuid, mktid, version,
                      client_type, macaddr, idfa, ios_ver):
    """论证无账号用户
    """
    print "debug_guochen access_token, openid", access_token, openid
    fg = False
    pid = ''
    msg = ''
    subarea = request.REQUEST.get("subarea", "1") or '1'
    #没有openid时,检查后控制自动分配id的开头是否开启,如果已经关闭,返回提示
    if not openid:
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = get_uuid()
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,
                                                'oc',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
        else:
            msg = get_msg('login', 'cannot_register')
            return fg, pid, msg
    if not check_openid(openid):
        msg = get_msg('login', 'cannot_register')
        return fg, pid, msg
    #有openid时,检查access_token是否正确
    account = AccountMapping.get(openid)
    if not account:
        if game_config.system_config.get('account_assign_switch'):
            fg = True
            pid = openid
            #验证成功,安装用户
            request.rk_user = UserBase._install(pid,
                                                'oc',
                                                uuid,
                                                mktid,
                                                version,
                                                client_type,
                                                macaddr,
                                                idfa,
                                                ios_ver,
                                                subarea=subarea)
            # debug 模式下,将传入的access_token 作为新用户taken
            if settings.DEBUG is True:
                access_token = access_token or get_upwd()
            else:
                access_token = get_upwd()
            request.rk_user.account.update_info(pid, access_token)
            account = request.rk_user.account
            print "debug_guochen_new_token pid, access_token, openid", pid, access_token, openid
        else:
            msg = get_msg('login', 'cannot_register')
            return fg, pid, msg

    elif account.access_token == access_token:
        fg = True
        pid = openid
        #验证成功,安装用户
        request.rk_user = UserBase._install(pid, 'oc', subarea=subarea)
    else:
        print "debug_guochen_erro_token pid, access_token, openid", pid, access_token, openid
        msg = get_msg('login', 'session_overdue')
    return fg, pid, msg
示例#49
0
def mi_sync_report(request):
    """
    mi获得玩家的充值行为后,用此api通知我们
    第一步  验证mi 的请求参数
    第二步  主动查询 mi,进一步确认订单状态
    第三步  给玩家充值
    """
    request_data = dict(
        appId = request.REQUEST.get('appId', None),
        cpOrderId = request.REQUEST.get('cpOrderId', None),
        cpUserInfo = request.REQUEST.get('cpUserInfo', None),
        uid = request.REQUEST.get('uid', None),
        orderId = request.REQUEST.get('orderId', None),
        orderStatus = request.REQUEST.get('orderStatus', None),
        payFee = request.REQUEST.get('payFee', None),
        productCode = request.REQUEST.get('productCode', None),
        productName = request.REQUEST.get('productName', None),
        productCount = request.REQUEST.get('productCount', None),
        payTime = request.REQUEST.get('payTime', None),
        orderConsumeType = request.REQUEST.get('orderConsumeType', None),
        signature = request.REQUEST.get('signature', None),
    )

    #### 验证mi 的传参
    # errcode 含义
    # 状态码,200 成功
    # 1506 cpOrderId 错误
    # 1515 appId 错误
    # 1516 uid 错误  (mi 的uid)
    # 1525 signature 错误 
    # 3515 订单信息  不一致,用于和 CP 的订单校验
    #3502 订单处理超时
    #1511 支付结果错误
    errcode = {'errcode': 200}
    if request_data['appId'] != settings.MI_APP_ID:
        errcode['errcode'] = 1515
        return HttpResponse(
                json.dumps(errcode, indent=1),
                content_type='application/x-javascript',
        ) 

    signature_params = sorted([key for key in request_data.keys() if request_data[key] and key != 'signature'])
    ready_signature = "&".join(['{}={}'.format(key, request_data[key].encode('utf-8')) for key in signature_params])
    if request_data['signature'] != hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest():
        errcode['errcode'] = 1525
        return HttpResponse(
            json.dumps(errcode, indent=1),
            content_type='application/x-javascript',
        ) 

    oid = request_data['cpOrderId']

    mi_record = OrderRecord.find({'oid':oid})
    if not mi_record:
        errcode['errcode'] = 1506
        return HttpResponse(
                json.dumps(errcode, indent=1),
                content_type='application/x-javascript',
        )
    item_id = mi_record[0].item_id
    oc_uid = mi_record[0].uid


    #### 我们 主动查询mi的订单支付状态接口  加强验证
    mi_url = "http://mis.migc.xiaomi.com/api/biz/service/queryOrder.do"
    ready_signature = 'appId=%s&cpOrderId=%s&uid=%s' % (settings.MI_APP_ID, oid, request_data['uid'])
    signature = hmac.new(settings.MI_SECRET_KEY, ready_signature, hashlib.sha1).hexdigest()
    confirm_data = dict(
        appId = settings.MI_APP_ID,
        cpOrderId = oid,
        uid = request_data['uid'],
        signature = signature,
    )
    pairs = urllib.urlencode(confirm_data)
    fullurl = mi_url + '?' + pairs
    url_request = urllib2.urlopen(fullurl, timeout=12)
    code, res = url_request.code, url_request.read()
    res_dict = json.loads(res)

    rk_user = UserBase.get(oc_uid)
    if not rk_user:
        errcode['errcode'] = 1506
        return HttpResponse(
            json.dumps(errcode, indent=1),
            content_type='application/x-javascript',
        ) 

    if code != 200:
        errcode['errcode'] = 3502
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\
                                              'result': u'订单处理超时' + str(code),'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,})
        return HttpResponse(
            json.dumps(errcode, indent=1),
            content_type='application/x-javascript',
        ) 
    if 'errcode' in res_dict:
        errcode['errcode'] = res_dict['errcode']
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\
                                      'result': u'小米验证支付状态不通过' + errcode['errcode'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,})
        return HttpResponse(
            json.dumps(errcode, indent=1),
            content_type='application/x-javascript',
        ) 
    if res_dict['cpOrderId'] != oid or res_dict['orderStatus'] != 'TRADE_SUCCESS':
        errcode['errcode'] = 1511
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\
                              'result': u'小米返回:支付结果错误'+ res_dict['orderStatus'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,})
        return HttpResponse(
                json.dumps(errcode, indent=1),
                content_type='application/x-javascript',
        )


    # 和前端约定cpUserInfo  存的是 item_id
    if item_id != res_dict['cpUserInfo']:
        errcode['errcode'] = 3515
        data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\
                      'result': u'物品不一致','oid':oid,'item_id':item_id,'subarea': rk_user.subarea,})
        return HttpResponse(
                json.dumps(errcode, indent=1),
                content_type='application/x-javascript',
        )

    ###  给玩家充值
    
    data = charge_api(rk_user, oid, item_id, platform = 'mi',res_dict={},request = request, charge_way='mi')
    data_log_mod.set_log('ChargeResultLog', **{'uid':rk_user.uid,'charge_way':'mi',\
                                              'result':data['result'],'oid':oid,'item_id':item_id,'subarea': rk_user.subarea,})
    if data['result'] == u'fail_订单重复':
        errcode['errcode'] = 2004
    elif data['rc'] != 0:
        errcode['errcode'] = 1506
    return HttpResponse(
        json.dumps(errcode, indent=1),
        content_type='application/x-javascript',
    )
示例#50
0
 def user_base(self):
     if not hasattr(self, '_user_base'):
         from apps.models.user_base import UserBase
         self._user_base = UserBase.get(self.uid)
     return self._user_base
示例#51
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid', '').strip()
    if not uid:
        pid = request.GET.get('pid', '').strip()
        if not pid:
            username = request.GET.get('username', '')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid = ocapp.mongo_store.mongo.db['username'].find(
                    {'name': username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards': [],
        'other_cards': [],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k, v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key=lambda x: (all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find(
        {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {}

    ######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store', ''):
        store_type = request.POST.get('store_type')
        params = {}
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods', ''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
#   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods', ''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)


####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by ' + str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state", "0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user', ''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold', ''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold > 0:
                user_property_obj.add_gold(add_gold, where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin', ''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin > 0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point', ''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point > 0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp', ''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp, where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv', ''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp - now_exp, where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor', ''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul', ''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype,
                                   title=mail_title,
                                   content=mail_content,
                                   award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid, clv, where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid, clv, where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp', ''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid, add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv', ''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card', ''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck', ''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get(
                    'ucid', '') != user_card_obj.get_leader(
                        user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main', ''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader', 0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid': ucid, 'leader': 1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub', ''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul', ''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid, 1, where=qa_edit)
            user_card_obj.put()

        #一键送所有武将
        if request.POST.get('give_all_card', ''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card', ''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend(
                    [card['ucid'] for card in deck if card.get('ucid', '')])
            del_cids = filter(lambda x: x not in decks,
                              user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon', ''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current'][
                'floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current'][
                'room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid, where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid, num, where=qa_edit)

        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid, num, where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(
                mid,
                int(request.POST.get("add_materials_num", 0)),
                where=qa_edit)

        if request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid,
                                    int(request.POST.get("add_props_num", 0)),
                                    where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num')) if request.POST.get(
                'all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid, num, where=qa_edit)

        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()

        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid, where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num', 0):
                    parts = game_config.equip_config[eid].get(
                        'need_soul_types_num', 0)
                    for i in xrange(1, parts + 1):
                        user_souls_obj.add_equip_soul(eid + '_' + str(i),
                                                      100,
                                                      where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid, 1, where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num, where=qa_edit)
            user_souls_obj.put()

        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [
                ueid for ueid in user_equips.equips
                if not user_equips.is_used(ueid)
            ]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num')
                      ) if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid, num, where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass', '') and user.user_property.newbie:
            newbie_steps_num = int(
                user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (
                1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(
        map(lambda x: int(x), game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]
                              ['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id, room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']
                  ['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index(
            '%s-%s' % (data['current_dungeon']['floor_id'],
                       data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips]
    data['user_equips'] = [
        game_config.equip_config.get(eid_dict['eid'])
        for eid_dict in eqids_dict
    ]
    all_equips_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i, game_config.equip_config.get(str(i) + '_equip'))
                          for i in all_equips_tag]

    #mat
    data['user_materials'] = {
        mid: {
            'name': game_config.material_config.get(mid, {}).get('name', ''),
            'num': user_pack_obj.materials[mid]
        }
        for mid in user_pack_obj.materials
    }
    all_materials_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,
                              game_config.material_config.get(str(i) + '_mat'))
                             for i in all_materials_tag]

    #props
    data['user_props'] = {
        pid: {
            'name': game_config.props_config.get(pid, {}).get('name'),
            'num': user_pack_obj.props[pid]
        }
        for pid in user_pack_obj.props
    }
    all_props_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i, game_config.props_config.get(str(i) + '_props'))
                         for i in all_props_tag]

    ######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul', ''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card',
                                           int(num),
                                           where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul', ''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul',
                                           -add_super_soul_num,
                                           where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid': sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num, where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get(
            'star', '') + u'星 ' + game_config.card_config[sid].get('name',
                                                                   '') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片'
        else:
            sid = '%s_%s' % (all_parts[0], all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片第%s部分' % all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader', 0)
            eid = ''  #user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''  #user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails = show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({
                award.values()[0]['good_id']:
                award.values()[0].get('num', 0)
            })
            mail['awards'].pop(0)

    data.update({
        'mails':
        sorted(temp_mails,
               key=operator.itemgetter('can_get', 'create_time'),
               reverse=True),
        'user_property_obj':
        user_property_obj,
        'user':
        user,
        'add_time':
        timestamp_toString(user.add_time),
        'last_login_time':
        timestamp_toString(user.user_property.login_time),
        'login_record':
        UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj':
        user_real_pvp_obj.pvp_detail,
        'mystery_store':
        mystery_store.get_store_info(user, {}),
        'pk_store':
        pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data
示例#52
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid','').strip()
    if not uid:
        pid = request.GET.get('pid','').strip()
        if not pid:
            username = request.GET.get('username','')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid


    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards':[],
        'other_cards':[],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k,v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key = lambda x :(all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {}

######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store',''):
        store_type = request.POST.get('store_type')
        params = {
        }
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods',''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
    #   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods',''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)
####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by '+str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state","0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user',''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold',''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold>0:
                user_property_obj.add_gold(add_gold,where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin',''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin>0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point',''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point>0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp',''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp,where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv',''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp-now_exp,where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor',''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul',''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype, title=mail_title, content=mail_content, award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid,clv,where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid,clv,where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp',''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid,add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv',''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card',''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck',''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get('ucid','') != user_card_obj.get_leader(user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main',''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader',0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid':ucid,'leader':1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub',''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul',''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid,1,where=qa_edit)
            user_card_obj.put()
            
        #一键送所有武将
        if request.POST.get('give_all_card',''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()     
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card',''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend([card['ucid'] for card in deck if card.get('ucid','')])
            del_cids = filter(lambda x:x not in decks,user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon',''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current']['floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current']['room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid,where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid,num,where=qa_edit)
                
        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid,num,where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(mid,int(request.POST.get("add_materials_num", 0)),where=qa_edit)


        if  request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid, int(request.POST.get("add_props_num", 0)),where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num'))if request.POST.get('all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid,num,where=qa_edit)

        
        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()


        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid,where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num',0):
                    parts = game_config.equip_config[eid].get('need_soul_types_num',0)
                    for i in xrange(1,parts+1):
                        user_souls_obj.add_equip_soul(eid+'_'+str(i),100,where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid,1,where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num,where=qa_edit)
            user_souls_obj.put()
        
        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [ ueid for ueid in user_equips.equips if not user_equips.is_used(ueid)]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num'))if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid,num,where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass','') and user.user_property.newbie:
            newbie_steps_num = int(user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id,room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ]
    data['user_equips'] = [game_config.equip_config.get(eid_dict['eid'])  for eid_dict in eqids_dict]
    all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i,game_config.equip_config.get(str(i)+'_equip')) for i in all_equips_tag]

    #mat
    data['user_materials'] = {mid :{'name':game_config.material_config.get(mid, {}).get('name', ''),'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials }
    all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,game_config.material_config.get(str(i)+'_mat')) for i in all_materials_tag]

    #props
    data['user_props'] = {pid :{'name':game_config.props_config.get(pid, {}).get('name'),'num':user_pack_obj.props[pid]} for pid in user_pack_obj.props }
    all_props_tag = sorted([int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i,game_config.props_config.get(str(i)+'_props')) for i in all_props_tag]

######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul',''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card', int(num), where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul',''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul', -add_super_soul_num, where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid':sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num,where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片'
        else:
            sid = '%s_%s'%(all_parts[0],all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片第%s部分'%all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader',0)
            eid = ''#user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''#user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails =  show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({award.values()[0]['good_id']: award.values()[0].get('num', 0)})
            mail['awards'].pop(0)


    data.update({
        'mails': sorted(temp_mails, key=operator.itemgetter('can_get', 'create_time'), reverse=True),
        'user_property_obj':user_property_obj,
        'user':user,
        'add_time':timestamp_toString(user.add_time),
        'last_login_time':timestamp_toString(user.user_property.login_time),
        'login_record':UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj': user_real_pvp_obj.pvp_detail,
        'mystery_store': mystery_store.get_store_info(user, {}),
        'pk_store': pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data
示例#53
0
import json
from apps.models.user_mystery_store import UserMysteryStore
from apps.models.user_property import UserProperty
from apps.common import utils
from apps.config.game_config import game_config
from apps.logics import vip
from apps.models import data_log_mod
from apps.models.user_cards import UserCards
from apps.models.user_equips import UserEquips
from apps.models.user_pack import UserPack
from apps.logics import card
from apps.logics import equip
from apps.models.user_base import UserBase
game_config.subareas_conf()
game_config.set_subarea('1')
rk_user = UserBase.get(uid)

def check_card_in_deck(user_card_obj,card_list):
    """
    检查武将是否在队伍中
    """
    game_config.subareas_conf()
    game_config.set_subarea('1')
    for ucid in card_list:
        for deck in user_card_obj.decks:
            ucid_ls = [card['ucid'] for card in deck if card.get('ucid','')]
            if ucid in ucid_ls:
                return 11,utils.get_msg('card','in_deck')
    return 0,''

def equip_stove():
示例#54
0
    def login(self, params):
        """登录
        发送登录奖励邮件
        """
        user_base_obj = self.user_base
        user_property_obj = self.user_property
        # game_config = self.game_config
        # 获取当天的字符串
        now = datetime.datetime.now()
        # 获取注册时间
        add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date()
        # 获取双倍充值的时间
        # charge_double_date = game_config.shop_config.get('charge_double_date', '')
        mail_awards = {}

        now_str = utils.datetime_toString(now)
        self.login_info.setdefault('login_record_new', []).insert(0, now_str)
        if len(self.login_info['login_record_new']) > 5:
            self.login_info['login_record_new'].pop()
        last_login_time = self.login_info['login_time']
        # 新安装用户,或玩家每天首次登入
        if not last_login_time or now.date() != utils.timestamp_toDatetime(
                last_login_time).date():
            self.login_info['total_login_num'] += 1
            self.login_info['login_record'].insert(0, str(now.date()))
            # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug
            if len(self.login_info['login_record']) > 40:
                self.login_info['login_record'].pop()
            # 连续登录
            if now.date() == (utils.timestamp_toDatetime(last_login_time) +
                              datetime.timedelta(days=1)).date():
                self.login_info['continuous_login_num'] += 1
            # 非连续登录
            else:
                self.login_info['continuous_login_num'] = 1

            # 每日登录奖励
            # mail_awards.update(self.get_daily_login_award())

            # # 判断有无系统奖励
            # mail_awards.update(self.get_system_bonus())

            #临时的一个系统补偿
            mail_awards.update(self.get_system_compensates())

            # #临时补偿
            # mail_awards.update(self.get_temp_bonus())

            # # 特定日期首次充值双倍再开放
            # if not user_property_obj.double_charge and (
            # str(add_date) != str(now.date()) and
            # str(now.date()) == charge_double_date):
            #     user_property_obj.property_info['double_charge'] = True

            # # 特定日期之后已充值过的用户首次充值双倍关闭
            # if user_property_obj.double_charge and charge_double_date and (
            # str(now.date()) > charge_double_date):
            #     user_property_obj.property_info['double_charge'] = False

            user_gift_obj = UserGift.get_instance(self.uid)

            # #连续登录奖励
            # mail_awards.update(self.get_continuous_login_award())

            # #累积登录奖励
            # mail_awards.update(self.get_login_award())

            # 领取以前未领取的等级奖励
            user_gift_obj.get_lv_gift()

            # 月卡返还
            mail_awards.update(self.get_monthCard_bonus())
            # if str(add_date) != str(now.date()):
            #     self.__refresh_month_card_info(user_property_obj)

            # 重置道具商店购买次数
            self.user_pack.reset_store_has_bought_cnt()

            # vip 玩家 每日奖励  通过邮件发放
            mail_awards.update(self.get_vip_daily_bonus())

            # 回复战场次数重置
            user_property_obj.reset_recover_times()

        # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导
        if user_property_obj.property_info.get(
                'newbie_steps', 0) == 15 and user_property_obj.newbie:
            user_property_obj.user_cards.reset_cards()

        rtn_data = {}

        user_property_obj.property_info['login_time'] = int(time.time())

        #版本更新奖励
        strVersion = params.get("version", "")
        if last_login_time and strVersion != "":
            update_version_award = self.get_update_version_bonus(strVersion)
            if update_version_award and strVersion not in user_property_obj.update_award:
                mail_awards["update_version_award"] = {
                    "award": update_version_award
                }
                #user_property_obj.give_award(update_version_award)
                user_property_obj.property_info["update_award"].append(
                    strVersion)
        #判断有无绑定奖励
        if UserBase.get(self.uid).platform != 'oc' and \
        user_property_obj.property_info.get('bind_award'):
            mail_awards['bind_award'] = self.game_config.weibo_config[
                'bind_award']
            user_property_obj.property_info['bind_award'] = False

        # if not user_property_obj.newbie:
        #     rtn_data = self.new_login_bonus(now, user_property_obj)

        # 根据上一次22:00的pvp排名给予相应的功勋奖励
        mail_awards.update(self.get_honor_award())
        # 发得奖邮件
        self.send_mails(mail_awards)

        #当天注册用户判断是否有活动双倍
        # if not self.login_info.get('set_newbie_double_charge',False) and\
        #  not user_property_obj.double_charge and\
        #  str(now.date()) == charge_double_date and\
        #  str(add_date) == str(now.date()):
        #     user_property_obj.property_info['double_charge'] = True
        #     self.login_info['set_newbie_double_charge'] = True

        #  若保底求将没开  清空保底求将元宝
        from apps.logics.gacha import is_open_safty
        self.user_gacha.reset_cost_coin()
        if not is_open_safty():
            self.user_gacha.reset_cost_coin()

        # 登录时间更新
        self.login_info['login_time'] = int(time.time())

        self.put()
        user_property_obj.put()

        return {}