生成带有参数的二维码

生成带有参数的二维码

  1. 获取 access_token
import urllib2
import json

from flask import Flask

WECHAT_APPID = "wx8ec5ff22d5fb2211"
WECHAT_APPSECRET = "934608cbe213191cd9372c77bbcb3eb6"


class AccessToken(object):
    """
    专门用于外界要使用access_token的时候调用的类
    """

    __access_token = {
        "access_token": "",
        "update_time": time.time(),
        "expires_in": 7200
    }

    @classmethod
    def get_access_token(cls):
        # 1,判断access_token是否存,2.判断access_token是否过期,3,获取access_token的逻辑
        # if access_token不存在 or access_token 已过期:
        if not cls.__access_token.get("access_token") or \
                (time.time() - cls.__access_token.get("update_time") > cls.__access_token.get("expires_in")):
            # 去获取 access_token
            url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % (WECHAT_APPID, WECHAT_APPSECRET)
            # 发起请求获取到响应
            response = urllib2.urlopen(url)
            # 取到响应数据
            resp_data = response.read()
            # 将字符串转DICT
            resp_dict = json.loads(resp_data)

            if "errcode" in resp_dict:
                raise Exception(resp_dict.get("errmsg"))

            # 获取完成之后要进行保存
            cls.__access_token["access_token"] = resp_dict.get("access_token")
            cls.__access_token["update_time"] = time.time()
            cls.__access_token["expires_in"] = resp_dict.get("expires_in")

        return cls.__access_token.get("access_token")
  1. 获取 tickey
  2. 通过ticket换取二维码
app = Flask(__name__)


@app.route('/get_qrcode/<int:scene_id>')
def index(scene_id):

    # 获取 ticket
    """
    http请求方式: POST
    URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
    POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
    """
    url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + AccessToken.get_access_token()
    params = {"expire_seconds": 604800,
              "action_name": "QR_SCENE",
              "action_info": {"scene": {"scene_id": scene_id}}}

    # 发起请求
    response = urllib2.urlopen(url, data=json.dumps(params))
    # 获取响应的数据
    resp_data = response.read()
    # 转字典
    resp_dict = json.loads(resp_data)

    # 获取字典中的数据
    ticket = resp_dict.get("ticket")
    expire_seconds = resp_dict.get("expire_seconds")
    url = resp_dict.get("url")

    print ticket, expire_seconds, url
    # 通过ticket换取二维码

    return '<img src="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s">' % ticket
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值