【问题标题】:Mailchimp addListMember returns client error 400 bad request when already existing [duplicate]Mailchimp addListMember 在已经存在时返回客户端错误 400 错误请求 [重复]
【发布时间】:2020-12-22 14:17:13
【问题描述】:

我正在使用他们的 MailchimpMarketing\ApiClient() 作曲家资源向网站添加一个基本的 Mailchimp 订阅表单。添加用户似乎工作正常,但是当尝试添加已经存在的人时,我希望只有一个很好的 json 响应,以便我可以捕获该错误并将其显示给用户,但我得到以下 GuzzleHttp\Exception \客户端异常:

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...)

文档似乎并没有真正解释太多,我必须找到正确的方法来从堆栈溢出中捕获该错误,因为 Mailchimps 文档是......缺乏!代码如下:

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 获得如此无用的响应?

非常感谢,andy 并感谢所有帮助。

【问题讨论】:

    标签: php api exception mailchimp guzzle


    【解决方案1】:

    我遇到了同样的问题,所以我最终通过将最后一个 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 也有效。 我不能向您保证这也将是您的问题,但检查错误详细信息绝对是一个很好的第一步!

    【讨论】:

    • 垃圾邮件就是我的情况。正在使用 yopmail.com 进行测试
    【解决方案2】:

    我也为此苦苦挣扎。

    要显示各种键值,请使用您自己的变体

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2015-04-03
      • 2019-11-10
      • 2015-08-17
      • 2020-05-20
      相关资源
      最近更新 更多