فهرست منبع

微信小程序表保存手机号,新增小程序查询设备列表接口

locky 6 ماه پیش
والد
کامیت
9e291d1d2f
2فایلهای تغییر یافته به همراه43 افزوده شده و 9 حذف شده
  1. 42 9
      Controller/WeChatMiniProgram/UserController.py
  2. 1 0
      Model/models.py

+ 42 - 9
Controller/WeChatMiniProgram/UserController.py

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

+ 1 - 0
Model/models.py

@@ -5658,6 +5658,7 @@ class WeChatMiniProgram(models.Model):
     openid = models.CharField(default='', max_length=32, verbose_name='用户唯一标识')
     unionid = models.CharField(default='', max_length=32, verbose_name='用户在开放平台的唯一标识符')
     session_key = models.CharField(default='', max_length=150, verbose_name='会话密钥')
+    phone_number = models.CharField(default='', max_length=32, verbose_name='手机号')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     updated_time = models.IntegerField(default=0, verbose_name='更新时间')