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