отлов ошибок php API mailchimp

Я пытаюсь создать метод подписки для моего приложения laravel, который использует API mailchimp для подписки пользователя на данный список. Этот метод отлично работает, когда адрес электронной почты еще не указан в списке. когда он уже подписан, API mailchimp выдает следующую ошибку

Mailchimp_List_AlreadySubscribed [email protected] уже подписан на список Tc App Test List. Нажмите здесь, чтобы обновить свой профиль.

со следующим кодом, показанным

public function castError($result) {
        if($result['status'] !== 'error' || !$result['name']) throw new Mailchimp_Error('We received an unexpected error: ' . json_encode($result));

        $class = (isset(self::$error_map[$result['name']])) ? self::$error_map[$result['name']] : 'Mailchimp_Error';
        return new $class($result['error'], $result['code']);
    }

Я попытался использовать блок try catch, чтобы поймать ошибку, но она все еще возвращается в браузер, вот что я пробовал, и если он говорит, что MailChimp_Error я также пробовал с Exception.

public function subscribe($id, $email, $merge_vars)
    {
        try {
            $this->mailchimp->lists->subscribe($id, $email, $merge_vars);
        } catch (MailChimp_Error $e) {
            $response = 'an error has occured';
        }

        return $response;
    }

В конечном счете, я хочу иметь возможность запустить метод, а затем либо вернуть пользователю сообщение об успешном выполнении, либо сообщение с описанием проблемы. 3 возможные ошибки метода mailchimp: Email_notexists, list_alreadysubscribed и list не существует, хотя последняя ошибка не должна возникать, поскольку я предоставляю список в исходном коде.

редактировать 1; после обращения в службу поддержки API mailchimp они предложили этот код, но ошибка все еще полностью возвращается в браузер.

try {
     $results = $this->mailchimp->lists->subscribe($id, $email, $merge_vars);
} catch (Mailchimp_Error $e) {
      if ($e->getMessage()) {
           $error = 'Code:'.$e->getCode().': '.$e->getMessage();
      }
}

echo $error;

person Mark    schedule 13.03.2014    source источник


Ответы (2)


Подписка находится в пространстве имен Acme\Emails\Subscribe so catch(Mailchimp_Error $e), ищет Mailchimp_Error в этом пространстве имен.

Изменение его на catch(\Mailchimp_Error $e) заставляет его искать в корневом пространстве имен, а затем он работает по назначению.

person Mark    schedule 17.03.2014
comment
как насчет Mailchimp_Email_AlreadySubscribed? Я не могу понять, как поймать тот. - person Kyslik; 20.11.2014
comment
Работает отлично. - person Dushyant Joshi; 13.12.2019

Ты можешь сделать

 try
                    {
                        $response = $this->mailchimp->lists->addListMember($list_id, [
                            "email_address" => $email,
                            "status" => "subscribed",
                        ]);
                        
                    }
                    catch (\EXCEPTION $e) {
                        return $e->getMessage();
                       

                    } 

\EXCEPTION обрабатывает своего рода ошибку для чередования

person Sam Yam    schedule 11.05.2021
comment
Я уверен, что вы не считаете EXCEPTION константой, поэтому немного сбивает с толку то, что оно написано заглавными буквами. - person shaedrich; 11.05.2021