55 lines
2.1 KiB
Python
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')
|