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 = cur_init('https://apis-sandbox.fedex.com/' . $endpoint) // 샌드박스 $ch = cur_init('https://apis.fedex.com/' . $endpoint) // 라이브 컬_setopt_array($ch, [ CURLOPT_SSL_VERIFYPEER => 참, CURLOPT_SSL_VERIFYHOST => CURLOPT_RETURNTRANSFER => 참, CURLOPT_FOLLOWLOCATION => CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_POSTFIELDS => ]); if ($header) 컬_setopt($ch, CURLOPT_HTTPHEADER, $header); 반환 컬_exec($ch); }
이 코드를 사용하여 json과 압축된 응답을 받았습니다. $post는 내가 보내는 json 페이로드입니다. 스포일러 경고! 오류는 일반적으로 페이로드에 있는 내용의 세부정보입니다. 첫 번째 실수는 무게가 20파운드를 초과하는 품목에 대해 PackagingType = FEDEX_PAK를 설정하는 것입니다. 또 다른 접근 방식은 크기 단위에 IN 대신 CM을 사용하는 것입니다.
Fedex 웹 서비스 지원팀에 전화하면 json이 아닌 오류 응답을 진단하는 데 어려움이 있습니다. 응답은 브라우저의 코드(검은색 다이아몬드 vs 흰색?)처럼 보입니다. 임의의 공백, 문자 및 숫자.
내 계정 API 호출을 볼 때 본 내용을 정확히 알려주고, 오류가 발생한 원인과 해결 방법을 알려주고, 설정을 구현한 후 내 좋은 태그까지 실시간으로 확인하는 사람은 반응이 감탄스럽습니다. 그에게서 직접 전화를 받을 수 있기를 바랍니다. 또한 오늘 몇 차례 지원 전화를 했지만 누구도 동일한 진단 도움을 제공할 수 없었습니다. 마지막 것은 압축된 응답을 받고 있으니 처리하라고 말합니다. 그들은 관리자가 압축된 응답을 유발하는 것이 내 코드라고 말했다고 말했습니다.
이것은 혼란스럽습니다. 샌드박스에 있는 동안 좋은 json 응답과 빌드 메소드에서 오류를 확인하여 최종 사용자에게 적절하게 구문 분석합니다. 또한 이러한 코드 응답도 볼 수 있습니다. 나는 그것이 단지 그들의 샌드박스에서 알려진 버그인 줄 알았는데, 분명히 그들의 버그 중 일부는 짓눌려져 있었습니다.
몇 가지 질문이 있습니다.
내 cURL 요청으로 인해 압축이 발생했나요?
요청에 CURLOPT_ENCODING을 설정하면 이러한 응답을 더 적절하게 처리할 수 있나요?
압축된 응답을 받으면 gzread 또는 ZipArchive가 압축을 풀고 실제 오류 코드를 얻는 가장 좋은 방법입니까? 거기에 있다고 가정 해 볼까요?
Fedex에 대한 cURL 요청은 압축된 응답과 압축되지 않은 응답을 모두 반환할 수 있는 것 같습니다. cURL setopt 배열에 CURLOPT_ENCODING => ""를 추가하면 gzip 응답의 압축이 자동으로 풀립니다.