Эх сурвалжийг харах

处理响应token,更新连接状态

locky 1 жил өмнө
parent
commit
6e6f4b1fad

+ 30 - 29
Controller/alexa/AlexaController.py

@@ -74,8 +74,8 @@ class AppToAppView(View):
         }
         }
         return response.json(0, res)
         return response.json(0, res)
 
 
-    @staticmethod
-    def account_link_with_amazon_authorization_code(user_id, request_dict, response):
+    @classmethod
+    def account_link_with_amazon_authorization_code(cls, user_id, request_dict, response):
         amazon_authorization_code = request_dict.get('amazon_authorization_code', None)
         amazon_authorization_code = request_dict.get('amazon_authorization_code', None)
         if not amazon_authorization_code:
         if not amazon_authorization_code:
             return response.json(444)
             return response.json(444)
@@ -111,18 +111,7 @@ class AppToAppView(View):
                                           amazon_refresh_token=amazon_refresh_token, create_time=now_time,
                                           amazon_refresh_token=amazon_refresh_token, create_time=now_time,
                                           update_time=now_time)
                                           update_time=now_time)
 
 
-            # 获取用户授权码
-            url = redirect_uri + '/appToApp/oa2/getAuthCode'
-            region_code = 'EU'
-            if CONFIG_INFO != CONFIG_EUR:
-                region_code = 'US'
-            params = {
-                'user_id': user_id,
-                'region_code': region_code
-            }
-            r = requests.get(url=url, params=params, timeout=10)
-            assert r.status_code == 200
-            res = eval(r.content)
+            res = cls.get_auth_code_and_token(user_id)
             user_authorization_code = res['res']['user_authorization_code']
             user_authorization_code = res['res']['user_authorization_code']
             data = {
             data = {
                 "stage": LOOCAM_SKILL_STAGE,
                 "stage": LOOCAM_SKILL_STAGE,
@@ -242,8 +231,8 @@ class AppToAppView(View):
             r = requests.delete(headers=headers, url=url, timeout=30)
             r = requests.delete(headers=headers, url=url, timeout=30)
         return r
         return r
 
 
-    @staticmethod
-    def get_alexa_app_url(user_id, request_dict, response):
+    @classmethod
+    def get_alexa_app_url(cls, user_id, request_dict, response):
         response_type = request_dict.get('response_type', None)
         response_type = request_dict.get('response_type', None)
         operate = request_dict.get('operate', None)
         operate = request_dict.get('operate', None)
         state = request_dict.get('state', None)
         state = request_dict.get('state', None)
@@ -257,26 +246,18 @@ class AppToAppView(View):
 
 
             if operate == 'accept':
             if operate == 'accept':
                 redirect_uri += '&source=app'
                 redirect_uri += '&source=app'
+                res = cls.get_auth_code_and_token(user_id)
                 if response_type == 'code':
                 if response_type == 'code':
                     # 获取用户授权码
                     # 获取用户授权码
-                    base_url = 'https://{}'.format(ALEXA_DOMAIN)
-                    url = base_url + '/appToApp/oa2/getAuthCode'
-                    region_code = 'EU'
-                    if CONFIG_INFO != CONFIG_EUR:
-                        region_code = 'US'
-                    params = {
-                        'user_id': user_id,
-                        'region_code': region_code
-                    }
-                    r = requests.get(url=url, params=params, timeout=10)
-                    assert r.status_code == 200
-                    res = eval(r.content)
                     user_authorization_code = res['res']['user_authorization_code']
                     user_authorization_code = res['res']['user_authorization_code']
                     redirect_uri += '&code={}'.format(user_authorization_code)
                     redirect_uri += '&code={}'.format(user_authorization_code)
                 elif response_type == 'token':
                 elif response_type == 'token':
                     # 获取令牌
                     # 获取令牌
-                    pass
+                    refresh_token = res['res']['refresh_token']
+                    redirect_uri += '&token={}&token_type=Bearer&expiration_time=3600'.format(refresh_token)
+                AlexaOauth.objects.filter(user_id=user_id).update(link_status=1)
             else:
             else:
+                AlexaOauth.objects.filter(user_id=user_id).update(link_status=0)
                 redirect_uri += '&error=access_denied&error_description=The%20user%20denied%20the%20request.%20'
                 redirect_uri += '&error=access_denied&error_description=The%20user%20denied%20the%20request.%20'
 
 
             res = {
             res = {
@@ -285,3 +266,23 @@ class AppToAppView(View):
             return response.json(0, res)
             return response.json(0, res)
         except Exception as e:
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def get_auth_code_and_token(user_id):
+        """
+        请求Alexa项目接口获取验证码和令牌
+        @param user_id: 用户id
+        @return:
+        """
+        base_url = 'https://{}'.format(ALEXA_DOMAIN)
+        url = base_url + '/appToApp/oa2/getAuthCodeAndToken'
+        region_code = 'EU'
+        if CONFIG_INFO != CONFIG_EUR:
+            region_code = 'US'
+        params = {
+            'user_id': user_id,
+            'region_code': region_code
+        }
+        r = requests.get(url=url, params=params, timeout=10)
+        assert r.status_code == 200
+        return eval(r.content)