|
@@ -10,7 +10,7 @@ import requests
|
|
|
from Ansjer.config import LOGGER
|
|
|
from django.views.generic.base import View
|
|
|
|
|
|
-from Model.models import WeChatMiniProgram
|
|
|
+from Model.models import WeChatMiniProgram, Device_User, Device_Info, DeviceNameLanguage
|
|
|
from Object.Enums.WeChatEnum import WeChatMiniProgramAPIEnum, WeChatMiniProgramConfigEnum
|
|
|
from Object.RedisObject import RedisObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
@@ -36,12 +36,14 @@ class UserView(View):
|
|
|
elif operation == 'userLogin':
|
|
|
return self.user_login(request_dict, response)
|
|
|
else:
|
|
|
- valid = self.check_session_key(request)
|
|
|
- if not valid:
|
|
|
+ user_id = self.check_session_key_and_get_user_id(request)
|
|
|
+ if not user_id:
|
|
|
return response.json(309)
|
|
|
+ if operation == 'deviceList':
|
|
|
+ return self.device_list(user_id, response)
|
|
|
|
|
|
@classmethod
|
|
|
- def check_session_key(cls, request):
|
|
|
+ def check_session_key_and_get_user_id(cls, request):
|
|
|
"""
|
|
|
校验 session_key 是否有效
|
|
|
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/checkSessionKey.html
|
|
@@ -52,7 +54,7 @@ class UserView(View):
|
|
|
if not login_status:
|
|
|
return False
|
|
|
wechat_mini_program_qs = WeChatMiniProgram.objects.filter(login_status=login_status). \
|
|
|
- values('openid', 'session_key')
|
|
|
+ values('openid', 'session_key', 'phone_number')
|
|
|
if not wechat_mini_program_qs.exists():
|
|
|
return False
|
|
|
openid = wechat_mini_program_qs[0]['openid']
|
|
@@ -69,7 +71,13 @@ class UserView(View):
|
|
|
result = eval(r.content)
|
|
|
errcode = result.get('errcode')
|
|
|
assert errcode == 0
|
|
|
- return True
|
|
|
+
|
|
|
+ # 根据手机号查询用户id
|
|
|
+ phone_number = wechat_mini_program_qs[0]['phone_number']
|
|
|
+ device_user_qs = Device_User.objects.filter(phone=phone_number).values('userID')
|
|
|
+ if not device_user_qs.exists():
|
|
|
+ return False
|
|
|
+ return device_user_qs[0]['userID']
|
|
|
except Exception as e:
|
|
|
return False
|
|
|
|
|
@@ -169,11 +177,11 @@ class UserView(View):
|
|
|
wechat_mini_program_qs = WeChatMiniProgram.objects.filter(openid=openid)
|
|
|
if wechat_mini_program_qs.exists():
|
|
|
wechat_mini_program_qs.update(
|
|
|
- login_status=login_status, session_key=session_key, updated_time=now_time
|
|
|
+ login_status=login_status, session_key=session_key, phone_number=phone_number, updated_time=now_time
|
|
|
)
|
|
|
else:
|
|
|
WeChatMiniProgram.objects.create(
|
|
|
- login_status=login_status, openid=openid, session_key=session_key,
|
|
|
+ login_status=login_status, openid=openid, session_key=session_key, phone_number=phone_number,
|
|
|
created_time=now_time, updated_time=now_time
|
|
|
)
|
|
|
res = {
|
|
@@ -205,7 +213,7 @@ class UserView(View):
|
|
|
def generate_signature(session_key):
|
|
|
"""
|
|
|
用户登录态签名,用session_key对空字符串签名得到的结果。即 signature = hmac_sha256(session_key, "")
|
|
|
- @param session_key:
|
|
|
+ @param session_key: 会话密钥
|
|
|
@return: signature
|
|
|
"""
|
|
|
# 将session_key和要签名的数据(这里是空字符串)转换为字节类型
|
|
@@ -216,3 +224,28 @@ class UserView(View):
|
|
|
# 获取十六进制格式的签名结果
|
|
|
signature = hmac_object.hexdigest()
|
|
|
return signature
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def device_list(user_id, response):
|
|
|
+ """
|
|
|
+ 查询设备列表
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param response:
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ img_url_1 = DeviceNameLanguage.objects.filter(name='智能摄像机 C520M').values('app_device_type__iconV2')[0]['app_device_type__iconV2']
|
|
|
+ img_url_2 = DeviceNameLanguage.objects.filter(name='智能摄像机 C518').values('app_device_type__iconV2')[0]['app_device_type__iconV2']
|
|
|
+ res = [
|
|
|
+ {
|
|
|
+ 'device_name': '智能摄像机520',
|
|
|
+ 'service_status': '服务使用中 2025-11-25',
|
|
|
+ 'img_url': img_url_1},
|
|
|
+ {
|
|
|
+ 'device_name': '智能摄像机518',
|
|
|
+ 'service_status': '服务到期',
|
|
|
+ 'img_url': img_url_2}
|
|
|
+ ]
|
|
|
+ return response.json(0, res)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|