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)
flask集成werobot
最新推荐文章于 2025-03-28 10:56:17 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Python3.8
Conda
Python
Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本
1726

被折叠的 条评论
为什么被折叠?



