我已經使用 Check Rates API 實作了 Fedex API,並且可以使用 Ship API 建立標籤。 兩者在沙盒中都運作良好,因此我獲得了標籤認證並上線。 API 應該回傳 JSON。有時,在即時和沙箱中,使用 cURL 的 API 呼叫會傳回非 JSON 回應。使用 OAuth 或檢查費率 API 呼叫獲取良好的 json 回應永遠不會出現問題。但是,Ship API 可以傳回良好的 json,但也可以傳回壓縮回應。
這是我的捲曲請求。
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); }
我使用此程式碼獲得了 json 和壓縮響應。 $post 是我發送給他們的 json 有效負載。劇透警告!錯誤通常是有效負載中某些內容的詳細資訊。第一個錯誤是為重量超過 20 磅的物品設定 PackagingType = FEDEX_PAK。另一種方法是在尺寸單位上使用 CM 而不是 IN。
我對 Fedex Web 服務支援的呼叫在診斷非 json 錯誤回應時遇到了困難。回應看起來像瀏覽器中的程式碼:黑色鑽石與白色?以及隨機空格、字母和數字。
第一個人準確地告訴我他們在查看我的帳戶api 調用時看到了什麼,告訴我錯誤的原因和解決方案,甚至可以在我實施他們的設定後實時看到我良好的標籤響應受到推崇的。希望我能接到他回電的直線電話。今天還打了幾通支援電話,但沒有人能提供相同的診斷幫助。最後一個說,您收到的是壓縮響應,因此請處理它。他們說他們的經理說是我的程式碼導致了壓縮響應。
這很令人困惑,而在沙箱中,我確實看到了良好的 json 回應中的錯誤,並建立了為最終用戶適當解析這些錯誤的方法。還看到了這些代碼響應。我認為這只是他們的沙箱已知的錯誤,但顯然他們的一些錯誤被壓縮了。
所以,我有幾個問題。
壓縮是由我的 cURL 請求引起的嗎?
如果我在請求中設定 CURLOPT_ENCODING,它會更恰當地處理這些回應嗎?
如果我收到壓縮回應,gzread 或 ZipArchive 是解壓縮它並取得實際錯誤碼的最佳方法嗎?假設它在那裡?
似乎對 Fedex 的 cURL 請求可以回傳壓縮和未壓縮的回應。將 CURLOPT_ENCODING => "" 加到 cURL setopt 陣列會自動解壓縮 gzip 回應。