Mailchimp的addListMember在已存在时返回客户端错误400 bad request

12

我正在尝试使用MailchimpMarketing\ApiClient() composer资源向网站添加基本的Mailchimp订阅表单。添加用户似乎正常工作,但当尝试添加已存在的人时,我希望只收到一个漂亮的JSON响应,以便我可以捕获错误并向用户显示它,但实际上我收到以下GuzzleHttp\Exception\ClientException:

Client error: `POST https://us10.api.mailchimp.com/3.0/lists/xxxxxxxxxx/members` resulted in a `400 Bad Request` response:
{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Member Exists","status" (truncated...)

文档似乎并没有解释太多,我不得不像从stackoverflow上那样找到捕获该错误的正确方法,因为Mailchimp的文档.. 不足!这是代码:

try {
    $response = $mailchimp->lists->addListMember($this->settings_helper->get('mailchimp_list_id'), [
        "email_address" => $form->get_field_value('email'),
        "status" => "subscribed",
        "merge_fields" => [
            "FNAME" => $first_name,
            "LNAME" => $last_name
         ]
    ]);
    
    if ($response->getId()) {
        $this->add_json_success($this->settings_helper->get('mailchimp_success_message'));
    }
} catch (MailchimpMarketing\ApiException $e) {
    $errors[] = $e->getMessage();
} catch (ClientErrorResponseException $e) {
    $errors[] = $e->getMessage();
} catch (GuzzleHttp\Exception\ClientException $e) {
    $errors[] = $e->getMessage();
}

这是我使用的Mailchimp文档:https://mailchimp.com/developer/api/marketing/list-members/add-member-to-list/

我可以捕获400错误代码并输出自定义错误,但我相信我一定做错了什么才会从Mailchimp API得到如此没用的响应?

非常感谢,安迪,欢迎任何帮助。

2个回答

17

我曾经遇到过同样的问题,所以最后我通过将最后的catch子句更改为以下内容来查看整个错误消息:

catch (GuzzleHttp\Exception\ClientException $e) {
  echo '<pre>' . var_export($e->getResponse()->getBody()->getContents()).'</pre>';
  $errors[] = $e->getMessage();
}

这揭示了以下糟糕的错误,到目前为止一直受到截断:

{
    "type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/",
    "title":"Invalid Resource",
    "status":400,
    "detail":"Isabell_Murazik@example.com looks fake or invalid, please enter a real email address.",
    "instance":"fcc1d762-2475-40a6-bc7f-4ac7f3fb7902"
}

所以,我的问题是@example.com看起来是假的或无效的...

尝试不同的电子邮件,甚至使用@test.com都可以。我不能保证这也是你的问题,但检查错误细节肯定是一个很好的第一步!


1
垃圾邮件是我的测试案例。我使用yopmail.com进行测试。 - Jomar Sevillejo

4

我也曾为此苦恼。

要显示不同的关键值,请根据自己的需求变化以下内容:

catch (\GuzzleHttp\Exception\BadResponseException $e) {
        $response = $e->getResponse();
        $responseBodyAsString = $response->getBody()->getContents();
        $decoded = json_decode($responseBodyAsString);
        echo $decoded->title;
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接