/** * @param Request $request * @return mixed */ public function download(RequestInterface $request) { $backoffTry = 0; $response = null; do { if ($backoffTry > 0) { sleep(pow(2, $backoffTry)); } // TODO refresh request may come here try { $response = $this->client->__soapCall($request->getFunction(), $request->getParams(), $request->getOptions(), $request->getInputHeader(), $outputHeaders); } catch (\SoapFault $e) { $backoffTry++; $errData = array("code" => $e->getCode(), "message" => $e->getMessage(), "faultcode" => isset($e->faultcode) ? $e->faultcode : null, "faultstring" => isset($e->faultstring) ? $e->faultstring : null, "detail" => isset($e->detail) ? (array) $e->detail : null); // Do not retry if max. retry count is reached OR the error isn't on server(TODO?): || $errData["faultcode"] == "SOAP-ENV:Client" if ($backoffTry >= $this->backoffTryCount) { $e = new UserException("Soap call failed:" . $e->getCode() . ": " . $e->getMessage(), 400, $e); $e->setData($errData); throw $e; } else { Logger::log("debug", "Soap call error, retrying:" . $e->getCode() . ": " . $e->getMessage(), $errData); } } } while ($response === null); return $response; }
function userError(UserException $e) { Logger::log('error', $e->getMessage(), (array) $e->getData()); exit(1); }