公众号登录报错问题处理
1、文件目录:crmeb/services/wechat/OfficialAccount.php
第 88 行注释的放开
2、修改crmeb/services/wechat/OfficialAccount.php文件582行
tokenFromCode方法的返回值为
return $response->getTokenResponse();
3、文件目录:crmeb/services/wechat/CustomHttpClient.php
方法名:request
70 行左右
替换此方法
public function request(string $method, string $url, array $options = []): ResponseInterface
{
// 合并传入的选项和默认选项
$options = array_merge(self::OPTIONS_DEFAULTS, $this->httpConfig, $options);
$ssl = strstr($this->baseUrl, 'https://') !== false;
$baseUrl = str_replace(['https://', 'http://', '/'], '', $this->baseUrl);
// 使用 Swoole Client 完成请求
$client = new Client($baseUrl, $ssl ? 443 : 80, $ssl);
$client->set([
'timeout' => !empty($options['timeout']) ? $options['timeout'] : $this->timeout,
'ssl_cert_file' => $options['cert'] ?? null,
'ssl_key_file' => $options['ssl_key'] ?? null
]);
$client->setMethod($method);
$headers = [];
// 设置请求头
foreach ($options['headers'] as $key => $value) {
if (is_string($key)) {
$values = [];
if (is_array($value)) {
foreach ($value as $item) {
[$type, $val] = strstr($item, ':') !== false ? explode(':', $item) : [null, null];
if ($type && $val) {
$values[] = $val;
}
}
$headers[$key] = implode(',', $values);
} else {
$values[] = $value;
$headers[$key] = implode(',', $values);
}
} else {
[$type, $val] = strstr($value, ':') !== false ? explode(':', $value) : [null, null];
$values[] = $val;
$headers[$type] = implode(',', $values);
}
}
$client->setHeaders($headers);
if (!empty($options['query'])) {
$url = $url . (strstr($url, '?') !== false ? '&' : '?') . http_build_query($options['query']);
}
if (!empty($options['json'])) {
$client->setData($options['json']);
} else if (!empty($options['body'])) {
$client->setData($options['body']);
}
// 发起请求
$client->execute('/' . $url);
// 创建响应对象
$response = new SwooleResponse($client);
// 关闭客户端连接
$client->close();
return $response;
}