# @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 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) model_id = request_dict.get('model_id', None) if not all([uid, model_id]): return response.json(444) try: 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'] 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)))