wxapi/lib/allFunction.py
2020-02-17 23:55:12 +08:00

214 lines
6.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 引入哈希加密的库
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']