Odoo微信网页授权、单点登录
时间:2022-08-06 20:36:02 | 来源:网站运营
时间:2022-08-06 20:36:02 来源:网站运营
本文讲解一下通过微信公众号,设置菜单,然后跳转到odoo页面的方法,以下是部门代码,仅供参考。
# -*- coding: utf-8 -*-from odoo
import http
from odoo.http
import request
from .handlers
import auto_reply, event_reply
import logging
_logger = logging.getLogger(__name__)
class WeiXinLogin(http.Controller):
def __init__(self):
param = request.env()[
'ir.config_parameter']
self.wx_appid = param.get_param(
'wx_appid')
or ''self.wx_AppSecret = param.get_param(
'wx_AppSecret')
or ''from ..rpc
import oa_client
oa_client.init_oa_client(self.wx_appid, self.wx_AppSecret)
@http.route(
'/wx/login', type=
'http', auth=
"none", methods=[
'GET',
'POST'], csrf=
False)
def wx_login(self, **kwargs):
res_code=self.get_code()
res_token=self.get_token(res_code)
res_check=self.check_token(res_token)
res_user=self.get_user(res_check)
openid=res_user[
'openid']
def send_url(self,url,params):
try:
res = request.get(url, params=params).json()
return res
except Exception, e:
http://_logger.info(
"获取参数错误:")
def get_code(self):
url=
'https://open.weixin.qq.com/connect/oauth2/authorize'params = {
'appid': self.wx_appid,
'secret': self.wx_AppSecret,
'response_type':
'code',
'scope':
'snsapi_base',
'#wechat_redirect':
''}
# 第一步获取codereturn self.send_url(url,params)
def get_token(self,res_code):
# 2.通过code换取网页授权access_tokenurl =
u'https://api.weixin.qq.com/sns/oauth2/access_token'params = {
'appid': self.wx_appid,
'secret': self.wx_AppSecret,
'code': res_code[
'code'],
'grant_type':
'authorization_code'}
return self.send_url(url,params)
def check_token(self,res_token):
#3.检验授权凭证(access_token)是否有效url=
'https://api.weixin.qq.com/sns/auth'params = {
'openid': res_token[
'openid'],
'access_token':res_token[
'access_token']
}
check_res = self.send_url(url,params)
if check_res[
'errcode']==0:
return res_token
else:
# 如果access_token超时,那就刷新url=
'https://api.weixin.qq.com/sns/oauth2/refresh_token?'params = {
'appid': self.wx_appid,
'grant_type':
'refresh_token',
'refresh_token':res_token[
'refresh_token']
}
return self.send_url(url, params)
def get_user(self,res_check):
url =
u'https://api.weixin.qq.com/sns/userinfo'params = {
'access_token': res_check[
"access_token"],
'openid': res_check[
"openid"],
}
# 4.拉取用户信息return self.send_url(url, params)