PHP Gmail API获取附件返回Guzzle Request Object问题求助
PHP版Gmail API获取附件返回Guzzle对象解决方案
- 优先检查Google客户端初始化配置:如果开启了
$client->setReturnRawResponse(true),API会直接返回Guzzle响应对象而非封装好的服务类实例。你可以将该配置改为false,即可正常获取Google_Service_Gmail_MessageAttachment实例,调用getData()方法拿到附件数据。 - 若你确实需要保留返回原始响应的配置,可以直接从Guzzle对象中读取数据:调用
$response->getBody()->getContents()获取响应体字符串,自行JSON解码后提取data字段即可。 - 检查SDK版本:旧版本
google/apiclient存在已知的返回值类型异常bug,可执行composer命令升级到最新稳定版:composer update google/apiclient:^2.15。 - 自定义Guzzle实例排查:如果你在初始化Google Client时传入了自定义配置的Guzzle客户端,可先移除自定义Guzzle实例配置,使用SDK默认生成的客户端测试是否恢复正常,排除自定义中间件/配置修改返回值的可能。
- 强制指定返回格式:调用get方法时新增第四参数指定返回格式,代码示例:
Google_Service_Gmail->users_messages_attachments->get('me', $messageId, $attachmentId, ['alt' => 'json']);
补充说明:通过
getData()拿到的附件内容是Base64URL编码格式,需要转换后才能得到正常的PDF二进制数据,转换代码参考:$base64Str = str_replace(['-', '_'], ['+', '/'], $attachment->getData()); $pdfBinary = base64_decode($base64Str);
内容的提问来源于stack exchange,提问作者Tommy Evans-Barton
相关产品推荐
相关产品推荐

