#获取openid信息
def get_wxuser(openid):
try:
_wxuser = WXUser.objects.get(openid_wx=openid)
return _wxuser
except:
return None
#微信openid登陆
def login_with_openid(_openid, request):
t1 = datetime.utcnow()
_wxuser = get_wxuser(_openid)
print "11111111111111",_wxuser
if _wxuser:
_mmcuser = _wxuser.mmcuser
else:
_mmcuser = None
print "search database: " + str(datetime.utcnow() - t1)
#无绑定信息,返回绑定错误,跳转绑定接口
if _mmcuser is None:
# no mmcuser, no binding, so ask user to input phonenumber
rsp = HttpResponseMessageWithData(4009, "the openid cann't binduser", "openid", _openid)
return rsp
#有绑定信息,直接登陆。
else:
mmcuser_dict = {
"user_id": _mmcuser.id,
"username": _mmcuser.username,
"email": _mmcuser.email,
"temperature_unit": _mmcuser.temperature_unit,
"create_time": _mmcuser.create_time,
"is_show": _mmcuser.iotprofile.is_show,
"is_manager": _mmcuser.is_manager,
"user_right": _mmcuser.user_right,
}
mmcuser_dict['openid'] = _openid
rsp = JsonResponse({
"message": "success",
"mmcuser": mmcuser_dict,
"result": 200,
"openid": _openid
})
rsp.set_cookie("openid", _openid)
print "requst session"
try:
request.session['openid'] = _openid
except Exception, e:
print e
print "request session wrong"
print "return resp: " + str(datetime.utcnow() - t1)
return rsp
#创建/刷新opendi
def create_openid(res):
#print "error is None"
_access_token = res['access_token']
_openid = res['openid']
_refresh_token = res['refresh_token']
print res['scope']
_user = WXUser.objects.filter(openid_wx=_openid).first()
if _user == None:
try:
_user = WXUser.objects.create(
openid_wx=_openid,
access_token=_access_token,
expired_time=int(res['expires_in']),
refresh_token=_refresh_token,
time_updated = datetime.now() #db thinks what i save is a utc time
)
dict = {
"result": 0,
"message": "success",
"openid": _user.openid_wx
}
except Exception, e:
print e
dict = {
"result": 1,
"message": "create user failed"
}
else:
print "update user"
try:
_user.access_token = _access_token
_user.expired_time = int(res['expires_in'])
_user.refresh_token = _refresh_token
_user.time_updated = datetime.now()
_user.save()
dict = {
"result": 0,
"message": "success",
"openid": _user.openid_wx
}
except Exception, e:
print e
dict = {
"result": 2,
"message": "save user failed"
}
return dict
#获取Openid并登陆
class GetOpenId(View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(GetOpenId, self).dispatch(*args, **kwargs)
def get(self,request):
_code = request.GET.get('code')
if _code is None:
return error_no_info_4001()
data = {'appid': appid, 'secret': appsecretkey, "code": _code, "grant_type": "authorization_code"}
_url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
#向微信请求openid
result = requests.get(_url, params=data)
#检查请求是否成功
_res, _error = process_response(result)
#创建openid信息
opendi_result = create_openid(_res)
#创建成功
if opendi_result["result"] == 0:
#通过openid登录
rsp = login_with_openid(_res['openid'], request)
return rsp
#创建失败
else:
return JsonResponse({"result":4003,"message":"create open_id invalide"})
#首次登陆绑定openid
class BindOpneid(View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(BindOpneid, self).dispatch(*args, **kwargs)
def post(self,request):
json_data = json.loads(request.body)
try:
_mmc_user = json_data["mmc_user"]
_mmc_pwd = json_data["mmc_pwd"]
_openid = json_data["openid"]
except Exception as e:
logger.error("获取用户信息出错")
return error_no_info_4001()
try:
user_info = authenticate(username=_mmc_user,password=_mmc_pwd)
print user_info.id
if user_info:
WXUser.objects.filter(openid_wx = _openid).update(mmcuser = user_info.id)
rsp = successinfo_200()
# rsp.set_cookie("openid", _openid)
request.session["openid"] = _openid
return rsp
else:
return wrong_info_4002()
except Exception as e:
logger.error("绑定微信账号出错")
return wrong_info_4002()