python --公众号获取jsjdk(jsapi_ticket)

class JsJDK(APIView):
    '''
    JsJDk
    @params   url  -->   页面url;
    '''

    def get(self, request, *args, **kwargs) -> Response:
        '''
        jsapi_ticket
        @params   url  -->   页面url;
        '''
        url = self.request.GET.get('url')
        logger.warning(f'url为:【{url}】')
        data = {
            'nonceStr': ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(15)),  # 创建随机字符串,
            'jsapi_ticket': self._get_js_ticket(),
            'timestamp': int(time.time()),  # 创建一个时间戳
            'url': url
        }
        pinjie = '&'.join([f'{key.lower()}={data[key]}' for key in sorted(data)])  # 根据字符的ASCII值进行排序,拼接
        data['signature'] = hashlib.sha1(pinjie.encode('utf-8')).hexdigest()  # 对字符串进行sha1加密
        return Response(dict({'code': 0, 'msg': 'success'}, **data))

    def _get_access_token(self) -> str:
        '''
        access_token
        '''
        access_token = cache.get('access_token')
        if not access_token:
            result = requests.get(f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential'
                                  f'&appid={appid}&secret={secret}').json()
            logger.success(f'(缓存到期)重新获取access_token返回值:{result}')
            access_token = result.get('access_token')
            cache.set('access_token', str(access_token), timeout=7000)
        return access_token

    def _get_js_ticket(self) -> str:
        '''ticket'''
        access_token = self._get_access_token()
        ticket = cache.get(access_token)
        if not ticket:
            result = requests.get(
                f'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=jsapi').json()
            logger.debug(f'(缓存到期)重新获取js_ticket【{result}】')
            ticket = result.get('ticket')
            cache.set(access_token, ticket, timeout=7000)
        return ticket

猜你喜欢

转载自blog.csdn.net/weixin_44634704/article/details/131427886
今日推荐