diff --git a/yuthon_wechat/models/res_users.py b/yuthon_wechat/models/res_users.py index 268d113f6..686778a6d 100644 --- a/yuthon_wechat/models/res_users.py +++ b/yuthon_wechat/models/res_users.py @@ -94,13 +94,15 @@ class ResUsers(models.Model): raise OAuthLogin("请正确设置微信登录验证的corpid agentid corpsecret!" ) corpid = client_ids[0] corpsecret = client_ids[2] - access_token = provider.scope + # 从 ir.config_parameter 缓存 access_token,避免写入 provider 记录触发 registry 重载 + ICP = self.env['ir.config_parameter'].sudo() + access_token = ICP.get_param('wechat.access_token', default='') code = params.get('code', False) if not access_token: access_token = gettoken(provider.validation_endpoint, corpid, corpsecret) + ICP.set_param('wechat.access_token', access_token) if not code: raise OAuthLogin("微信扫码错误:没有 code!" ) - provider.scope = access_token oauth_uid = False headers={'Content-Type': 'application/json'} @@ -109,6 +111,9 @@ class ResUsers(models.Model): dict_user = response.json() errcode = dict_user.get("errcode", 0) if errcode in [42001]: + access_token = gettoken(provider.validation_endpoint, corpid, corpsecret) + ICP.set_param('wechat.access_token', access_token) + user_url = "%s?access_token=%s&code=%s" % (provider.data_endpoint, access_token, code) response = requests.get(user_url, headers=headers) dict_user = response.json() @@ -118,7 +123,7 @@ class ResUsers(models.Model): oauth_uid = dict_user["UserId"] elif dict_user["errcode"] == 40014 or dict_user["errcode"] == 42001: # 40014: 不合法的access_token, 42001: access_token expired access_token = gettoken(provider.validation_endpoint, corpid, corpsecret) - provider.scope = access_token + ICP.set_param('wechat.access_token', access_token) user_url = "%s?access_token=%s&code=%s" % (provider.data_endpoint, access_token, code) response = requests.get(user_url, headers = headers) dict_user = response.json()