flask集成werobot

import hashlib
import time

from flask import Flask, request
from werobot import WeRoBot
from werobot.contrib.flask import make_view
import redis
import json
import requests

redis_client = redis.Redis(host='xx.xx.xx.xx', port=6379, password='xxx')  # 填写redis配置信息
app_id = "xxxxx"  # 公众号appId
app_secret = "xxxxxxx" # 公众号appSecret

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


@app.route('/getToken')
def get_token():
    token = redis_client.get("access_token")
    print("redis中的token: " + str(token))
    if token is None:
        url_token = 'https://api.weixin.qq.com/cgi-bin/token?'
        res = requests.get(url=url_token, params={
            "grant_type": 'client_credential',
            'appid': app_id,  # 这里填写上面获取到的appID
            'secret': app_secret,  # 这里填写上面获取到的appsecret
        }).json()
        print("微信返回结果: " + str(res))
        access_token = res.get('access_token')
        print("access_token: " + str(access_token))
        # 将token存入redis中
        redis_client.set("access_token", access_token, 3600)  # 过期时间为6分钟
        return access_token
    else:
        return token


@app.route('/removeToken')
def remove_token():
    token = redis_client.get("access_token")
    if token is not None:
        # 清除缓存
        redis_client.delete("access_token")
        return token
    else:
        return ''


# 2、获取登录二维码图片地址
@app.route('/getQrcodeUrl')
def get_qrcode_url():
    url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create'
    scene = {"scene_str": "test"}
    action_info = {"scene": scene}
    data = {
        "expire_seconds": "604800",
        "action_name": "QR_STR_SCENE",
        "action_info": action_info
    }
    res = requests.post(url=url, params={
        "access_token": get_token(),
        'scene_str': "test",  # 场景码,可自定义
    }, data=json.dumps(data)).json()
    img_url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + res.get('ticket')
    return img_url


# 3、用户扫码后并点击关注后调@robot.subscribe这个方法取出用户openId并存到缓存中
#     def subscribe(message):

# 4、从缓存中获取用户openid,前台使用定时器调这个方法,取到openid后再调用get_user_info获取用户信息
@app.route('/getOpenId')
def get_openid():
    openid = redis_client.get("openid")
    if openid is not None:
        # 清除缓存
        redis_client.delete("openid")
        return openid
    else:
        return ''


# 5、前台根据openid获取用户信息,并进行页面跳转
@app.route('/getUserInfo')
def get_user_info():
    openid = request.args.get('openid')
    url = 'https://api.weixin.qq.com/cgi-bin/user/info'
    res = requests.get(url=url, params={
        "access_token": get_token(),
        'openid': openid,  # openid,用户唯一标识
        'lang': 'zh_CN',
    }).json()
    return res


if __name__ == '__main__':
    token = get_token()
    robot = WeRoBot(token='EB9mIwv8oRCrHP', enable_session=True, APP_ID=app_id, APP_SECRET=app_secret)


    # 处理扫码事件
    @robot.scan
    def scan_qr_code(message):
        openid = message.FromUserName
        if openid is not None:
            # 说明之前已经关注过
            redis_client.set("openid", openid, 3600)  # 过期时间为6分钟
        # app.logger.debug(message)
        # return '扫码事件' 这里返回的会发送到公众号


    # 处理关注事件
    @robot.subscribe
    def subscribe(message):
        openid = message.FromUserName
        # 用户关注后,取出message中的openid,并将其保存到缓存中
        redis_client.set("openid", openid, 3600)  # 过期时间为6分钟
        print("openid" + openid)
        return '欢迎关注本公众号!'


    # 处理取消关注事件
    @robot.unsubscribe
    def unsubscribe(message):
        openid = message.FromUserName
        # 用户取消关注后,取出message中的openid,删除其对应缓存
        redis_client.delete("openid")
        return '取消关注成功!'


    app.add_url_rule(rule='/robot/',  # WeRoBot 的绑定地址
                     endpoint='werobot',  # Flask 的 endpoint
                     view_func=make_view(robot),
                     methods=['GET', 'POST'])
    # threaded=True : 配置支持多线程,默认为False
    app.run(host='0.0.0.0', port=5000, debug=False, threaded=True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值