Python 微信access_token url_link 获取

Python 微信access_token url_link 获取

封装获取类


ERROR_MAP = {
    40002: '暂无生成权限',
    40013: '生成权限被封禁',
    85079: '小程序未发布',
    40165: '参数path填写错误',
    40212: '参数query填写错误',
    85401: '参数expire_time填写错误,时间间隔大于1分钟且小于1年',
    44990: '生成URL Link频率过快(超过100次/秒)',
    85400: '长期有效URL Link达到生成上限10万',
    45009: '单天生成URL Link数量超过上限50万'
}

class WxUtils(object):
    def __init__(self, appid, secret):
        self.app_id = appid
        self.secret = secret
        self.cache_name = 'access_token'
        self.base_url = 'https://api.weixin.qq.com'

    def _request(self, url, method='post', **kwargs):
        try:
            response = requests.request(method=method, url=url, timeout=5, **kwargs)
        except (requests.ConnectionError, requests.Timeout):
            raise exceptions.ValidationError('连接微信超时')
        except Exception as e:
            raise exceptions.ValidationError('未知错误,请联系管理员')

        response_data = response.json()

        return response_data

    def _url(self, url):
        return urljoin(self.base_url, url)

    def request_access_token(self, *args, **kwargs):
        """
        获取access_token 设置过期时间为2小时
        @return:
        @rtype:
        """
        url = '/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.format(
            self.app_id, self.secret)

        response_data = self._request(url=self._url(url), method='post', **kwargs)

        if not response_data.get('access_token'):
            raise exceptions.ValidationError("获取access_token失败")

        cache.set(self.cache_name, response_data.get('access_token'), 60 * 60 * 2)

        return self.get_access_token()

    def get_access_token(self):
        """
        获取 access_token 如果缓存存在就从缓存取
        @return:
        @rtype:
        """
        if not cache.get(self.cache_name):
            return self.request_access_token()
        return cache.get(self.cache_name)

    def get_url_link(self, **kwargs):
        """
        获取 h5转小程序的 url_link
        @param kwargs:
        @type kwargs:
        @return:
        @rtype:
        """

        url = '/wxa/generate_urllink?access_token={}'.format(self.get_access_token())

        response_data = self._request(url=self._url(url), **kwargs)

        if response_data.get('errcode'):
            raise exceptions.ValidationError(
                ERROR_MAP.get(response_data.get('errcode'), response_data.get('errmsg')))

        return response_data
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tuple-Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值