소스 검색

保存连接状态,修改获取连接状态逻辑

locky 1 년 전
부모
커밋
843f9d6180
2개의 변경된 파일21개의 추가작업 그리고 7개의 파일을 삭제
  1. 20 7
      Controller/alexa/AlexaController.py
  2. 1 0
      Model/models.py

+ 20 - 7
Controller/alexa/AlexaController.py

@@ -132,7 +132,8 @@ class AppToAppView(View):
                 url = 'https://{}/v1/users/~current/skills/{}/enablement'.format(alexa_api_endpoint, skill_id)
                 r = requests.post(headers=headers, url=url, json=data, timeout=30)
                 if r.status_code == 201:
-                    AlexaOauth.objects.filter(user_id=user_id).update(alexa_api_endpoint=alexa_api_endpoint)
+                    AlexaOauth.objects.filter(user_id=user_id).\
+                        update(alexa_api_endpoint=alexa_api_endpoint, link_status=1)
                     res_data = eval(r.content)
                     return response.json(0, res_data)
             return response.json(0)
@@ -141,12 +142,24 @@ class AppToAppView(View):
 
     @classmethod
     def get_account_linking_and_skill_status(cls, user_id, response):
-        request_method = 'get'
+        # 未连接状态响应数据
+        res_data = {
+            'accountLink': {
+                'status': 'NOT_LINKED'
+            },
+            'status': 'DISABLED'
+        }
         try:
-            r = cls.refresh_access_token(user_id, request_method)
-            if r is None:
-                return response.json(173)
-            res_data = eval(r.content)
+            alexa_oauth_qs = AlexaOauth.objects.filter(user_id=user_id).values('link_status')
+            if alexa_oauth_qs.exists():
+                link_status = alexa_oauth_qs[0]['link_status']
+                # 连接状态为1,通过api获取状态
+                if link_status == 1:
+                    request_method = 'get'
+                    r = cls.refresh_access_token(user_id, request_method)
+                    if r is None:
+                        return response.json(173)
+                    res_data = eval(r.content)
             return response.json(0, res_data)
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -160,6 +173,7 @@ class AppToAppView(View):
                 return response.json(173)
             # 2xx响应状态码为成功
             assert str(r.status_code)[:1] == '2'
+            AlexaOauth.objects.filter(user_id=user_id).update(link_status=0)
             return response.json(0)
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -190,7 +204,6 @@ class AppToAppView(View):
 
         amazon_base_uri = 'https://api.amazon.com'
         url = amazon_base_uri + '/auth/o2/token'
-
         data = {
             'grant_type': 'refresh_token',
             'refresh_token': amazon_refresh_token,

+ 1 - 0
Model/models.py

@@ -4265,6 +4265,7 @@ class OpenScreenCampaign(models.Model):
 class AlexaOauth(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
     user_id = models.CharField(default='', max_length=32, verbose_name='用户id')
+    link_status = models.PositiveSmallIntegerField(default=0, verbose_name='连接状态')  # 0: 未连接,1: 已连接
     alexa_api_endpoint = models.CharField(default='', max_length=32, verbose_name='alexa_api节点')
     amazon_access_token = models.TextField(default='', verbose_name='亚马逊访问令牌')
     amazon_refresh_token = models.TextField(default='', verbose_name='亚马逊刷新令牌')