123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # @Author : Rocky
- # @File : DeviceController.py.py
- # @Time : 2025/2/19 11:22
- import requests
- from django.views.generic.base import View
- from Controller.WeChatMiniProgram.CommonController import CommonObj
- from Object.Enums.WeChatEnum import WeChatMiniProgramAPIEnum, WeChatMiniProgramConfigEnum
- from Object.RedisObject import RedisObject
- from Object.ResponseObject import ResponseObject
- class DeviceView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- lang = request_dict.get('lang', 'cn')
- response = ResponseObject(lang)
- if operation == 'getSnTicket':
- return self.get_sn_ticket(request_dict, response)
- @staticmethod
- def get_sn_ticket(request_dict, response):
- """
- 获取设备票据
- https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/hardware-device/getSnTicket.html
- @param request_dict:
- @param response:
- @return: res
- """
- uid = request_dict.get('uid', None)
- device_type = request_dict.get('device_type', None)
- if not all([uid, device_type]):
- return response.json(444)
- try:
- # 根据设备型号确定model_id
- model_id = WeChatMiniProgramConfigEnum.ModelIdDict.value['device_type']
- # 从缓存中获取票据
- redis_obj = RedisObject()
- sn_ticket_key = WeChatMiniProgramConfigEnum.SnTicketKey.value
- sn_ticket = redis_obj.get_data(sn_ticket_key)
- if sn_ticket:
- res = {
- 'sn_ticket': sn_ticket
- }
- return response.json(0, res)
- access_token = CommonObj.get_access_token()
- url = WeChatMiniProgramAPIEnum.getSnTicketAPI.value.format(access_token)
- data = {
- 'sn': uid,
- 'model_id': model_id
- }
- r = requests.post(url=url, json=data, timeout=5)
- result = eval(r.content)
- errcode = result.get('errcode')
- assert errcode == 0
- sn_ticket = result['sn_ticket']
- # 保存到Redis,五分钟有效
- redis_obj.set_ex_data(key=sn_ticket_key, val=sn_ticket, expire=60*5)
- res = {
- 'sn_ticket': sn_ticket
- }
- return response.json(0, res)
- except Exception as e:
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|