优化工单模块,增加企微模块
This commit is contained in:
89
sg_wechat_enterprise/models/we_tools.py
Normal file
89
sg_wechat_enterprise/models/we_tools.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from odoo import api, models, exceptions
|
||||
from odoo.http import request
|
||||
import logging
|
||||
import hashlib
|
||||
import base64
|
||||
import time
|
||||
import requests
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class WechatEnterpriseTools(models.Model):
|
||||
"""
|
||||
微信企业号工具类
|
||||
"""
|
||||
_name = 'we.tools'
|
||||
_description = '微信企业号工具类'
|
||||
|
||||
def get_media(self, media_id):
|
||||
"""
|
||||
通过media_id 获取媒体文件
|
||||
:param media_id: media id
|
||||
:return:
|
||||
"""
|
||||
wechat = self.env['we.config'].sudo().get_wechat()
|
||||
try:
|
||||
media = wechat.media.download(media_id=media_id)
|
||||
return {
|
||||
'errcode': 0,
|
||||
'errmsg': 'ok',
|
||||
'media': media.content
|
||||
}
|
||||
except Exception as ex:
|
||||
_logger.info(u'get media fail, message: {str(ex)}.')
|
||||
return {
|
||||
'errcode': 30001,
|
||||
'errmsg': str(ex)
|
||||
}
|
||||
|
||||
def get_jsapi_ticket(self):
|
||||
"""
|
||||
获取jsapi_ticket
|
||||
:return:
|
||||
"""
|
||||
if request.session.get('ticket') and request.session.get('ticket_time') \
|
||||
and int(time.time()) - request.session['ticket_time'] <= 7000:
|
||||
return {
|
||||
'errcode': 0,
|
||||
'errmsg': 'ok',
|
||||
'ticket': request.session['ticket']
|
||||
}
|
||||
wechat = self.env['we.config'].sudo().get_wechat()
|
||||
get_token = wechat.fetch_access_token()
|
||||
if get_token['errcode'] == 0 and get_token['errmsg'] == 'ok':
|
||||
access_token = get_token['access_token']
|
||||
url = u'https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={access_token}'
|
||||
response = requests.get(url).json()
|
||||
if response['errcode'] == 0 and response['errmsg'] == 'ok':
|
||||
request.session['ticket'] = response['ticket']
|
||||
request.session['ticket_time'] = int(time.time())
|
||||
return response
|
||||
return {
|
||||
"errcode": 10002,
|
||||
"errmsg": "get ticket fail."
|
||||
}
|
||||
|
||||
def check_message_signature(self, message_list, msg_signature):
|
||||
"""
|
||||
校验消息的正确性
|
||||
:param message_list: 消息列表 (list: token, timestamp, nonce, echo_string)
|
||||
:param msg_signature: 签名
|
||||
:return: true or false
|
||||
"""
|
||||
_logger.info(u'check message signature.')
|
||||
message_list.sort()
|
||||
message_str = "".join(message_list)
|
||||
sha1_message = hashlib.sha1(str(message_str).encode('utf-8')).hexdigest()
|
||||
if sha1_message == msg_signature:
|
||||
return True
|
||||
return False
|
||||
|
||||
def decode_echo_str(self, echo_str):
|
||||
"""
|
||||
解密echo string 得到明文内容
|
||||
:param echo_str: 加密字符串
|
||||
:return: message
|
||||
"""
|
||||
_logger.info(u'decode echo string.')
|
||||
base64_str = base64.b64decode(echo_str)
|
||||
Reference in New Issue
Block a user