Nicely display JSON error responses
authorChristian Weiske <cweiske@cweiske.de>
Thu, 22 Sep 2016 08:52:24 +0000 (10:52 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Thu, 22 Sep 2016 08:52:24 +0000 (10:52 +0200)
src/shpub/Request.php

index 68db98d71350f69c7d824eff53ded6deaa5f5fbb..32e25de04d290d42e6a94b408e728242b3afd87a 100644 (file)
@@ -96,15 +96,37 @@ class Request
         $res = $this->req->send();
 
         if (intval($res->getStatus() / 100) != 2) {
-            Log::err(
-                'Server returned an error status code ' . $res->getStatus()
-            );
-            Log::err($res->getBody());
-            exit(11);
+            $this->displayErrorResponse($res);
         }
         return $res;
     }
 
+    protected function displayErrorResponse($res)
+    {
+        Log::err(
+            'Server returned an error status code ' . $res->getStatus()
+        );
+
+        $shown = false;
+        if ($res->getHeader('content-type') == 'application/json') {
+            $errData = json_decode($res->getBody());
+            if (!isset($errData->error)) {
+                Log::err('Error response does not contain "error" property');
+            } else if (isset($errData->error_description)) {
+                Log::err($errData->error . ': ' . $errData->error_description);
+                $shown = true;
+            } else {
+                Log::err($errData->error);
+                $shown = true;
+            }
+        }
+
+        if (!$shown) {
+            Log::err($res->getBody());
+        }
+        exit(11);
+    }
+
     public function setAction($action)
     {
         $this->action = $action;