Files
test/sf_wxwork_approval/controllers/controllers.py
2023-11-21 16:10:05 +08:00

55 lines
2.1 KiB
Python

# -*- 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')