Пример #1
0
def setPassword(username,password):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 获取token的json字段
		postStr = '{"newpassword": "******"}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->setPassword->postStr:', postStr)
		conn.request('POST', url + '/users/' + username + '/password', postStr, headers)
		"""
		response示例
		{
		  "action" : "set user password",
		  "timestamp" : 1409575962124,
		  "duration" : 326
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->setPassword->error:',response.status)
			return False,backdata
		else:
			return True,'设置密码成功'
	except:
		print('func_im.py->setPassword->except:', backdata)
		return False, '设置密码异常'
Пример #2
0
def searchUser(request):
    #判断用户是否登录,登录用户才具备查询权限,并返回当前登录用户
    result,loginUser = LoginStatus(ltoken=get_token(request))    
    if not result:
        #print 'not login',get_token(request),loginUser
        infor = loginUser
        return JsonResponse(GlobalVar.RspOffLine,infor)

    if request.method == 'GET':
        pKey = request.GET.get('key','')
        if pKey == '':
            return JsonResponse(GlobalVar.RspFail,'需要输入关键字')

        try:
            #temp1 = User.objects.filter(PhoneNumber=pKey)
            #temp2 = User.objects.filter(UserName__contains=pKey)
            lUser = User.objects.filter(PhoneNumber=pKey) | User.objects.filter(UserName__contains=pKey)
            lUser = lUser.distinct().values(*GlobalVar.TableFields.Userfields)
            lUser = GetCommonDlList(lUser)
            #lUser = lUser.values(*fields)
            return JsonResponse(lUser)
        except User.DoesNotExist:
            return JsonResponse(GlobalVar.RspSuccess,'查询结果为空')
        except Exception,ex:
            debug('views_person.py->searchUser->error',ex)
            return JsonResponse(GlobalVar.RspFail,'查询过程出现异常')
Пример #3
0
    def save(self,*args,**kwargs):
        
        #用户名使用随机数字
        #if '' == self.UserName:
        #    self.UserName = '******' + self.PhoneNumber #get_random_string(7,'0123456789') + \
                #datetime.now().strftime('%Y%m%d%H%M%S')
        
        if not isPhoneNumber(self.PhoneNumber):
            debug('models.py->User->save:电话号码非法')
            return False,'电话号码非法'

        #当环信用户名为空时,则表明未注册,需要注册
        if not self.hxActivieFlag:
            self.hxActivieFlag = True
            self.hxUserName = '******' + self.PhoneNumber
            self.hxPassword = get_random_string(16,'abcdefghijklmnopqrstuvwxyz~!@#$%^&*()0123456789')

        #UuID如果未空,则表明没有注册,注册还是在用户注册成功之后,调用环信注册函数
        if self.hxActivieFlag and (self.hxUuid is None or '' == self.hxUuid):
            result,info = getHxUser(self.hxUserName)
            #环信用户已经存在
            if result:
                self.hxUuid = info
            else:
                result,info = register(self.hxUserName,self.hxPassword)
                if result:
                    self.hxUuid = info
                #uuid生成失败,下次修改记录场景下重新自动注册
                else:
                    debug('models.py->User->save:uuid生成失败-',info)
                    #不能直接返回,继续保存其他变量
                    #return False,'注册IM失败'

        super(User,self).save(*args,**kwargs)
        return True,'保存成功'
Пример #4
0
    def updateFileToCommon(self,fileFlag,colName='_FILE_HeaderFigure'):
        temp = {}
        #print "GetUlToken Start"
        ulToken,filename = GetCommonUlToken(model=fileFlag,count=1)

        debug('func_json.py -> updateFileToCommon -> _meta', JsonCode(type(self).__name__))
        
        #print "ulToken:",ulToken,"filename",filename
        #将上传凭证和服务器生成的文件名称返回给客户端,让客户端向云上传附件
        if(len(ulToken)== 1 and len(filename) == 1):                    
            temp['UlToken'] = ulToken[0]
            temp['FileName'] = filename[0]  
        else:
            return False,'上传Token获取失败'

        try:

            #根据列名,保留旧值,新值暂时放到末尾,待上传文件成功之后,回调再刷新
            setattr(self, colName,getattr(self,colName,'') + GlobalVar.InterStr +  filename[0])
            self.save()
            """
            for field in self._meta.fields:
                if field.name == colName:
                    print self._meta,field.name
                    setattr(self, colName,getattr(self,colName,'') + GlobalVar.InterStr +  filename[0])
                    #field +=  GlobalVar.InterStr +  filename[0]
                    break;"""


            return True,temp
        except Exception,ex:
            return False,ex
Пример #5
0
    def refreshUrl(self,colname='content',pIsPublic=True):
        lIsPublic = getattr(self,'IsPublic',True)
        pIsPublic = lIsPublic and pIsPublic

        content = getattr(self,colname,'')
        if pIsPublic:
            return content

        content = b64decode(content)

        soup = BeautifulSoup(content)
        aList = soup.find_all("a")
        for a in aList:
            #更新url
            if pIsPublic:
                result,newUrl = GetCommonDlItem(a.get('tilte',''))
            else:
                result,newUrl = GetPrivateDlItem(a.get('tilte',''))
            if result:
                a.href = newUrl
                #附件src更新,支持的类型才会直接更新src
                for child in a.children:
                    if child.name == 'img':
                        child.src = newUrl
                    else:
                        pass
            else:
                pass
        debug('func_json.py -> JsonMode -> refreshUrl',soup.prettify())
        return b64encode(soup.prettify())
Пример #6
0
def get_access_token(refresh=False):
    try:
        global token_time,expires_in, access_token  
        #小于两小时,并且不需要强制刷新token
        if (datetime.now() - token_time).seconds < expires_in \
            and not refresh and not access_token == '':
            #print 'get_access_token: now access_token is ',access_token
            pass
        
        #
        else:  
            debug( 'get_access_token:Get the access_token,now it is',access_token)
            url = wxHost + '/cgi-bin/token?grant_type=client_credential&appid=' \
                + appid + '&secret=' + secret
            #更新token和时间戳
            #{"access_token":"ACCESS_TOKEN","expires_in":7200}
            errorcode,responseJson = https_get(url)
            access_token = responseJson.get('access_token','')
            expires_in = int(responseJson.get('expires_in','7200'))
            token_time = datetime.now()
            
        return access_token
            
    except:
        print 'get_access_token:except.'
        return 'access_token:except'
Пример #7
0
def wxWebLogin(request):
    if request.method == 'POST':
        json_para = JsonRequest(request.body)       
        
        try:
            puserTempId = json_para.get('userTempId','')
            puserTempToken = json_para.get('userTempToken','')
            pToken = get_token(request)
            debug('wxWebLogin',puserTempId,puserTempToken)
        
            lUser = User.objects.get(UserTempId=puserTempId)
            if lUser.verifyUserTempToken(puserTempToken):
                """
                resultSave,infoSave = lUser.save()
                if not resultSave:
                    return JsonResponse(GlobalVar.RspFail,infoSave)"""
                result,infor = LoginStatus(luser=lUser,ltoken=pToken)
                if result:
                    return JsonResponse(GlobalVar.RspSuccess,'微信用户登录成功')
                else:
                    return JsonResponse(GlobalVar.RspFail,infor)
            else:
                return JsonResponse(GlobalVar.RspFail,'微信用户登录失败')
        except User.DoesNotExist:
            return JsonResponse(GlobalVar.RspFail,'微信用户链接可能已经过期')
        except:
            return JsonResponse(GlobalVar.RspFail,'微信用户登录异常,请重新登录')
    else:
        return JsonResponse(GlobalVar.RspFail,'HTTP方法不支持')
Пример #8
0
def sendSysMsg(target_type=globalvar.target_type.users,target='["test"]',typePara="system",action="test",fromPara="admin",ext=""):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		if ext is None or ext == '':
			ext = '{"reservs":"保留"}'

		# 添加朋友的json字段
		#users 给用户发消息,  chatgroups 给群发消息, chatrooms 给聊天室发消息
		#一个用户u1或者群组, 也要用数组形式 ['u1'], 给用户发送时数组元素是用户名,给群组发送时数组元素是groupid
		#表示消息发送者, 无此字段Server会默认设置为"from":"admin",有from字段但值为空串("")时请求失败
		#扩展属性, 由app自己定义.可以没有这个字段,但是如果有,值不能是“ext:null“这种形式,否则出错
		postStr = '{' +\
			'"target_type":"' + target_type + '", '+\
			'"target":"'+ target +'",'+ \
			'"msg":{"type":"' + typePara + '", "action":"' + action +'"},'+\
			'"from":"' + fromPara + '",' +\
			'"ext":' + ext + '}'

		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->sendSysMsg->postStr:', postStr)
		conn.request('POST', url + '/messages/', postStr, headers)
		"""
	   {
		  "action" : "post",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui",
		  "entities" : [ ],
		  "data" : {
			"testb" : "success",
			"testc" : "success"
		  },
		  "timestamp" : 1415167842297,
		  "duration" : 4,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->getBlocks->error:',response.status)
			return False,backdata
		else:
			_dict = JsonRequest(backdata)
			data = _dict.get('data',[])
			return True,data
	except:
		print('func_im.py->getBlocks->except:', backdata)
		return False, '获取黑名单异常'
Пример #9
0
def wxticket(request):
    if request.method == 'GET':
        #不支持GeT方法
        return JsonResponse(GlobalVar.RspFail)
    elif request.method == 'POST':
        data = JsonRequest(request.body);
        url = data.get('url','')
        debug('wxticket',url)
        ret = get_js_wx_config(url)
        return JsonResponse(ret)
    else:
        return JsonResponse(GlobalVar.RspFail)
Пример #10
0
def rmvFriend(username,friend_username):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 删除朋友的json字段
		postStr = '{}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->rmvFriend->postStr:', postStr)
		conn.request('DELETE', url + '/users/' + username + '/contacts/users/' + friend_username, postStr, headers)
		"""
		{
		  "action" : "delete",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "params" : { },
		  "path" : "/users/stliu/contacts",
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users/stliu/contacts/users/yantao",
		  "entities" : [ {
			"uuid" : "aa6160da-eb01-11e3-ab09-15edd986e7b7",
			"type" : "user",
			"created" : 1401787813725,
			"modified" : 1409739134225,
			"username" : "88888",
			"activated" : true,
			"device_token" : "67aab3a88a0b146b7883e7b0275ffe94f509a4e69e8b1db503b2fa4f9c556dd3",
			"nickname" : "88888",
			"notification_display_style" : 0,
			"notification_no_disturbing" : false,
			"notification_no_disturbing_end" : 24,
			"notification_no_disturbing_start" : 0,
			"notifier_name" : "chatdemoui_dev"
		  } ],
		  "timestamp" : 1409739808288,
		  "duration" : 1575,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->rmvFriend->error:',response.status)
			return False,backdata
		else:
			return True,'添加朋友成功'
	except:
		print('func_im.py->rmvFriend->except:', backdata)
		return False, '添加朋友异常'
Пример #11
0
def wxMyInfo(request):
    #debug('wiews_weixin.py->wxMyInfor:enter the wxMyinfo')
    if request.method == 'GET':
        code = request.GET.get('code','')
        result,url = weixin_user_url_preHandle(code,GlobalVar.OpenType.Messsage)
        
        debug('wiews_weixin.py->wxMyInfo->result,url:',result,url)

        if result:
            return HttpResponseRedirect(url)
        else:
            return JsonResponse(GlobalVar.RspFail,url)  
    else:
        return JsonResponse(GlobalVar.RspSuccess,'OK')  
Пример #12
0
def JsonRequest(body):
    try:
        """
        decodeStr=''
        print body
        if "AppTest" in body or ',hash="' in body:
            decodeStr= body
        else:
            decodeStr = Cipher.decrypt(body) 
        """
        return simplejson.loads(body)
    except Exception,ex:
        debug('func_json.py->JsonRequest->error:',ex)
        return {}
Пример #13
0
def get_jsapi_ticket(refresh=False):
    try:
        global ticket_time,expires_in, jsapi_ticket  
        #小于两小时,并且不需要强制刷新token
        if (datetime.now() - ticket_time).seconds < expires_in \
            and not refresh and not jsapi_ticket == '':
            debug( 'get_jsapi_ticket: now access_token is ',access_token)
            pass
        
        #
        else:  
            #https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
            debug( 'get_jsapi_ticket:Get the jsapi_ticket,now it is',jsapi_ticket)
            url = wxHost + '/cgi-bin/ticket/getticket?access_token=' \
                + get_access_token() + '&type=jsapi'
            #更新token和时间戳
            #{"access_token":"ACCESS_TOKEN","expires_in":7200}
            errorcode,responseJson = https_get(url)
            if errorcode == '0': 
                jsapi_ticket = responseJson.get('ticket','')
                #expires_in = int(responseJson.get('expires_in','7200'))
                ticket_time = datetime.now()
            else:
                debug("get_jsapi_ticket: the weixin server response is error:",errorcode)
            
        return jsapi_ticket
            
    except:
        debug( 'get_jsapi_ticket:except.')
        return 'access_token:except'
Пример #14
0
def weixin_user_url_preHandle(code='',openType=0):
    if code == '':
        return True,'http://x5.wuyoubar.cn/X5/'
    
    errorcode2,response2 = get_user_refresh_token(code)
    
    
    #debug( errorcode2,response2)
    
    
    if errorcode2 != '0':
            return False,response2    
    
    p_openid = response2.get('openid','')
    p_access_token = response2.get('access_token','')
    p_refresh_token = response2.get('refresh_token','')
    #debug('lOpenid',lOpenid)
    #OpenID在数据库中存在,已经绑定用户,直接跳转页面
    #携带openType和tempUserToken
    try:
        lUser = User.objects.get(openid=p_openid)
        #debug('lUser',lUser)
        
        userTempId = datetime.now().strftime('%Y%m%d%H%M%S') +\
            get_random_string(6,'0123456789abcdefghijklmnopqrstuvwxyz')
        userTempToken = datetime.now().strftime('%Y%m%d%H%M%S') +\
            get_random_string(24,'0123456789abcdefghijklmnopqrstuvwxyz')
            
        #创建tempUserToken,需要保存到数据库中
        result = lUser.generateUserTempToken(userTempId,userTempToken)        
        if not lUser.save():
            debug('weixin_user_url_preHandle','generate temp userid and token fail!!!!!')
            return False,'微信用户临时授权失败'
        
        debug('weixin_user_url_preHandle',lUser)
        #debug(result,userTempId,userTempToken)
        if result:
            return True,UserPageHome+'?openType='+str(openType)+'&userTempId='+userTempId +\
                '&userTempToken='+userTempToken
        else:
            return False,'网络异常,请稍后重试'
        
    #OpenID在数据库中不存在,跳转到绑定用户页面,code下发给终端
    except User.DoesNotExist:
        #把openid,access_token和refresh_token加密发送给用户
        #msg消息体加密之前是access_token(xxxx)&openid(xxx)&refresh_token(xxx)
        tempWXUser = TempWXUser(
            openid = p_openid,
            access_token = p_access_token,
            refresh_token = p_refresh_token,
        )
        tempWXUser.save()
        
        #msg = encrypter(msg)
        debug('weixin_user_url_preHandle','msg',p_openid)
        return True,UserPageHome+'?openType='+str(GlobalVar.OpenType.wxBound) +\
            '&code='+p_openid+'&nextopenType='+str(openType)
    except Exception,ex:
        debug('func_weixin.py->weixin_user_url_preHandle->error',p_openid)
        return False,'网络异常,请稍后重试'
Пример #15
0
def https_post(url,PostStr):
    try:
        conn = httplib.HTTPSConnection(wxHost)
        conn.request('POST',url,PostStr,headers_post)
        response = conn.getresponse()
        backdata = response.read(5000)
        errorcode,result = response_handle(backdata)         
        debug('https_post',url,PostStr,errorcode,result)
        if errorcode == '0':
            return errorcode,result
        else:
            return errorcode,'http post方法失败'+errorcode
    except:
        return 'https_post except','https post方法异常'
Пример #16
0
    def wxBond(self,TokenInfor,userInfo):
        try:
            
            debug('wxBond',TokenInfor,userInfo)
            #是不是已经微信绑定,如果用户已经绑定,需要先解绑定,才能继续绑定
            if self.openid == '' or self.openid is None:
                pass
            else:
                return False,'该手机用户已经绑定,请绑定其他手机用户或者进行解绑'
            
            
            #TokenInfor = [openid,access_token,refresh_token]
            
            self.openid = TokenInfor[0]
            self.country = userInfo.get('country','')
            self.privilege = userInfo.get('privilege','')
            self.access_token = TokenInfor[1]
            self.expires_in = 7200
            self.refresh_token = TokenInfor[2]
            #self.unionid = TokenInfor.get('unionid','')
            
            #如果用户相关信息为空,则将微信的用户相关信息直接导入

            #微信的等同于本系统的用户名
            if self.UserName == '' or self.UserName is None:
                self.UserName = userInfo.get('nickname','')
                
            if self.Sex == '' or self.Sex is None:
                if userInfo.get('sex','') == '1':
                    self.Sex = '男'
                else:
                    self.Sex = '女'
                
            if self.Provence == '' or self.Provence is None:
                self.Provence = userInfo.get('province','')  
                
            if self.City == '' or self.City is None:
                self.City = userInfo.get('city','')  
                
            if self._FILE_HeaderFigure == '' or self._FILE_HeaderFigure is None:
                self._FILE_HeaderFigure = userInfo.get('headimgurl','')
            
            
            if self.save():
                return True,'绑定成功'
            else:
                return False,'绑定失败'
        except:
            return False,'绑定数据操作异常,请稍后重试'
Пример #17
0
def https_get(url):
    try:
        conn = httplib.HTTPSConnection(wxHost)
        conn.request('GET',url,None,headers_get)
        response = conn.getresponse()
        backdata = response.read(5000)
        errorcode,result = response_handle(backdata)
        #{"access_token":"ACCESS_TOKEN","expires_in":7200}
        debug('https_get',url,errorcode,result)
        #GET方法处理成功,状态判断的主要在response_handle函数中处理
        if  errorcode == '0':
            return errorcode,result
        else:
            return errorcode,'https get方法失败'+errorcode
    except:
        return 'https_get except','https get方法异常'
Пример #18
0
def setNickName(username,nickname):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 获取token的json字段
		postStr = '{"nickname": "'+nickname+'"}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->setNickName->postStr:', postStr)
		conn.request('POST', url + '/users/' + username, postStr, headers)
		"""
		{
		  "action" : "put",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "path" : "/users",
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users",
		  "entities" : [ {
			"uuid" : "c3b56d5a-7135-11e4-92d2-edab82ae2302",
			"type" : "user",
			"created" : 1416543645861,
			"modified" : 1416550240537,
			"username" : "jianguo",
			"activated" : true,
			"device_token" : "61491f49f3e69cd1d62c5b390e42f4b1cd15bf1a876a487268cfaef9960188ee",
			"nickname" : "张建国"
		  } ],
		  "timestamp" : 1416550240285,
		  "duration" : 278,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->setNickName->error:',response.status)
			return False,backdata
		else:
			return True,'设置昵称成功'
	except:
		print('func_im.py->setNickName->except:', backdata)
		return False, '设置昵称异常'
Пример #19
0
def getToken(refresh=False):
	global  expires_in,access_token,application,url
	#判断当前是否已经超时
	if (datetime.now() - token_time).seconds < expires_in \
			and not refresh and not access_token == '':
		return True,access_token

	backdata = ''

	try:
		#获取token的json字段
		postStr = '{"grant_type":"client_credentials",'\
			+ '"client_id": "YXA6oSm0kJ2OEeW4bge9YoDNxQ","client_secret": "YXA6tGnIfyPAskipCkcUxWTbERT8xDU"}'
		conn  = httplib.HTTPSConnection(host)
		conn.request('POST', url + '/token' , postStr, headers)
		"""
		response示例
		{
		  "access_token":"YWMtWY779DgJEeS2h9OR7fw4QgAAAUmO4Qukwd9cfJSpkWHiOa7MCSk0MrkVIco",
		  "expires_in":5184000,   #有效时间,秒为单位, 默认是七天,在有效期内是不需要重复获取的
		  "application":"c03b3e30-046a-11e4-8ed1-5701cdaaa0e4"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			return False,backdata
	except:
		debug('func_im.py->getToken->except:',backdata)
		return False,'更新环信Token异常'

	if 'access_token' in backdata and 'expires_in' in backdata:
		_dict = JsonRequest(backdata)
		access_token = _dict.get("access_token","")
		expires_in = int(_dict.get('expires_in','5184000'))
		application = _dict.get("application","")

		if access_token != "":
			#更新headers
			headers['Authorization'] = 'Bearer ' + access_token
			return True,access_token
		else:
			return False,backdata
	else:
		return False,backdata
Пример #20
0
def getHxUser(username):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 添加朋友的json字段
		postStr = '{}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->getUser->postStr:', postStr)
		conn.request('GET', url + '/users/' + username , postStr, headers)
		"""
	   {
		 "action" : "get",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "params" : { },
		  "path" : "/users",
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users/ywuxvxuir6",
		  "entities" : [ {
		    "uuid" : "628a88ba-dfce-11e3-8cac-51d3cb69b303",
		    "type" : "user",
		    "created" : 1400556326075,
		    "modified" : 1400556326075,
		    "username" : "ywuxvxuir6",
		    "activated" : true
		  } ],
		  "timestamp" : 1409574716897,
		  "duration" : 57,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->getUser->error:',response.status)
			return False,backdata
		else:
			_dict = JsonRequest(backdata)
			data = _dict.get('entities',[])
			if len(data) == 1:
				uuid = data[0].get('uuid','')
				if uuid == '':
					return False,'获取到的uuid为空'
				else:
					return True,uuid
			else:
				debug('func_im.py->getFriends->get Uuid fail:', backdata)
				return False,'获取Uuid失败'
	except Exception,ex:
		debug('func_im.py->getFriends->error:', ex)
		return False, '获取用户信息异常'
Пример #21
0
def addFriend(username,friend_username):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 添加朋友的json字段
		postStr = '{}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->addFriend->postStr:', postStr)
		conn.request('POST', url + '/users/' + username + '/contacts/users/' + friend_username, postStr, headers)
		"""
		{
			"action":"post","application":"4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5","params":{},
			"path":"/users/aa6160da-eb01-11e3-ab09-15edd986e7b7/contacts",
			"uri":"https://a1.easemob.com/easemob-demo/chatdemoui/users/jliu/contacts/yantao",
			"entities":[
					{
					"uuid":"0086742a-dc9b-11e3-a782-1b5d581c57a9",
					"type":"user",
					"created":1400204403810,
					"modified":1400204403810,
					"username":"******",
					"activated":true
					}
			],
			
			"timestamp":1406086326974,"duration":242,
			"organization":"easemob-demo",
			"applicationName":"chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = rsponse.read(5000)
		if response.status >= 400:
			debug('func_im.py->addFriend->error:',response.status)
			return False,backdata
		else:
			return True,'添加朋友成功'
	except:
		print('func_im.py->addFriend->except:', backdata)
		return False, '添加朋友异常'
Пример #22
0
    def getFileUrl(self,colName='_FILE_HeaderFigure',pIsPublic=True):
        filename = getattr(self,colName,'').split(GlobalVar.InterStr)[0]
        debug('func_json.py -> JsonMode -> getFileUrl ->colValue,filename,colname:',getattr(self,colName,''),filename,colName)
        if filename == '':
            return ''
        
        result,url = False,''
        lIsPublic = getattr(self,'IsPublic',True)
        pIsPublic = lIsPublic and pIsPublic
        if pIsPublic:
            result,info = GetCommonDlItem(filename)
        else:
            result,info =  GetPrivateDlItem(filename)

        if result:
            return info
        else:
            return ''
Пример #23
0
def rmvBlocks(username,friend_username):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 删除朋友的json字段
		postStr = '{}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->rmvBlocks->rmvBlocks:', postStr)
		conn.request('DELETE', url + '/users/' + username + '/blocks/users/' + friend_username, postStr, headers)
		"""
		{
		  "action" : "delete",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "path" : "/users/72bb4f9a-fce7-11e3-98f4-adc39e9f4363/blocks",
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users/v3y0kf9arx/blocks",
		  "entities" : [ {
			"uuid" : "7cc785ea-dfcc-11e3-b24a-d5b4112501a1",
			"type" : "user",
			"created" : 1400555511102,
			"modified" : 1400555511102,
			"username" : "5cxhactgdj",
			"activated" : true
		  } ],
		  "timestamp" : 1412825354550,
		  "duration" : 164,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->rmvBlocks->error:',response.status)
			return False,backdata
		else:
			return True,'从黑名单中删除成功'
	except:
		print('func_im.py->rmvBlocks->except:', backdata)
		return False, '从黑名单中删除异常'
Пример #24
0
def getUserInfoFromHx(request):
    #判断用户是否登录,登录用户才具备查询权限,并返回当前登录用户
    result,loginUser = LoginStatus(ltoken=get_token(request))    
    if not result:
        #print 'not login',get_token(request),loginUser
        infor = loginUser
        return JsonResponse(GlobalVar.RspOffLine,infor)

    if request.method == 'GET':
        phxUserName = request.GET.get('hxUserName','')
        if phxUserName == '':
            return JsonResponse(GlobalVar.RspFail,'环信用户名不能为空')
        try:
            #temp1 = User.objects.filter(PhoneNumber=pKey)
            #temp2 = User.objects.filter(UserName__contains=pKey)
            fields = ['id','PhoneNumber','UserName','_FILE_HeaderFigure','IsDelete','Nick','hxUserName']
            lUser = User.objects.values(*GlobalVar.TableFields.Userfields).get(hxUserName=phxUserName)
            #lUser = lUser
            lUser = GetCommonDlList([lUser])
            #lUser = lUser.values(*fields)
            return JsonResponse(lUser)
        except User.DoesNotExist:
            return JsonResponse(GlobalVar.RspFail,'未查找到该环信用户的信息')
        except:
            return JsonResponse(GlobalVar.RspFail,'出现异常')
    elif request.method == "POST":
        _strReq = JsonRequest(request.body)
        pHxUserNameList = _strReq.get('hxUserNameList',[])
        debug('views_person->getUserInfoFromHx->_strReq:',_strReq)
        debug('views_person->getUserInfoFromHx->pHxUserNameList:',pHxUserNameList)
        try:
            lUser = User.objects.values(*GlobalVar.TableFields.Userfields).filter(hxUserName__in=pHxUserNameList)
            if len(lUser) == 0:
                return JsonResponse(GlobalVar.RspSuccess, '查询结果为空')
            lUser = GetCommonDlList(lUser)
            return JsonResponse(lUser)
        except:
            return JsonResponse(GlobalVar.RspFail,'出现异常')

    return JsonResponse(GlobalVar.RspFail,'方法不支持')
Пример #25
0
def get_js_wx_config(url=''):
    #try:
    debug('get_js_wx_config:starut handle the url-',url)
    
    #timestamp需要去掉小数点,取十位整数就可以了,到秒级
    timestamp = str(mktime(datetime.now().timetuple()))[0:10]
    nonceStr = get_random_string(16,'0123456789abcdefghijklmnopqrstuvwxyz')
    
    debug('get_js_wx_config:nonceStr',timestamp,'nonceStr',nonceStr)
    
    #debug(jsapi_ticket,timestamp,url,tempStr)
    """
    对所有待签名参数按照字段名的ASCII 
    码从小到大排序(字典序)后,使用URL键值对的格式
    (即key1=value1&key2=value2…)拼接成字符串string1
    对string1进行sha1签名,得到signature:  
    这里需要注意的是所有参数名均为小写字符
    """
    ticket = get_jsapi_ticket()
    tempList = sorted(["jsapi_ticket="+ticket,"noncestr="+nonceStr,"timestamp="+timestamp,"url="+url])
    tempStr = tempList[0]+"&"+tempList[1]+"&"+tempList[2]+"&"+tempList[3]
    #debug(jsapi_ticket,timestamp,url,tempStr)
    #debug("signature",sha1(tempStr).hexdigest())
    return {
            #'jsapi_ticket':jsapi_ticket,
            'debug':'false',
            'appId':appid,
            'timestamp':timestamp,
            'nonceStr':nonceStr,
            'signature':sha1(tempStr).hexdigest(),
            'jsApiList': ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ',\
                          'onMenuShareWeibo','onMenuShareQZone','startRecord','stopRecord',\
                          'onVoiceRecordEnd','playVoice','pauseVoice','stopVoice','onVoicePlayEnd',\
                          'uploadVoice','downloadVoice','chooseImage','previewImage','uploadImage',\
                          'downloadImage','translateVoice','getNetworkType','openLocation','getLocation',\
                          'hideOptionMenu','showOptionMenu','hideMenuItems','showMenuItems',\
                          'hideAllNonBaseMenuItem','showAllNonBaseMenuItem','closeWindow','scanQRCode',\
                          'chooseWXPay','openProductSpecificView','addCard','chooseCard','openCard']
        }
    """
Пример #26
0
def getFriends(username):
	#Token刷新,如果获取失败,则返回
	result,info = getToken()
	if not result:
		return False,info

	backdata = ''

	try:
		# 添加朋友的json字段
		postStr = '{}'
		conn = httplib.HTTPSConnection(host)
		debug('func_im.py->getFriends->postStr:', postStr)
		conn.request('GET', url + '/users/' + username + '/contacts/users', postStr, headers)
		"""
	   {
		  "action" : "get",
		  "application" : "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
		  "params" : { },
		  "uri" : "https://a1.easemob.com/easemob-demo/chatdemoui/users/v3y0kf9arx/contacts/users",
		  "entities" : [ ],
		  "data" : [ "88888" ],
		  "timestamp" : 1409737366071,
		  "duration" : 45,
		  "organization" : "easemob-demo",
		  "applicationName" : "chatdemoui"
		}
		"""
		response = conn.getresponse()
		backdata = response.read(5000)
		if response.status >= 400:
			debug('func_im.py->getFriends->error:',response.status)
			return False,backdata
		else:
			_dict = JsonRequest(backdata)
			data = _dict.get('data',[])
			return True,data
	except:
		print('func_im.py->getFriends->except:', backdata)
		return False, '获取好友列表异常'
Пример #27
0
def getVerifyCode(pPhoneNumber):
    #【场景1】用户存在,生成验证码用于重置密码或者其他授权行为
    try:
        
        debug('func_user.py->getVerifyCode',1,pPhoneNumber)
        lUser = User.objects.get(PhoneNumber=pPhoneNumber)      
        #怀疑此处异常  
        #debug('getVerifyCode',2,lUser.PhoneNumber)
        
        return writeVerifyCode(lUser)
        
    #【场景2】用户不存在,直接生成用户,并分配验证码
    except User.DoesNotExist:
        debug('func_user->getVerifyCode->new User by VerifyCode')
        try:
            lUser = User(
                PhoneNumber = pPhoneNumber,
                Password = "******",
                Role = "注册中",
                hxActivieFlag=False)
            lUser.save()
            return writeVerifyCode(lUser)
        except Exception,ex:
            debug('func_user.py->getVerifyCode->except',ex)
            return False,'验证码获取异常'
Пример #28
0
def managerRefreshToken(request):
    result,loginUser = LoginStatus(ltoken=get_token(request))
    if not result:
        infor = loginUser
        return JsonResponse(GlobalVar.RspOffLine,infor)
    
    if not (u'管理员' in loginUser.Role):
        return JsonResponse(GlobalVar.RspFail,'需要管理员权限')

    try:
        if request.method == 'GET':
            access_token = get_access_token(True)
            debug('views_weixin.py->managerRefreshToken->access_token:',access_token)
            if access_token is None or 'except' in access_token or access_token == '':
                return JsonResponse(GlobalVar.RspFail,'Token刷新失败,请重试')
            else:
                return JsonResponse(GlobalVar.RspSuccess,access_token)

        else:
            return JsonResponse(GlobalVar.RspFail,'不支持GET以外的方法')
    except:
        return JsonResponse(GlobalVar.RspFail,'发生异常')
Пример #29
0
def wxRelease(request):
    #【1】如果方法是Post,提交验证码和电话号码
    if request.method == 'POST': 
        wxLogin = JsonRequest(request.body)
        
        try:
            #【1】使用验证码登录
            result1,info1,lUser = loginBest(GlobalVar.LoginWeiXinRelease,wxLogin)
            #身份校验,验证码比对不通过直接返回,包括用户不存在场景
            if not result1:
                return JsonResponse(GlobalVar.RspFail,info1)
            
            #【2】验证登录通过之后,根据返回的用户释放微信绑定
            #lUser=User.objects.get(PhoneNumber=pPhoneNumber)
            rusult2,infor2 = lUser.wxRelease()
            debug('wxRelease',rusult2,infor2)
            #依据电话号码来查找对应的csrfToken
            pPhonNumber = wxLogin.get('PhoneNumber','')
            lUserToken = UserToken.objects.filter(idUser__PhoneNumber=pPhonNumber)            
            #解除绑定之后,还需要将csrfToken清除下线
            if lUserToken.count() > 0:
                lUserToken.delete()
                
                
            if rusult2:
                return JsonResponse(GlobalVar.RspSuccess,infor2)
            else:
                return JsonResponse(GlobalVar.RspFail,infor2)
            
        #【2】其他异常
        except:
            return JsonResponse(GlobalVar.RspFail,'解绑异常')
            
        
    #微信采用GET方法跳转
    elif request.method == 'GET':
        return JsonResponse(GlobalVar.RspFail,'不支持操作')
    else:
        return JsonResponse(GlobalVar.RspFail,'不支持操作')
Пример #30
0
def managerCreateWeixinMenu(request):
    result,loginUser = LoginStatus(ltoken=get_token(request))
    if not result:
        infor = loginUser
        return JsonResponse(GlobalVar.RspOffLine,infor)
    
    if not (u'管理员' in loginUser.Role):
        return JsonResponse(GlobalVar.RspFail,'需要管理员权限')
    
    if request.method == 'POST':
        #如果是Json格式的菜单,解析出来
        _strReq = request.body
        result,msg = False,''
        if len(_strReq) == 0:
            debug('views_weixin.py->managerCreateWeixinMenu->mod:','create without json para') 
            result,msg = creat_menu()
        else:
            debug('views_weixin.py->managerCreateWeixinMenu->mod:','create with json para') 
            result,msg = creat_menu(_strReq)
            
        if result:
            return JsonResponse(GlobalVar.RspSuccess,msg)
        else:
            return JsonResponse(GlobalVar.RspFail,msg)
    elif request.method == 'GET':
        type = request.GET.get('type','')
        #删除所有
        if type == 'delete':
            result,msg = delete_menu()
            if result:
                return JsonResponse(GlobalVar.RspSuccess,msg)
            else:
                return JsonResponse(GlobalVar.RspFail,msg)
        else:
            return JsonResponse(GlobalVar.RspSuccess,'该方法未定义')
    else:
        return JsonResponse(GlobalVar.RspSuccess,'Other Method is building')