Files
jikimo_sf/sf_wxwork_approval/controllers/controllers.py
2023-05-30 11:26:03 +08:00

70 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
import ast
import base64
import io
import json
import os
import random
import time
import re
from stl import mesh
from werkzeug import urls
import odoo
from odoo.exceptions import ValidationError
import requests
from odoo import http
from odoo.http import request, Response
from odoo.modules import get_resource_path
from odoo.tools.translate import _
import logging
_logger = logging.getLogger(__name__)
class WechatAuthController(http.Controller):
@http.route('/wechat_auth/callback', auth='public', type='http', csrf=False)
def wechat_auth_callback(self, **kwargs):
_logger.info('wechat_auth_callback=============:%s' % kwargs)
code = kwargs.get('code')
if not code:
return "缺少授权码 (code)"
# 获取 access_token 和 UserId
corp_id = 'wweaf7f1caab27a136'
secret = 'UA95oJsgeS6cZrq_9ijaG68n0MIWFVv1nyxVnHnqiQQ'
token_url = f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corp_id}&corpsecret={secret}'
token_response = requests.get(token_url).json()
access_token = token_response.get('access_token')
user_info_url = f'https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}'
user_info_response = requests.get(user_info_url).json()
user_id = user_info_response.get('UserId')
if not user_id:
return "获取用户信息失败"
# 根据 UserId 查询或创建 Odoo 用户
user = request.env['res.users'].sudo().search([('wechat_user_id', '=', user_id)])
if not user:
# 获取企业微信用户详细信息
user_detail_url = f'https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={user_id}'
user_detail_response = requests.get(user_detail_url).json()
# 创建 Odoo 用户
user_data = {
'login': user_detail_response.get('email'),
'name': user_detail_response.get('name'),
'email': user_detail_response.get('email'),
'wechat_user_id': user_id,
}
user = request.env['res.users'].sudo().create(user_data)
# 自动登录 Odoo 用户
request.session.authenticate(request.session.db, user.login, user.password_crypt)
return http.local_redirect('/web')