FEDEX Ship API 返回有关某些错误的压缩信息
<p>我已经使用 Check Rates API 实现了 Fedex API,并且可以使用 Ship API 创建标签。
两者在沙盒中都运行良好,因此我获得了标签认证并上线。 API 应该返回 JSON。有时,在实时和沙箱中,使用 cURL 的 API 调用会返回非 JSON 响应。使用 OAuth 或检查费率 API 调用获取良好的 json 响应永远不会出现问题。但是,Ship API 可以返回良好的 json,但也可以返回压缩响应。</p>
<p>这是我的卷曲请求。</p>
<pre class="brush:php;toolbar:false;">function fedexRequest($endpoint, $post, $header = null) {
//$ch = curl_init('https://apis-sandbox.fedex.com/' . $endpoint); // sandbox
$ch = curl_init('https://apis.fedex.com/' . $endpoint); // live
curl_setopt_array($ch, [
CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_POSTFIELDS => $post,
]);
if ($header) curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
return curl_exec($ch);
}</pre>
<p>我使用此代码获得了 json 和压缩响应。 $post 是我发送给他们的 json 有效负载。剧透警告!错误通常是有效负载中某些内容的详细信息。第一个错误是为重量超过 20 磅的物品设置 PackagingType = FEDEX_PAK。另一种方法是在尺寸单位上使用 CM 而不是 IN。</p>
<p>我对 Fedex Web 服务支持的调用在诊断非 json 错误响应时遇到了困难。响应看起来像浏览器中的代码:黑色钻石与白色?以及随机空格、字母和数字。</p>
<p>第一个人准确地告诉我他们在查看我的帐户 api 调用时看到了什么,告诉我错误的原因和解决方案,甚至可以在我实施他们的设置后实时看到我良好的标签响应受到推崇的。希望我能接到他的回电直线电话。今天还打了几通支持电话,但没有人能提供同样的诊断帮助。最后一个说,您收到的是压缩响应,因此请处理它。他们说他们的经理说是我的代码导致了压缩响应。</p>
<p>这很令人困惑,而在沙箱中,我确实看到了良好的 json 响应中的错误,并构建了为最终用户适当解析这些错误的方法。还看到了这些代码响应。我认为这只是他们的沙箱已知的错误,但显然他们的一些错误被压缩了。</p>
<p>所以,我有几个问题。</p>
<p>压缩是由我的 cURL 请求引起的吗?</p>
<p>如果我在请求中设置 CURLOPT_ENCODING,它会更恰当地处理这些响应吗?</p>
<p>如果我收到压缩响应,gzread 或 ZipArchive 是解压缩它并获取实际错误代码的最佳方法吗?假设它在那里?</p>