# -*- coding: utf-8 -*- import logging import requests from odoo import http from odoo.http import request _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')