Просмотр исходного кода

添加client配置,请求更新token区分skill

locky 4 лет назад
Родитель
Сommit
34ef321b05
2 измененных файлов с 32 добавлено и 11 удалено
  1. 11 0
      azoauth/config.py
  2. 21 11
      controller/deviceStatus.py

+ 11 - 0
azoauth/config.py

@@ -34,3 +34,14 @@ ALEXA_EVENT_API = {
     # 欧洲
     'EU': 'https://api.eu.amazonalexa.com/v3/events'
 }
+
+CLIENT_CONFIG = {
+    'zosi smart': {
+        'client_id': 'amzn1.application-oa2-client.efb07b51dd444f848b6f0598635da3cc',
+        'client_secret': '8a49390ebe362bfee153be87587f5673d0c1d8aeb6bc1ef736fda6c9d5d81c8f',
+    },
+    'Anlapus': {
+        'client_id': 'amzn1.application-oa2-client.91ffd3a5dd194aa8927a6b1a10a7ccd3',
+        'client_secret': '09ce6565935c24eff199882d8ee93ff2854ae75cad6ffc0631eca5574784e2fe',
+    }
+}

+ 21 - 11
controller/deviceStatus.py

@@ -71,7 +71,7 @@ class deviceStatus(TemplateView):
 
         logger = logging.getLogger('django')
         logger.info('--------认证登录,地区: {}, skill: {}--------'.format(alexa_region, skill_name))
-        
+
         alexAuth = AlexaAuthModel.objects.filter(token=token)
         nowTime = int(time.time())
         if not alexAuth.exists():
@@ -166,7 +166,7 @@ class deviceStatus(TemplateView):
         api_uri = ALEXA_EVENT_API[alexa_region]
         messageId = str(uuid.uuid4()).strip()
         bearer_access_token = "Bearer {access_token}".format(access_token=access_token)
-        headers =  {"content-type": "application/json", "Authorization": bearer_access_token}
+        headers = {"content-type": "application/json", "Authorization": bearer_access_token}
         payload_json = {
             "event": {
                 "header": {
@@ -236,11 +236,12 @@ class deviceStatus(TemplateView):
 
             # 获取alexa授权信息
             alexAuth = AlexaAuthModel.objects.filter(userID=userID).\
-                values('expiresTime', 'access_token', 'refresh_token', 'alexa_region')
+                values('expiresTime', 'access_token', 'refresh_token', 'alexa_region', 'skill_name')
             if not alexAuth.exists():
                 logger.info('UID为 {} 的用户不存在'.format(UID))
                 return JsonResponse({'code': 102, 'msg': 'not found user'})
-            
+
+            skill_name = alexAuth[0]['skill_name']
             expiresTime = alexAuth[0]['expiresTime']
             access_token = alexAuth[0]['access_token']
             refresh_token = alexAuth[0]['refresh_token']
@@ -253,7 +254,7 @@ class deviceStatus(TemplateView):
             now_time = int(time.time())
             if now_time > expiresTime:
                 logger.info(refresh_token)
-                res = self.getRefreshToken(refresh_token)
+                res = self.getRefreshToken(refresh_token, skill_name)
                 logger.info(res)
                 if 'error' not in res:
                     alexAuth.update(
@@ -372,11 +373,12 @@ class deviceStatus(TemplateView):
 
         try:
             alexAuth = AlexaAuthModel.objects.filter(userID=userID).\
-                values('expiresTime', 'refresh_token', 'access_token', 'alexa_region')
+                values('expiresTime', 'refresh_token', 'access_token', 'alexa_region', 'skill_name')
             if not alexAuth.exists():
                 logger.info('UID为 {} 的用户不存在'.format(UID))
                 return JsonResponse({'code': 102, 'msg': 'not found user'})
 
+            skill_name = alexAuth[0]['skill_name']
             expiresTime = alexAuth[0]['expiresTime']
             refresh_token = alexAuth[0]['refresh_token']
             access_token = alexAuth[0]['access_token']
@@ -387,7 +389,7 @@ class deviceStatus(TemplateView):
 
             now_time = int(time.time())
             if now_time > expiresTime:
-                res = self.getRefreshToken(refresh_token)
+                res = self.getRefreshToken(refresh_token, skill_name)
                 if 'error' not in res:
                     alexAuth.update(
                         access_token=res['access_token'],
@@ -440,19 +442,27 @@ class deviceStatus(TemplateView):
             logger.info('--------删除设备异常--------: {}'.format(repr(e)))
 
 
-    def getRefreshToken(self,refresh_token):
+    def getRefreshToken(self, refresh_token, skill_name):
+        # 请求更新token
+        logger = logging.getLogger('django')
+        logger.info('--------{}请求更新token--------'.format(skill_name))
+
+        if skill_name not in CLIENT_CONFIG.keys():
+            logger.info('--------技能名称错误,skill_name: {}--------'.format(skill_name))
+            return JsonResponse({'code': 111, 'msg': 'skill_name error'})
+
         payload = {
             'grant_type': 'refresh_token',
             'refresh_token': refresh_token,
-            'client_id': 'amzn1.application-oa2-client.efb07b51dd444f848b6f0598635da3cc',
-            'client_secret': '8a49390ebe362bfee153be87587f5673d0c1d8aeb6bc1ef736fda6c9d5d81c8f',
+            'client_id': CLIENT_CONFIG[skill_name]['client_id'],
+            'client_secret': CLIENT_CONFIG[skill_name]['client_secret'],
         }
         auth_request_url = 'https://api.amazon.com/auth/o2/token'
         headers = {
             'content-type': "application/x-www-form-urlencoded",
             'cache-control': "no-cache"
         }
-        res = requests.post(auth_request_url, payload,headers)
+        res = requests.post(auth_request_url, payload, headers)
         request_json = res.json()
         return request_json