214 lines
6.4 KiB
Python
214 lines
6.4 KiB
Python
# 引入哈希加密的库
|
||
import hashlib
|
||
# 引入XML信息处理
|
||
import receive
|
||
# 引入回复XML信息创建
|
||
import reply
|
||
# 引入md5校验
|
||
from hashlib import md5
|
||
# 引入数据库操作函数
|
||
from db import insertKeyword, delKeyword, getAllKeyword, fuzzySearch, addCount, updateKeyword, clearKeyword
|
||
# 引入json
|
||
import json
|
||
# 引入获取微信图文信息
|
||
from wxRequest import batchget_material
|
||
# 引入时间
|
||
import datetime
|
||
# 引入excel处理函数
|
||
from excel import upload_excel, loadData, insertToDB, getkeywordsList, createWorkBook
|
||
|
||
# 主处理逻辑函数-----------------------------------------------------------
|
||
|
||
# 处理acceptMsg方法为get的情况
|
||
def manageGet(request):
|
||
try:
|
||
# 获取参数字典
|
||
data = request.args.to_dict()
|
||
# 无参数拦截器
|
||
if len(data) == 0:
|
||
return ""
|
||
# 定义所有参数
|
||
signature = data['signature']
|
||
timestamp = data['timestamp']
|
||
nonce = data['nonce']
|
||
echostr = data['echostr']
|
||
token = "160594753" # 请按照公众平台官网\基本配置中信息填写
|
||
# 拼装成列表
|
||
list = [token, timestamp, nonce]
|
||
list.sort()
|
||
# 初始化sha1
|
||
sha1 = hashlib.sha1()
|
||
# 遍历列表更sha1
|
||
for item in list:
|
||
manageSha1(item, sha1)
|
||
hashcode = sha1.hexdigest()
|
||
# 打印自己签名和微信给的签名
|
||
print("handle/GET func: hashcode, signature: ", hashcode, signature)
|
||
# 一样的话说明签名成功,返回echostr
|
||
if hashcode == signature:
|
||
return echostr
|
||
else:
|
||
return ""
|
||
except Exception as Argument:
|
||
# 错误处理
|
||
return "error"
|
||
|
||
# 处理acceptMsg方法为post的情况
|
||
def managePost(request):
|
||
try:
|
||
# 获取XML文本
|
||
webData = request.data
|
||
# 控制台打印XML文本
|
||
print("Handle Post webdata is ", webData)
|
||
# 处理XML文本
|
||
recMsg = receive.getXMLData(webData)
|
||
# 判断信息类型
|
||
if isinstance(recMsg, receive.Msg):
|
||
toUser = recMsg.FromUserName
|
||
fromUser = recMsg.ToUserName
|
||
row_content = recMsg.Content
|
||
if recMsg.MsgType == 'text':
|
||
# 文本类型
|
||
# content = "自动回复功能开发测试中,敬请期待"
|
||
content = replySomething(row_content)
|
||
# 获取返回信息
|
||
replyMsg = reply.TextMsg(toUser, fromUser, content)
|
||
return replyMsg.send()
|
||
if recMsg.MsgType == 'image':
|
||
# 图片类型
|
||
mediaId = recMsg.MediaId
|
||
# 获取返回信息
|
||
replyMsg = reply.ImageMsg(toUser, fromUser, mediaId)
|
||
return replyMsg.send()
|
||
else:
|
||
return reply.Msg().send()
|
||
else:
|
||
print("暂且不处理")
|
||
return reply.Msg().send()
|
||
except Exception as Argment:
|
||
print(Argment)
|
||
return 'error'
|
||
|
||
# 处理图文信息获取
|
||
def manageMaterial(request):
|
||
# json化,应该能当dict用
|
||
try:
|
||
data_cache = json.loads(request.form['data'])
|
||
except Exception as e:
|
||
return {'errcode': 500, 'errmsg': '校验失败'}
|
||
data_cache.pop('sign')
|
||
return batchget_material(data_cache)
|
||
|
||
|
||
# 处理新增关键词
|
||
def manageInsertKeyword(request):
|
||
# json化,应该能当dict用
|
||
try:
|
||
data_cache = json.loads(request.form['data'])
|
||
except Exception as e:
|
||
return {'errcode': 300, 'errmsg': '校验失败'}
|
||
data_cache.pop('sign')
|
||
return insertKeyword(data_cache['item'])
|
||
|
||
|
||
# 处理删除关键词
|
||
def manageDelKeyword(request):
|
||
# json化,应该能当dict用
|
||
try:
|
||
data_cache = json.loads(request.form['data'])
|
||
except Exception as e:
|
||
return {'errcode': 300, 'errmsg': '校验失败'}
|
||
return delKeyword(data_cache['id'])
|
||
|
||
# 处理获取全部关键词
|
||
def manageGetKeyword(request):
|
||
return getAllKeyword()
|
||
|
||
# 处理更新关键词
|
||
def manageUpdateKeyword(request):
|
||
# json化,应该能当dict用
|
||
try:
|
||
data_cache = json.loads(request.form['data'])
|
||
except Exception as e:
|
||
return {'errcode': 600, 'errmsg': '校验失败'}
|
||
item = data_cache['item']
|
||
return updateKeyword(item['id'], item['keywords'], item['content'],datetime.datetime.now().strftime('%Y-%m-%d'),item['news'])
|
||
|
||
|
||
# 处理excel上传新增数据
|
||
def manageExcelAdd(request):
|
||
# 保存excel并获取新文件名
|
||
res_upload = upload_excel(request)
|
||
# 保存错误拦截
|
||
if res_upload['errcode'] != 200:
|
||
return res_upload
|
||
# 新文件名
|
||
filename = res_upload['filename']
|
||
# 获取文件内容
|
||
data_list = loadData(filename, 0)
|
||
# 插入数据
|
||
res_insert = insertToDB(data_list)
|
||
return res_insert
|
||
|
||
# 处理excel上传重置数据
|
||
def manageExcelReset(request):
|
||
# 保存excel并获取新文件名
|
||
res_upload = upload_excel(request)
|
||
# 保存错误拦截
|
||
if res_upload['errcode'] != 200:
|
||
return res_upload
|
||
# 新文件名
|
||
filename = res_upload['filename']
|
||
# 获取文件内容
|
||
data_list = loadData(filename, 0)
|
||
# 清空数据库
|
||
res_clear = clearKeyword()
|
||
# 清空错误拦截
|
||
if res_clear['errcode'] != 200:
|
||
return res_clear
|
||
# 插入数据
|
||
res_insert = insertToDB(data_list)
|
||
return res_insert
|
||
|
||
# 处理获取Excel
|
||
def manageExcelGet(request):
|
||
res_list = getkeywordsList()
|
||
if res_list['errcode'] != 200:
|
||
return res_list
|
||
data_list = res_list['data_list']
|
||
res_create = createWorkBook(data_list)
|
||
return res_create
|
||
|
||
# 工具函数---------------------------------------------------------------
|
||
|
||
# 更新sha1
|
||
def manageSha1(arg, sha1):
|
||
print(arg)
|
||
sha1.update(arg.encode('utf-8'))
|
||
|
||
# MD5 校验
|
||
def checkData(data):
|
||
d = data.copy()
|
||
try:
|
||
d.pop('sign')
|
||
except KeyError:
|
||
pass
|
||
d = str(d)
|
||
d = d.replace(' ', '')
|
||
md = md5()
|
||
md.update(d.encode('utf-8'))
|
||
r = md.hexdigest().upper()
|
||
return r == data['sign']
|
||
|
||
# 组织回复什么
|
||
def replySomething(content):
|
||
# 获取数据库中查询到的
|
||
search_content = fuzzySearch(content)
|
||
keywords_arr = search_content['arr']
|
||
# 没搜索到关键词进行拦截
|
||
if len(keywords_arr) == 0:
|
||
return '已经收到您发送的消息,感谢您的关注'
|
||
# 有关键词
|
||
keyword = keywords_arr[0]
|
||
addCount(str(keyword['_id']))
|
||
return keyword['content'] |