def __check_user_passwd__(cls, userId, passWord): dbPassword, userSignature = TyContext.RedisUser.execute(userId, 'HMGET', 'user:'******'password', 'userSignature') # 补救password没设置值的bug # if (dbPassword == None or dbPassword == '') and passWord != None and len(passWord) > 0: # TyContext.RedisUser.execute(userId, 'HSET', 'user:'******'password', passWord) # dbPassword = passWord # TyContext.ftlog.info('__check_user_passwd__ dbPassword is empty', 'userId=', userId, 'dbPassword='******'__check_user_passwd__ error: userId', userId, 'failed password', passWord, 'db password', dbPassword) return False # TyContext.ftlog.info('doLoginByTyId->password incorrect', 'userId=', userId, 'dbPassword='******'passWord=', passWord) return False
def doUserBind(cls, mo, rpath): if not AccountVerify.sing_verify(rpath) and False: mo.setResult('info', '验签失败') mo.setResult('code', -1) return rparams = TyContext.RunHttp.convertArgsToDict() snsId = rparams.get('snsId') snsId = AccountVerify.decode_item(snsId) prefix = snsId.split(':')[0] isOk = None try: method = snsv4_login_map.get(prefix) if not method: isOk = True else: isOk = method(rparams, snsId) except: isOk = False if not isOk: mo.setResult('info', '账号验证失败') mo.setResult('code', 1) return uid = AccountModel.get_uid_by_snsid(snsId) if uid and int(uid) > 0: mo.setResult('info', '用户已经绑定过其他途游账号了') mo.setResult('code', 3) return uid = rparams.get('userId') snsId = rparams.get('snsId') AccountModel.set_snsid_for_userid(uid, snsId) AccountModel.add_snsid_to_userbind_set(uid, snsId) AccountModel.set_user_info(uid, snsId=snsId) mo.setResult('info', '绑定成功') mo.setResult('code', 0)
def check_param_mail(cls, rpath): mail = TyContext.RunHttp.getRequestParam('mail', '') mail = AccountVerify.decode_item(mail) mail = mail.strip().lower() if len(mail.split('@')) != 2: return True, cls.error_param_mail return False, mail
def doSetPasswd(cls, params, mo, checkOldPasswd=True): TyContext.ftlog.info(cls.__name__, 'doSetPasswd->rparams=', params) userId = cls.__get_param__(params, 'userId') oldpasswd = cls.__get_param__(params, 'oldpasswd') newpasswd = cls.__get_param__(params, 'newpasswd') dbPassword, changePwdCount = TyContext.RedisUser.execute( userId, 'HMGET', 'user:'******'password', 'changePwdCount') # 效验旧密码 if checkOldPasswd and oldpasswd != '': m = md5() m.update(str(oldpasswd)) oldPasswordmd5 = m.hexdigest() if str(dbPassword) != str(oldpasswd) and str( dbPassword) != oldPasswordmd5: mo.setResult('code', AccountConst.CODE_USER_OLD_PWD_ERROR) mo.setResult('info', '旧密码输入错误!') return # 更新玩家密码及更改密码次数 if changePwdCount == None: changePwdCount = 0 changePwdCount = int(changePwdCount) + 1 TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', newpasswd, 'userSignature', AccountVerify.md5(newpasswd), 'changePwdCount', changePwdCount) mo.setResult('code', 0) mo.setResult('info', '设置密码成功') mo.setResult('userId', userId) mo.setResult('userPwd', newpasswd) return
def doVerifyAccount(cls, rpath): verify = False userId = TyContext.RunHttp.getRequestParamInt('userId', 0) authorCode = TyContext.RunHttp.getRequestParam('authorCode', '') if AccountVerify.sing_verify(rpath): verify = TyContext.AuthorCode.checkUserAuthorCode(userId, authorCode) mo = TyContext.Cls_MsgPack() mo.setResult('verify', verify) return mo
def check_mobile_password(cls, mobile, password): mobilePassword = TyContext.RedisUserKeys.execute( 'GET', 'mobilepassword:'******'tuyoo:%s:%s' % (mobile, password)): return True return False
def check_param_password(cls, rpath, key='passwd', isSet=False): password = TyContext.RunHttp.getRequestParam(key, '') if password == '': # hack - 没有创建密码问题 liubo return False, password password = AccountVerify.decode_item(password) if len(password) < 6: return True, cls.error_param_password if isSet and not re.match(r'^[A-Za-z0-9@#$%^&+=]{6,20}$', password): return True, cls.error_param_setpassword return False, password
def check_param_mobile(cls, rpath): mobile = TyContext.RunHttp.getRequestParam('mobile', '') mobile = AccountVerify.decode_item(mobile) try: mobile = int(mobile) except: pass if len(str(mobile)) != 11: return True, cls.error_param_mobile return False, mobile
def set_user_password(cls, userId, password): dbPassword, changePwdCount = TyContext.RedisUser.execute( userId, 'HMGET', 'user:'******'password', 'changePwdCount') # 更新玩家密码及更改密码次数 if changePwdCount == None: changePwdCount = 0 changePwdCount = int(changePwdCount) + 1 TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', password, 'userSignature', AccountVerify.md5(password), 'changePwdCount', changePwdCount)
def setUserSex(cls, rpath): from tysdk.entity.user_common.verify import AccountVerify mo = TyContext.Cls_MsgPack() if not AccountVerify.sing_verify(rpath): mo.setKey('code', 1) return mo param = TyContext.RunHttp.convertArgsToDict() userId = int(param.get('userId', 0)) params = {} params['sex'] = param.get('sex', 0) AccountModel.set_user_info(userId, **params) mo.setKey('code', 0) return mo
def doReportContacts(cls, rpath): isReturn, params = AccountCheck.normal_check(rpath) if isReturn: return params mo = TyContext.Cls_MsgPack() contacts = TyContext.RunHttp.getRequestParam('contacts', '') if contacts != '': contacts = AccountVerify.decode_item(contacts) TyContext.ftlog.info('doReportContacts appId=', params['appId'], 'userId=', params['userId'], 'contacts=', contacts) mo.setResult('code', 0) mo.setResult('info', 'success') return mo
def normal_check(cls, rpath, check_sign=True): # cls.__init_checker__() # 输入参数校验 if check_sign and AccountVerify.sing_verify(rpath) != True: return True, cls.error_sing params = {} # 检查登录参数 appId = TyContext.RunHttp.getRequestParamInt('appId', 0) if appId <= 0: return True, cls.error_param_appid params['appId'] = appId userId = TyContext.RunHttp.getRequestParamInt('userId', 0) if userId <= 0: return True, cls.error_param_userid params['userId'] = userId authorCode = TyContext.RunHttp.getRequestParam('authorCode', '') if check_sign and not TyContext.AuthorCode.checkUserAuthorCode( userId, authorCode): return True, cls.error_param_authorcode clientId = TyContext.RunHttp.getRequestParam('clientId', '') try: datas = clientId.split('_') clientSystem = datas[0] clientVersion = TyContext.ClientUtils.getVersionFromClientId( clientId) clientChannel = datas[2] except: return True, cls.error_param_clientid params['clientId'] = clientId params['clientSystem'] = clientSystem params['clientVersion'] = clientVersion params['clientChannel'] = clientChannel return False, params
def getUserInfoByToken(cls, rpath): params = TyContext.RunHttp.convertArgsToDict() userId = int(params.get('userId', 0)) token = params.get('token') mo = TyContext.Cls_MsgPack() from tysdk.entity.user_common.verify import AccountVerify if not AccountVerify.sing_verify(rpath): mo.setKey('code', 1) return mo if not AccountModel.checkUserByToken(userId, token): mo.setKey('code', 1) return mo attrs = params.get('attrs') info = AccountModel.get_user_info( userId, *filter(lambda x: x.strip(), attrs.split(','))) resultInfo = {} keyfilter = ['name', 'sex', 'purl', 'bindMobile', 'snsId'] for k, v in info.items(): if k in keyfilter: resultInfo[k] = v mo.setKey('code', 0) mo.setKey('info', resultInfo) return mo
def doSnsLogin(cls, rpath): # todo 验签 mo = TyContext.Cls_MsgPack() rparams = TyContext.RunHttp.convertArgsToDict() rparams['snsId'] = AccountVerify.decode_item(rparams['snsId']) snsId = rparams.get('snsId') prefix = snsId.split(':')[0] isOk = None try: method = snsv4_login_map.get(prefix) if not method: isOk = True else: isOk = method(rparams, snsId) except: isOk = False if not isOk: mo.setResult('info', '三方登陆失败') mo.setResult('code', 1) return mo userId = AccountLogin.__find_userid_by_snsid__(snsId) is_create = False if userId <= 0: # 效验该deviceId是否存在第三方sns刷号嫌疑 isFlag, retMsg = AccountLogin._check_deviceid_sns_forbidden( rparams) if isFlag: mo.setResult('code', AccountConst.CODE_USER_SNS_REG_FAILE) mo.setResult('info', retMsg) return mo rparams['passwd'] = 'ty' + str(random.randint(100000, 999999)) if snsId.startswith('360'): rparams['lang'] = "zh_hans" is_create = True userId = AccountInfo.createNewUser(rparams, AccountConst.USER_TYPE_SNS, False) if userId <= 0: mo.setResult('code', AccountConst.CODE_USER_GUEST_REG_FAILE) mo.setResult('info', '用户账号建立失败') return mo appId = rparams['appId'] else: rparams['userId'] = userId try: del rparams['name'] except: pass AccountInfo.doSetUserInfo(rparams, mo, False) AccountLogin._do_check_login(rparams, userId, mo, AccountConst.USER_TYPE_SNS, is_create) # add to userBindSet snsId = rparams.get('snsId') AccountModel.add_snsid_to_userbind_set(userId, snsId) retMsg = TyContext.Cls_MsgPack() if mo.getErrorInfo(): retMsg.setResult('info', mo.getErrorInfo()) retMsg.setResult('code', mo.getErrorCode()) return retMsg token = AccountModel.reset_user_token(userId, 'sns') retMsg.setResult('token', token) retMsg.setResult('code', 0) return retMsg
def fillUserLoginInfoV3(cls, params, mo, userId, isLogin, isCreate): # 兼容客户端之前的用户未能在创建时传入imsi imsi = TyContext.RedisUser.execute(userId, 'HGET', 'user:'******'imsi') if not imsi: if 'imsi' in params and params['imsi']: TyContext.RedisUser.execute(userId, 'HSET', 'user:'******'imsi', params['imsi']) TyContext.ftlog.debug('fillUserLoginInfoV3 in imsi', imsi, 'params[imsi]', params['imsi']) clientIp = TyContext.RunHttp.get_client_ip() # IMPORTANT!! used by GDSS statistics TyContext.ftlog.info('fillUserLoginInfoV3 in userId=', userId, 'isLogin='******'isCreate=', isCreate, 'clientId=', params['clientId'], 'clientIp=', clientIp, 'gameId=', params['appId'], 'params=', params) appId = params['appId'] cls.updateUserSessionInfo(appId, userId, params) # 查询用户基本信息 mo.setResult('code', AccountConst.CODE_USER_SUCCESS) mo.setResult('userId', userId) mo.setResult('appId', appId) # 查询用户基本信息 uname, authorCode, email = TyContext.AuthorCode.creatUserAuthorCodeNew( userId) uname = TyContext.KeywordFilter.replace(unicode(uname)) # 如果appId <10000,做用户名检查 # todo for 104 test add by tcz if int(appId) < 10000: uname = UsernameGenerator.check_and_save_user_name(uname, userId) mo.setResult('authorCode', authorCode) mo.setResult('userName', uname) mo.setResult('userEmail', unicode(email)) if isCreate: mo.setResult('isCreate', 1) else: mo.setResult('isCreate', 0) # 获取玩家绑定类型 userType = 0 bindMobile, userEmail, userSnsId, userDBPwd, changePwdCount, log_report, exception_report, user360Vip = TyContext.RedisUser.execute( userId, 'HMGET', 'user:'******'bindMobile', 'email', 'snsId', 'password', 'changePwdCount', 'log_report', 'exception_report', '360.vip') # set default password if not userDBPwd: userDBPwd = 'ty' + str(random.randint(100000, 999999)) TyContext.RedisUser.execute(userId, 'HMSET', 'user:'******'password', userDBPwd, 'userSignature', AccountVerify.md5(userDBPwd)) if log_report != 1: log_report = 0 if exception_report != 1: exception_report = 0 if bindMobile != None and len(str(bindMobile)) == 11: userType = userType | 1 if userEmail != None and len(userEmail) > 0: userType = userType | 2 if userSnsId != None and len(str(userSnsId)) > 0: userType = userType | 4 mo.setResult('userType', userType) if userSnsId and len(userSnsId) > 0: mo.setResult('snsId', userSnsId) mo.setResult('userPwd', unicode(userDBPwd)) mo.setResult('mobile', unicode(bindMobile)) # 获取玩家修改密码次数 if changePwdCount == None: changePwdCount = 0 mo.setResult('changePwdCount', changePwdCount) mo.setResult('log_report', log_report) mo.setResult('exception_report', exception_report) # 360V计划,返回vip标示 if user360Vip != None: mo.setResult('360.vip', user360Vip) checkcode = '' if appId < 10000: # 途游自己的游戏 cls.__append_tcp_infos__(appId, userId, params['clientId'], mo) clientId = params.get('clientId', 'unknow') AccountHelper.append_ios_idfa_flg(userId, appId, clientId, mo) cls.__append_logclient_infos__(userId, clientId, mo) else: clientId = params.get('clientId', 'unknow') AccountHelper.append_ios_idfa_flg(userId, appId, clientId, mo) checkcode = TyContext.AuthorCode.makeLoginCode( userId, appId, authorCode) mo.setResult('usercode', checkcode) # 为了兼容使用新登录老支付,当这种结合过期后,删除authInfo字段 ainfo = { 'authcode': authorCode, 'account': email, 'uid': userId, 'usercode': checkcode } ainfo = json.dumps(ainfo) mo.setResult('authInfo', ainfo) mo.setResult('token', AccountModel.get_user_token(userId))
def check_param_snsid(cls, rpath): snsId = TyContext.RunHttp.getRequestParam('snsId', '') snsId = AccountVerify.decode_item(snsId) if len(snsId.split(':')) != 2: return True, cls.error_param_snsid return False, snsId
def check_param_account(cls, rpath): account = TyContext.RunHttp.getRequestParam('account', '') account = AccountVerify.decode_item(account) if len(account) <= 0 or len(account) > 32: return True, cls.error_param_account return False, account
def login_check(cls, rpath, loginType): # cls.__init_checker__() # 输入参数校验 if AccountVerify.sing_verify(rpath) != True: return True, cls.error_sing # 检查是否可以登录 loginForbid = TyContext.ServerControl.checkLoginForbid(rpath) if loginForbid != False: return True, loginForbid params = TyContext.RunHttp.convertArgsToDict() # params = {} # 检查登录参数 appId = TyContext.RunHttp.getRequestParamInt('appId', 0) if appId <= 0: return True, cls.error_param_appid params['appId'] = appId clientId = TyContext.RunHttp.getRequestParam('clientId', '') try: datas = clientId.split('_') clientSystem = datas[0] clientVersion = TyContext.ClientUtils.getVersionFromClientId( clientId) clientChannel = datas[2] except: return True, cls.error_param_clientid check_clientid_number = TyContext.Configure.get_global_item_int( 'check_clientid_num_before_login', 0) if appId < 10000 and check_clientid_number: if not TyContext.BiUtils.clientIdToNumber(appId, clientId): return True, cls.error_param_clientid params['clientId'] = clientId params['clientSystem'] = clientSystem params['clientVersion'] = clientVersion params['clientChannel'] = clientChannel imei = TyContext.RunHttp.getRequestParam('imei', '') # TyContext.ftlog.debug('imei=', imei) imei = AccountVerify.decode_item(imei) # TyContext.ftlog.debug('imei=', imei) if len(imei) < 12 or len(imei) > 32: imei = '' # TyContext.ftlog.debug('imei=', imei) imsi = TyContext.RunHttp.getRequestParam('imsi', '') # TyContext.ftlog.debug('imsi=', imsi) imsi = AccountVerify.decode_item(imsi) # TyContext.ftlog.debug('imsi=', imei) if len(imsi) == 0 or len(imsi) > 15: imsi = '' # TyContext.ftlog.debug('imsi=', imsi) androidId = TyContext.RunHttp.getRequestParam('androidId', '') # TyContext.ftlog.debug('androidId=', androidId) androidId = AccountVerify.decode_item(androidId) # TyContext.ftlog.debug('androidId=', androidId) if len(androidId) < 12 or len(androidId) > 32: androidId = '' # TyContext.ftlog.debug('androidId=', androidId) idfa = AccountVerify.decode_item( TyContext.RunHttp.getRequestParam('idfa', '')) params['idfa'] = idfa TyContext.ftlog.debug('idfa=', idfa) mac = TyContext.RunHttp.getRequestParam('mac', '') # TyContext.ftlog.debug('mac=', mac) mac = AccountVerify.decode_item(mac) # TyContext.ftlog.debug('mac=', mac) params['macmd5'] = AccountVerify.md5(mac) # 获取不到时,mac可能为00:00:00:00:00:00或02:00:00:00:00:00 # 下面的判断似有问题,但不能改,否则用户下次登录会生成不同的deviceId # 而丢失老账户 mac = mac.replace(':', '') badmacs_an = TyContext.Configure.get_global_item_json( 'badmacs_android', ['000000000000']) badmacs_ios = TyContext.Configure.get_global_item_json( 'badmacs_ios', ['020000000000']) if mac in badmacs_ios: # 如果IOS的mac取不到或者变化020000000000,那么需要加到badmacs_ios集合中 params['macmd5'] = '' else: if mac != "" and mac not in badmacs_an: # 如果安卓的mac取值出现问题,那么需要将错误值加入badmacs_an mac = mac.replace(':', '') if len(mac) != 12: TyContext.ftlog.info('the mac is error ! [', mac, ']') mac = '' else: TyContext.ftlog.info('the mac is error ! [', mac, ']') mac = '' # TyContext.ftlog.debug('mac=', mac) uuid = TyContext.RunHttp.getRequestParam('uuid', '') # TyContext.ftlog.debug('uuid=', uuid) if len(uuid) != 32: uuid = '' if mac in badmacs_ios: uuid = uuid.lower() svninfo = TyContext.RunHttp.getRequestParam('svninfo', '') if svninfo: params['svninfo'] = svninfo iccid = TyContext.RunHttp.getRequestParam('iccid', '') TyContext.ftlog.debug('paramiccid=', iccid) iccid = AccountVerify.decode_item(iccid) TyContext.ftlog.debug('iccid=', iccid) params['mac'] = mac if is_valid_iccid(iccid): params['iccid'] = iccid else: try: del params['iccid'] except: pass # params['macmd5'] = AccountVerify.md5(mac) params['imei'] = imei params['imsi'] = imsi params['androidId'] = androidId params['uuid'] = uuid id_str = mac + '|' + imei + '|' + androidId + '|' + uuid TyContext.ftlog.info('deviceId str=', id_str) _devid = AccountVerify.md5(id_str) params['deviceId'] = _devid TyContext.ftlog.debug('login_check mac', mac, 'imei', imei, 'androidId', androidId, 'uuid', uuid, 'calculated deviceId', _devid) params['phoneType'] = TyContext.RunHttp.getRequestParam( 'phoneType', '') params['detect_phonenumber'] = TyContext.RunHttp.getRequestParam( 'detect_phonenumber', '') params['lang'] = TyContext.RunHttp.getRequestParam('lang', '') password = None if loginType == 1: ''' 游客登录 ''' password = None if len(mac) + len(imei) + len(androidId) + len(uuid) == 0: return True, cls.error_param_device params['deviceName'] = TyContext.RunHttp.getRequestParam( 'deviceName', '') elif loginType == 2: ''' 手机号登录 ''' isReturn, mobile = cls.check_param_mobile(rpath) if isReturn: return True, mobile params['mobile'] = mobile password = 1 elif loginType == 3: ''' tuyooid登录 ''' tuyooId = TyContext.RunHttp.getRequestParam('tuyooId', '') tuyooId = AccountVerify.decode_item(tuyooId) try: tuyooId = int(tuyooId) except: pass if tuyooId <= 10000: return True, cls.error_param_tuyooid params['tuyooId'] = tuyooId password = 1 elif loginType == 4: ''' 邮箱登录 ''' isReturn, mail = cls.check_param_mail(rpath) if isReturn: return True, mail params['mail'] = mail password = 1 elif loginType == 5: ''' snsid登录 ''' isReturn, snsId = cls.check_param_snsid(rpath) if isReturn: return True, snsId params['snsId'] = snsId params['snsToken'] = TyContext.RunHttp.getRequestParam('snsToken') params['snsAppId'] = TyContext.RunHttp.getRequestParam('snsAppId') password = None elif loginType == 6: ''' Account登录 ''' isReturn, account = cls.check_param_account(rpath) if isReturn: return True, account params['account'] = account password = 1 elif loginType == 7: ''' 新建账户 ''' pass if password != None: isReturn, passwd = cls.check_param_password(rpath) if isReturn: return True, passwd params['passwd'] = passwd return False, params
def doSmsBindCallBack(cls, rparams): TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->rparams=', rparams) mobile = rparams['mobile'] sms = rparams['sms'] try: template = TyContext.Configure.get_global_item_json( 'smsup_content', decodeutf8=True) smsre = template['bindcode_re'] if smsre and isinstance(smsre, unicode): smsre = smsre.encode('utf8') shortId = re.match(smsre, sms).group(1) if not shortId: raise Exception('fail get new format smsupcontent') bindOrderId = ShortOrderIdMap.get_long_order_id(shortId) TyContext.RunMode.get_server_link(bindOrderId) # V4版本绑定手机号 if TyContext.RedisUserKeys.execute('EXISTS', 'bindOrderV4:%s' % bindOrderId): TyContext.RedisUserKeys.execute( 'HMSET', 'bindOrderV4:%s' % bindOrderId, 'mobile', mobile, 'state', AccountConst.MOBILE_BIND_SUCCESS) TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bindOrderV4', mobile, bindOrderId) return ### 用来保存订单和手机号的对于关系 userId, appId, clientId = TyContext.RedisUserKeys.execute( 'HMGET', 'bindOrder:' + bindOrderId, 'userId', 'appId', 'clientId') if not userId or not clientId: TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bind user timed out', mobile, bindOrderId) TyContext.RunMode.del_server_link(bindOrderId) return except Exception as e: TyContext.ftlog.debug( '_get_sms_orderid error parsing new format bindOrderId exception', e) sms = AccountVerify.decode64(sms) datas = sms.split('|') bindOrderId = datas[0] userId = int(datas[1]) clientId = datas[2] appId = int(datas[3]) TyContext.RunMode.get_server_link(bindOrderId) TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bind user of', mobile, bindOrderId, appId, userId, clientId) bindparams = { 'mobile': mobile, 'userId': userId, 'appId': appId, 'clientId': clientId, 'bindOrderId': bindOrderId, } mo = TyContext.Cls_MsgPack() AccountBind.doBindByMobile(bindparams, mo) TyContext.RunMode.del_server_link(bindOrderId)
def set_mobile_password(cls, mobile, password): md5Password = AccountVerify.md5('tuyoo:%s:%s' % (mobile, password)) TyContext.RedisUserKeys.execute('SET', 'mobilepassword:' + str(mobile), md5Password)
def check_userv4(cls, rpath): # cls.__init_checker__() if not AccountVerify.sing_verify(rpath): return True, cls.error_sing params = TyContext.RunHttp.convertArgsToDict() # 检查登录参数 appId = TyContext.RunHttp.getRequestParamInt('appId', 0) if appId <= 0: return True, cls.error_param_appid params['appId'] = appId userId = TyContext.RunHttp.getRequestParamInt('userId', 0) params['userId'] = userId # bindOrderId = TyContext.RunHttp.getRequestParam('bindOrderId') # if bindOrderId is not None: # params['bindOrderId'] = bindOrderId params['loginFlag'] = TyContext.RunHttp.getRequestParamInt( 'loginFlag', 0) clientId = TyContext.RunHttp.getRequestParam('clientId', '') try: datas = clientId.split('_') clientSystem = datas[0] clientVersion = TyContext.ClientUtils.getVersionFromClientId( clientId) clientChannel = datas[2] except: return True, cls.error_param_clientid params['clientId'] = clientId params['clientSystem'] = clientSystem params['clientVersion'] = clientVersion params['clientChannel'] = clientChannel imei = TyContext.RunHttp.getRequestParam('imei', '') # TyContext.ftlog.debug('imei=', imei) imei = AccountVerify.decode_item(imei) # TyContext.ftlog.debug('imei=', imei) if len(imei) < 12 or len(imei) > 32: imei = '' # TyContext.ftlog.debug('imei=', imei) imsi = TyContext.RunHttp.getRequestParam('imsi', '') # TyContext.ftlog.debug('imsi=', imsi) imsi = AccountVerify.decode_item(imsi) # TyContext.ftlog.debug('imsi=', imei) if len(imsi) == 0 or len(imsi) > 15: imsi = '' # TyContext.ftlog.debug('imsi=', imsi) androidId = TyContext.RunHttp.getRequestParam('androidId', '') # TyContext.ftlog.debug('androidId=', androidId) androidId = AccountVerify.decode_item(androidId) # TyContext.ftlog.debug('androidId=', androidId) if len(androidId) < 12 or len(androidId) > 32: androidId = '' # TyContext.ftlog.debug('androidId=', androidId) idfa = AccountVerify.decode_item( TyContext.RunHttp.getRequestParam('idfa', '')) params['idfa'] = idfa mac = TyContext.RunHttp.getRequestParam('mac', '') # TyContext.ftlog.debug('mac=', mac) mac = AccountVerify.decode_item(mac) # TyContext.ftlog.debug('mac=', mac) # 获取不到时,mac可能为00:00:00:00:00:00或02:00:00:00:00:00 # 下面的判断似有问题,但不能改,否则用户下次登录会生成不同的deviceId # 而丢失老账户 mac = mac.replace(':', '') badmacs_an = TyContext.Configure.get_global_item_json( 'badmacs_android', ['000000000000']) badmacs_ios = TyContext.Configure.get_global_item_json( 'badmacs_ios', ['020000000000']) if mac in badmacs_ios: # 如果IOS的mac取不到或者变化020000000000,那么需要加到badmacs_ios集合中 params['macmd5'] = '' else: if mac != "" and mac not in badmacs_an: # 如果安卓的mac取值出现问题,那么需要将错误值加入badmacs_an mac = mac.replace(':', '') if len(mac) != 12: TyContext.ftlog.info('the mac is error ! [', mac, ']') mac = '' else: TyContext.ftlog.info('the mac is error ! [', mac, ']') mac = '' # TyContext.ftlog.debug('mac=', mac) uuid = TyContext.RunHttp.getRequestParam('uuid', '') # TyContext.ftlog.debug('uuid=', uuid) if len(uuid) != 32: uuid = '' if mac in badmacs_ios: uuid = uuid.lower() id_str = mac + '|' + imei + '|' + androidId + '|' + uuid TyContext.ftlog.info('deviceId str=', id_str) _devid = AccountVerify.md5(id_str) params['deviceId'] = _devid TyContext.ftlog.debug('after check user params-->', params) return False, params
def doBuyStraight(self, userId, params, mo, cardType=0): from tysdk import is_test_sdk_server if not is_test_sdk_server(): yee_config = TyContext.Configure.get_global_item_json( 'yee2_config', {}) yee_channel = params['yeeChannel'] yee_account = yee_config.get(str(yee_channel))[0] yee_calltag = yee_config.get(str(yee_channel))[1] if yee_channel == 'shediao': cardType = 3 if yee_account: self.YEE_ACCOUNT = yee_account self.CALLBACK_TAG = yee_calltag else: raise Exception( 'can not find yee2 account info define of yee_channel=' + str(yee_channel)) from tysdk.entity.user_common.verify import AccountVerify self.requestSqh += 1 error = '' orderPrice = int(params['orderPrice']) * 100 platformOrderId = params['orderPlatformId'] + '-' + str( self.requestSqh) imei = TyContext.RunHttp.getRequestParam('imei', '').strip() if len(imei) > 0: imei = 'IMEI:' + AccountVerify.decode_item(imei) mac = TyContext.RunHttp.getRequestParam('mac', '') if len(mac) > 0: mac = 'MAC:' + AccountVerify.decode_item(mac) if len(imei) > 0: other = imei elif len(mac) > 0: other = mac else: error = 'params of MAC or IMEI is missing' userip = TyContext.RunHttp.getRequestParam('ip', '').strip() if len(userip) == 0: error = 'params of IP Address is missing' userua = TyContext.RunHttp.getRequestParam('user_agent', '').strip() if len(userua) == 0: error = 'params of User Agent is missing' userua = AccountVerify.decode_item(userua) if len(userua) == 0: error = 'params of User Agent decode error ' if len(error) > 0: mo.setError('code', 1) mo.setError('info', error) return domain = PayHelper.getSdkDomain() pname = u'途游-' + unicode(params['orderName']) mesdata = { 'merchantaccount': self.YEE_ACCOUNT, # 商户账户编号 √ string 'orderid': platformOrderId, # 客户订单号 √ string 商户生成的唯一订单号,最长50位 'transtime': int(time.time()), # 交易时间 √ int 时间戳,例如:1361324896,精确到秒 'currency': 156, # 交易币种 int 默认156人民币(当前仅支持人民币) 'amount': orderPrice, # 交易金额 √ int 以"分"为单位的整型,必须大于零 'productcatalog': '1', # 商品类别码 √ string 详见商品类别码表 1 虚拟产品 'productname': pname, # 商品名称 √ string 最长50位,出于风控考虑,请按下面的格式传递值:应用-商品名称 'productdesc': '', 'identityid': str(userId), # 用户标识 √ string 最长50位,商户生成的用户账号唯一标识 'identitytype': 2, # 用户标识类型 √ int 2 用户ID 用户编号 'other': other, # 终端硬件标识 √ string 最长50位,手机传IMEI(格式为IMEI:447769804451095), 'userip': userip, # 用户IP √ string 用户支付时使用的网络终端IP 'userua': userua, # 终端UA √ string 用户使用的移动终端的UA信息 'callbackurl': domain + '/v1/pay/yee2/callback' + str(self.CALLBACK_TAG), 'fcallbackurl': domain + '/v1/pay/yee2/callback' + str(self.CALLBACK_TAG + 1), } TyContext.ftlog.debug('TuYouPayYee2.doBuyStraight ', imei, mac, 'mesdata=', mesdata) yeeurl = self.__make_request_url__(cardType, mesdata) payData = {'openurl': yeeurl} params['payData'] = payData mo.setResult('payData', payData) pass
def __do_request(self, chargeInfo, mo, cardType=0): from tysdk.entity.user_common.verify import AccountVerify userId = chargeInfo['uid'] self.requestSqh += 1 error = '' orderPrice = chargeInfo['chargeTotal'] * 100 platformOrderId = chargeInfo['platformOrderId'] + '-' + str( self.requestSqh) imei = TyContext.RunHttp.getRequestParam('imei', '').strip() if len(imei) > 0: imei = 'IMEI:' + AccountVerify.decode_item(imei) mac = TyContext.RunHttp.getRequestParam('mac', '') if len(mac) > 0: mac = 'MAC:' + AccountVerify.decode_item(mac) if len(imei) > 0: other = imei elif len(mac) > 0: other = mac else: error = 'params of MAC or IMEI is missing' userip = TyContext.RunHttp.getRequestParam('ip', '').strip() if len(userip) == 0: error = 'params of IP Address is missing' userua = TyContext.RunHttp.getRequestParam('user_agent', '').strip() if len(userua) == 0: error = 'params of User Agent is missing' userua = AccountVerify.decode_item(userua) if len(userua) == 0: error = 'params of User Agent decode error ' if len(error) > 0: mo.setError('code', 1) mo.setError('info', error) return PayConst.CHARGE_STATE_ERROR_REQUEST domain = PayHelper.getSdkDomain() pname = u'途游-' + unicode(chargeInfo['diamondName']) mesdata = { 'merchantaccount': self.YEE_ACCOUNT, # 商户账户编号 √ string 'orderid': platformOrderId, # 客户订单号 √ string 商户生成的唯一订单号,最长50位 'transtime': int(time.time()), # 交易时间 √ int 时间戳,例如:1361324896,精确到秒 'currency': 156, # 交易币种 int 默认156人民币(当前仅支持人民币) 'amount': int(orderPrice), # 交易金额 √ int 以"分"为单位的整型,必须大于零 'productcatalog': '1', # 商品类别码 √ string 详见商品类别码表 1 虚拟产品 'productname': pname, # 商品名称 √ string 最长50位,出于风控考虑,请按下面的格式传递值:应用-商品名称 'productdesc': '', 'identityid': str(userId), # 用户标识 √ string 最长50位,商户生成的用户账号唯一标识 'identitytype': 2, # 用户标识类型 √ int 2 用户ID 用户编号 'other': other, # 终端硬件标识 √ string 最长50位,手机传IMEI(格式为IMEI:447769804451095), 'userip': userip, # 用户IP √ string 用户支付时使用的网络终端IP 'userua': userua, # 终端UA √ string 用户使用的移动终端的UA信息 'callbackurl': domain + '/v1/pay/yee2/callback' + str(self.CALLBACK_TAG), 'fcallbackurl': domain + '/v1/pay/yee2/callback' + str(self.CALLBACK_TAG + 1), } TyContext.ftlog.debug('TuYouPayYee2.__do_request', imei, mac, 'mesdata=', mesdata) yeeurl = self.__make_request_url__(cardType, mesdata) payData = {'openurl': yeeurl} mo.setResult('payData', payData) return PayConst.CHARGE_STATE_REQUEST