Explorar el Código

完善通过亚马逊授权码连接账号接口

locky hace 1 año
padre
commit
6382be69ef
Se han modificado 1 ficheros con 21 adiciones y 21 borrados
  1. 21 21
      Controller/alexa/AlexaController.py

+ 21 - 21
Controller/alexa/AlexaController.py

@@ -58,58 +58,58 @@ class AppToAppView(View):
         if not amazon_authorization_code:
             return response.json(444)
 
-        # 获取亚马逊访问令牌
-        url = 'https://api.amazon.com/auth/o2/token'
-        base_uri = 'https://smart.loocam2.com'
+        # 获取亚马逊访问令牌,https://developer.amazon.com/zh/docs/login-with-amazon/authorization-code-grant.html#access-token-request
+        amazon_base_uri = 'https://api.amazon.com'
+        url = amazon_base_uri + '/auth/o2/token'
+        redirect_uri = 'https://smart.loocam2.com'
         data = {
             'grant_type': 'authorization_code',
             'code': amazon_authorization_code,
             'client_id': 'amzn1.application-oa2-client.98a01914518743e481d51115144dafb0',
             'client_secret': '43353cac67670aefd64a5f95309754ddd6bcfe8a087cc3cad1348b626f64b132',
-            'redirect_uri': base_uri
+            'redirect_uri': redirect_uri
         }
         try:
             r = requests.post(url=url, data=data, timeout=10)
-            if r.status_code != 200:
-                return response.json(10, '{}请求响应状态码错误:{}'.format(url, r.status_code))
+            assert r.status_code == 200
             res_data = eval(r.content)
-            print(res_data)
-            if res_data.get('access_token'):
-                amazon_access_token = res_data['access_token']
-            else:
-                return response.json(10, '{}请求响应缺失令牌:{}'.format(url, res_data))
+            assert res_data.get('access_token')
+            amazon_access_token = res_data['access_token']
 
             # 获取用户授权码
-            url = base_uri + '/appToApp/oa2/getAuthCode'
+            url = redirect_uri + '/appToApp/oa2/getAuthCode'
             params = {
                 'user_id': user_id
             }
             r = requests.get(url=url, params=params, timeout=10)
-            if r.status_code != 200:
-                return response.json(10, '{}请求响应状态码错误:{}'.format(url, r.status_code))
+            assert r.status_code == 200
             res = eval(r.content)
             user_authorization_code = res['res']['user_authorization_code']
             data = {
                 "stage": "development",
                 "accountLinkRequest": {
-                    "redirectUri": base_uri,
+                    "redirectUri": redirect_uri,
                     "authCode": user_authorization_code,
                     "type": "AUTH_CODE"
                 }
             }
-            # 请求连接skill
+
+            # 请求连接skill,https://developer.amazon.com/en-US/docs/alexa/smapi/skill-enablement.html
             headers = {
                 'Content-Type': 'application/json',
                 'Authorization': "Bearer {}".format(amazon_access_token)
             }
+            alexa_api_endpoint_list = ['api.amazonalexa.com', 'api.eu.amazonalexa.com', 'api.fe.amazonalexa.com']
             skill_id = 'amzn1.ask.skill.ff5a5074-7ec7-442b-979b-cb57095f7a94'
-            url = 'https://api.amazonalexa.com/v1/users/~current/skills/{}/enablement'.format(skill_id)
-            get_token_res = requests.post(headers=headers, url=url, json=data, timeout=30)
-            res_data = eval(get_token_res.content)
-            print(res_data)
+            for alexa_api_endpoint in alexa_api_endpoint_list:
+                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:
+                    res_data = eval(r.content)
+                    return response.json(0, res_data)
             return response.json(0)
         except Exception as e:
-            print('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_skill_page_url(response):