AlexaController.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # @Author : Rocky
  2. # @File : AlexaController.py
  3. # @Time : 2023/12/25 10:46
  4. from django.views import View
  5. from Object.ResponseObject import ResponseObject
  6. from Object.TokenObject import TokenObject
  7. class AppToAppView(View):
  8. def get(self, request, *args, **kwargs):
  9. request.encoding = 'utf-8'
  10. operation = kwargs.get('operation')
  11. return self.validation(request.GET, operation, request)
  12. def post(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. operation = kwargs.get('operation')
  15. return self.validation(request.POST, operation, request)
  16. def validation(self, request_dict, operation, request):
  17. response = ResponseObject()
  18. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  19. if token.code != 0:
  20. return response.json(token.code)
  21. if operation == 'getAlexaAppURLAndLWAFallbackURL': # 获取Alexa App和LWA fallback URL
  22. return self.get_alexa_app_url_and_lwa_fallback_url(response)
  23. else:
  24. return response.json(414)
  25. @staticmethod
  26. def get_alexa_app_url_and_lwa_fallback_url(response):
  27. client_id = 'amzn1.application-oa2-client.98a01914518743e481d51115144dafb0'
  28. skill_stage = 'development' # 开发中: development, 已上线: live
  29. redirect_uri = 'https://pitangui.amazon.com/api/skill/link/M1GQ2T9YG53MFV'
  30. alexa_app_url = 'https://alexa.amazon.com/spa/skill-account-linking-consent?' \
  31. 'fragment=skill-account-linking-consent&client_id={}&' \
  32. 'scope=alexa::skills:account_linking&skill_stage={}&response_type=code&' \
  33. 'redirect_uri={}'.format(client_id, skill_stage, redirect_uri)
  34. lwa_fallback_url = 'https://www.amazon.com/ap/oa?' \
  35. 'client_id={}&scope=alexa::skills:account_linking&response_type=code&redirect_uri={}&'.\
  36. format(client_id, redirect_uri)
  37. res = {
  38. 'alexa_app_url': alexa_app_url,
  39. 'lwa_fallback_url': lwa_fallback_url
  40. }
  41. return response.json(0, res)