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
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
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)
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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