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')
app_id = "xxxxx"
app_secret = "xxxxxxx"
app = Flask(__name__)
@app.route('/')
def hello_world():
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,
'secret': app_secret,
}).json()
print("微信返回结果: " + str(res))
access_token = res.get('access_token')
print("access_token: " + str(access_token))
redis_client.set("access_token", access_token, 3600)
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 ''
@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
@app.route('/getOpenId')
def get_openid():
openid = redis_client.get("openid")
if openid is not None:
redis_client.delete("openid")
return openid
else:
return ''
@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,
'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)
@robot.subscribe
def subscribe(message):
openid = message.FromUserName
redis_client.set("openid", openid, 3600)
print("openid" + openid)
return '欢迎关注本公众号!'
@robot.unsubscribe
def unsubscribe(message):
openid = message.FromUserName
redis_client.delete("openid")
return '取消关注成功!'
app.add_url_rule(rule='/robot/',
endpoint='werobot',
view_func=make_view(robot),
methods=['GET', 'POST'])
app.run(host='0.0.0.0', port=5000, debug=False, threaded=True)