Saya telah melaksanakan API Fedex menggunakan API Kadar Semakan dan boleh membuat label menggunakan API Kapal. Kedua-duanya berfungsi dengan baik dalam kotak pasir, jadi saya mendapat pengesahan label saya dan disiarkan secara langsung. API harus mengembalikan JSON. Kadangkala, dalam live dan kotak pasir, panggilan API menggunakan cURL mengembalikan respons bukan JSON. Anda tidak akan menghadapi masalah mendapatkan respons json yang baik menggunakan OAuth atau panggilan API kadar semak. Walau bagaimanapun, Ship API boleh mengembalikan json yang baik, tetapi ia juga boleh mengembalikan respons termampat.
Ini adalah permintaan curl saya.
function fedexRequest($endpoint, $post, $header = null) { //$ch = curl_init('https://apis-sandbox.fedex.com/' . $endpoint); $ch = curl_init('https://apis.fedex.com/' . $endpoint); curl_setopt_array($ch, [ CURLOPT_SSL_VERIFYPEER => CURLOPT_RETURNTRANSFER => CURLOPT_CONNECTTIMEOUT => ]); if ($header) curl_setopt($ch, CURLOPT_HTTPHEADER, $header); return curl_exec($ch); }
Saya mendapat json dan respons dimampatkan menggunakan kod ini. $post ialah muatan json yang saya hantar. Amaran spoiler! Ralat biasanya adalah butiran sesuatu dalam muatan. Kesilapan pertama ialah menetapkan PackagingType = FEDEX_PAK untuk item dengan berat lebih daripada 20 paun. Pendekatan lain ialah menggunakan CM dan bukannya IN untuk unit saiz.
Panggilan saya kepada sokongan Perkhidmatan Web Fedex menghadapi kesukaran untuk mendiagnosis respons ralat bukan json. Jawapannya kelihatan seperti kod dalam penyemak imbas: berlian hitam vs putih? dan ruang rawak, huruf dan nombor.
Orang pertama yang memberitahu saya dengan tepat perkara yang mereka lihat apabila melihat panggilan api akaun saya, beritahu saya punca dan penyelesaian ralat itu, malah melihat teg baik saya dalam masa nyata selepas saya melaksanakan persediaan mereka. Respons dikagumi. Mudah-mudahan saya akan mendapat panggilan balik talian terus daripada beliau. Juga membuat beberapa panggilan sokongan hari ini tetapi tiada siapa yang dapat memberikan bantuan diagnostik yang sama. Yang terakhir berkata, anda menerima respons termampat, jadi atasinya. Mereka berkata pengurus mereka berkata kod saya yang menyebabkan respons termampat.
Ini mengelirukan, dan semasa dalam kotak pasir, saya melihat ralat dalam respons json yang baik dan membina kaedah untuk menghuraikannya dengan sewajarnya untuk pengguna akhir. Juga melihat respons kod ini. Saya fikir ia hanya pepijat yang diketahui dari kotak pasir mereka, tetapi nampaknya beberapa pepijat mereka telah dihimpit.
Jadi, saya ada beberapa soalan.
Adakah pemampatan disebabkan oleh permintaan cURL saya?
Jika saya menetapkan CURLOPT_ENCODING dalam permintaan, adakah ia akan mengendalikan respons ini dengan lebih sesuai?
Jika saya menerima respons termampat, adakah gzread atau ZipArchive cara terbaik untuk menyahmampatnya dan mendapatkan kod ralat sebenar? Andaikan ia ada di sana?
Nampaknya permintaan cURL kepada Fedex boleh mengembalikan kedua-dua respons dimampatkan dan tidak dimampatkan. Menambah CURLOPT_ENCODING => "" pada tatasusunan setopt cURL menyahmampat respons gzip secara automatik.