Files
2025-03-12 13:23:17 +08:00

108 lines
3.4 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", str(access_token) if access_token else "")
# 拼接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