admin 发表于 2022-12-15 17:58:02

QQ互联无法获取昵称的解决办法

QQ互联目前获取到的都是qquser,无法获取到正常的QQ昵称
解决方法:
1.打开source/plugin/qqconnect/lib/ConnectOAuth.php
2.搜索代码,大约在409行
public function connectGetUserInfo_V2($openId, $accessToken) {               $params = array(                         'access_token' => $accessToken,                         'oauth_consumer_key' => $this->_appKey,                         'openid' => $openId,                         'format' => 'xml'               );               require_once DISCUZ_ROOT.'/source/plugin/qqconnect/lib/Util.php';               $utilService = new Cloud_Service_Util();               $response = $this->dfsockopen($this->_getUserInfoURL_V2.'?'.$utilService->httpBuildQuery($params, '', '&'));               $data = $this->_xmlParse($response);               if(isset($data['ret']) && $data['ret'] == 0) {                         return $data;               } else {                         throw new Exception($data['msg'], $data['ret']);               }         }修改为:
也可以看

yusr 发表于 2022-12-18 23:09:27

看什么?:lol

Discuz智能体 发表于 2025-3-19 00:59:59

你提到的QQ互联无法获取昵称的问题,通常是由于QQ互联接口的返回数据格式或接口调用方式发生了变化。根据你提供的代码片段,我们可以通过以下步骤来解决这个问题。

### 解决方法:

1. **打开文件**:找到 `source/plugin/qqconnect/lib/ConnectOAuth.php` 文件。

2. **搜索代码**:找到 `connectGetUserInfo_V2` 方法,大约在409行。

3. **修改代码**:将原有的代码修改为以下内容:

public function connectGetUserInfo_V2($openId, $accessToken) {
    $params = array(
      'access_token' => $accessToken,
      'oauth_consumer_key' => $this->_appKey,
      'openid' => $openId,
      'format' => 'json'// 将格式改为json
    );

    require_once DISCUZ_ROOT.'/source/plugin/qqconnect/lib/Util.php';
    $utilService = new Cloud_Service_Util();
    $response = $this->dfsockopen($this->_getUserInfoURL_V2.'?'.$utilService->httpBuildQuery($params, '', '&'));

    // 解析json格式的响应
    $data = json_decode($response, true);

    if(isset($data['ret']) && $data['ret'] == 0) {
      return $data;
    } else {
      throw new Exception($data['msg'], $data['ret']);
    }
}

### 修改说明:

1. **格式改为JSON**:将 `format` 参数从 `xml` 改为 `json`,因为QQ互联的接口可能已经不再支持XML格式的返回数据。

2. **解析JSON数据**:使用 `json_decode` 函数来解析返回的JSON数据。

3. **错误处理**:根据返回的 `ret` 字段判断是否成功获取用户信息,如果失败则抛出异常。

### 其他注意事项:

- **接口URL**:确保 `$this->_getUserInfoURL_V2` 是正确的接口URL,通常为 `https://graph.qq.com/user/get_user_info`。

- **权限问题**:确保你的QQ互联应用已经申请了获取用户信息的权限。

- **缓存问题**:如果修改后仍然无法获取昵称,可以尝试清除Discuz的缓存,或者重新登录QQ互联。

### 总结:

通过以上修改,QQ互联应该能够正常获取到用户的昵称信息。如果问题仍然存在,建议检查QQ互联的接口文档,确认是否有其他参数或调用方式的变化。

如果你有其他问题或需要进一步的帮助,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: QQ互联无法获取昵称的解决办法