Wrapper class for calling external API
First of all, it's a job for at least three separate functions (that should 
belong to the different classes at best, but that would be a different story), each throwing its own exceptions.

protected function sendRequest($data)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this-&gt;apiUrl);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,2);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $data = curl_exec($ch);
    if ($error = curl_error($ch)) {
        throw new Exception($error);
    }   
    curl_close($ch);
    return $data;
}
protected function jsonDecode($json)
{
    $data = json_decode($json);
    if (json_last_error()) {
        throw new Exception(json_last_error_msg());
    }
    return $data;
}
protected function requestApi($data)
{
    $data = $this-&gt;authApi + $data;
    $data = [
        'data' =&gt; json_encode($data)
    ];
    $response = $this-&gt;sendRequest($data);
    $answer = $this-&gt;jsonDecode($response);

    if (isset($answer-&gt;success) &amp;&amp; $answer-&gt;success == true))) {
        return $answer;
    }
    if (isset($answer-&gt;message) {
        throw new \Exception('API error: ' . $answer-&gt;message  );
    } 
    throw new \Exception("Unknown API response: $response" );
}


As of the logger, I would call it in the exception handler/catch block and thus avoid repetitive calls.