Я работаю с MailChimp API v3.0, чтобы связать небольшую базу данных Access 2016 с MailChimp с помощью VBA - я использую следующий код, чтобы проверить, существует ли электронное письмо в MailChimp, а затем получить статус подписчика в тестовом списке. Настроил. Однако он не возвращает правильный статус подписки:
Select Case Request
Case Is = "GET"
MailExist = False
MailSub = False
APIString = "search-members?query = "
With CreateObject("MSXML2.XMLHTTP")
.Open Request, APIUrl & APIString & Criteria, False
.setrequestheader "Authorization", "Basic " & APIAuth
.send
APIResponse = .responsetext
If InStr(APIResponse, "{""exact_matches"":{""members"":[]") > 0 Then
MailExist = False
Else
MailExist = True
Set JSONControl = CreateObject("MSScriptControl.ScriptControl")
JSONControl.language = "Jscript"
APIString = "lists/a0da306709/members/"
.Open Request, APIUrl & APIString & StringMD5(Criteria), False
.setrequestheader "Authorization", "Basic " & APIAuth
.send
Debug.Print "CONTACT STATUS IS: " & .responsetext; Spc(2)
Set Subber = JSONControl.Eval("(" + .responsetext + ")")
If Subber.status = "subscribed" Then
MailSub = True
Else
MailSub = False
End If
End If
End With
End Select
Вышеупомянутое в настоящее время возвращает «статус»: «подписан» в теле текста ответа, но когда я вхожу в MailChimp и просматриваю фактический контакт, их статус «отписан» (я тот, кто отписался от них через API ). Я проверил хеш MD5, чтобы определить правильность адреса электронной почты, и я не получаю никаких ответов об ошибках от MailChimp, поэтому я не понимаю, почему в ответе учетная запись отображается как «Подписка» ...
После небольшого дополнительного тестирования я вижу, что MailChimp не получает вызов GET, который является повторением более раннего. При просмотре «Последние 24 часа вызовов API» в MailChimp вызовы, которые я делаю для получения статуса подписчика для контакта, для которого я ранее выполнял вызов GET, вообще не отображаются. Закрытие и повторное открытие базы данных, по-видимому, подтверждает это, поскольку тот же код, запускаемый для того же контакта после повторного открытия, отображается как вызов GET в записи вызовов API mailchimp. Возможно, мне нужно уничтожить объект MSXML2.XMLHTTP?
Эх ... Вы создаете новый объект XMLHTTP с вашим оператором With. Каждый раз, когда вы запускаете этот код, вы генерируете новый вызов API. Mailchimp может кэшировать вызовы и возвращать кешированные результаты, но это снова вопрос службы поддержки.
Хорошо, я думаю, что нашел исправление для этого - похоже, что проблема была в объекте XMLHTTP, поскольку создание объекта 'MSXML2.ServerXMLHTTP' вместо этого позволяет мне выполнять несколько вызовов GET и получать правильный ответ вместе с звонок правильно регистрируется на конце MailChimp. Однако удивлен, почему!





Похоже, вам следует обратиться в службу поддержки MailChimp. Если их API не возвращает правильные данные, мы не сможем вам помочь.