108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import json
|
|
import requests
|
|
from odoo import api, fields, models, _
|
|
|
|
URL_ROOT = 'https://qyapi.weixin.qq.com'
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class WeComApi(models.Model):
|
|
_name = "wecom.api"
|
|
_description = "企业微信的请求api"
|
|
|
|
name = fields.Char("api名称", required=True)
|
|
category = fields.Selection(
|
|
[
|
|
("1", "基础"),
|
|
("2", "通讯录"),
|
|
("3", "客户联系"),
|
|
("4", "微信客服"),
|
|
("5", "身份验证"),
|
|
("6", "应用管理"),
|
|
("7", "消息推送"),
|
|
("8", "媒体素材"),
|
|
("9", "OA"),
|
|
("10", "效率工具"),
|
|
("11", "企业支付"),
|
|
("12", "企业互联"),
|
|
("13", "企业链,上下游"),
|
|
("14", "会话内容存档"),
|
|
("15", "电子发票"),
|
|
("16", "家校沟通"),
|
|
("17", "家校应用"),
|
|
("18", "政民沟通"),
|
|
],
|
|
string="请求分类",
|
|
default="1",
|
|
)
|
|
function = fields.Char("请求方法", required=True, readonly=True)
|
|
request_url = fields.Char("请求地址", required=True)
|
|
|
|
request_type = fields.Selection(
|
|
[("GET", "GET"), ("POST", "POST")],
|
|
string="请求类型",
|
|
required=True,
|
|
default="GET",
|
|
)
|
|
|
|
sequence = fields.Integer(default=0)
|
|
|
|
_sql_constraints = [
|
|
("function_uniq", "unique (function)", "请求方法唯一 !"),
|
|
]
|
|
|
|
def http_request_url(self, data, access_token=None):
|
|
"""
|
|
api请求方法
|
|
:param data: 请求数据
|
|
:param access_token: 密钥
|
|
:param app_name: 密钥的app名称
|
|
:return: 请求结果
|
|
"""
|
|
self.ensure_one()
|
|
request_url = self.request_url
|
|
# 替换ACCESS_TOKEN
|
|
if "ACCESS_TOKEN" in request_url:
|
|
request_url = request_url.replace("ACCESS_TOKEN", access_token)
|
|
# 拼接root组装url
|
|
url = URL_ROOT + request_url
|
|
# url = URL_ROOT + request_url + "&debug=1"
|
|
# 根据请求类型请求信息
|
|
if self.request_type == 'POST':
|
|
result = requests.post(url=url, data=json.dumps(data))
|
|
else:
|
|
result = requests.get(url=url, params=data)
|
|
return result
|
|
|
|
def function_get_access_token(self, data):
|
|
"""
|
|
获取密钥
|
|
:param data:
|
|
:return: access_token
|
|
"""
|
|
wecom_api = self.search([('function', '=', 'GET_ACCESS_TOKEN')], limit=1)
|
|
response_result = wecom_api.http_request_url(data)
|
|
if response_result.status_code != 200:
|
|
_logger.error('获取token异常,异常:{0}'.format(str(response_result.json())))
|
|
# 获取返回的信息
|
|
response = json.loads(response_result.content)
|
|
access_token = response.get("access_token", None)
|
|
return access_token
|
|
|
|
def function_http_request(self, function, data, access_token):
|
|
"""
|
|
根据方法获取到请求的参数和返回结果
|
|
:param function:
|
|
:param data:
|
|
:param access_token:
|
|
:return:
|
|
"""
|
|
wecom_api = self.search([('function', '=', function)], limit=1)
|
|
response = wecom_api.http_request_url(data, access_token)
|
|
# response = json.loads(response.content)
|
|
return response
|
|
|