Константа Контакт API простая форма
Привет, я хочу сохранить данные для простой HTML-формы для постоянного контакта. Я не могу найти информацию о том, как это делается. Кто-нибудь использовал их API раньше, если да, можете ли вы пролить свет на то, как обрабатывать форум и сохранять данные с помощью Constant Contact API?
<form id="form" action="form.php">
First: <input name="first" id="first" />
Last: <input name="last" id="last" />
Address: <input name="address" id="address" />
FirstTime: <input type="checkbox" />
</form>
4 ответа
Для любых бедняков, которым не повезло использовать постоянный контакт для простой формы подписки по электронной почте, сэкономьте часы работы и просто сделайте следующее:
Создайте встроенную форму на панели инструментов «Постоянный контакт» и добавьте ее на свою страницу.
Используйте CSS, чтобы как можно быстрее скрыть эту присоску (
display: none;
Сделаю).Создайте свою красивую форму (включая проверку) и сделайте что-то вроде этого:
$("form.beautimus-maximus").on("submit", function(event) { event.preventDefault(); var email = $(this).find("input").val(); $(".ctct-inline-form input").val(email); $(".ctct-inline-form form").submit(); });
Опустите голову от стыда за то, что вы только что сделали.
Наслаждайтесь все время, которое вы сэкономили.
Этот простой пример PHP должен помочь вам. Вам нужно зарегистрировать учетную запись разработчика, а затем, как только вы подтвердите эту регистрационную ссылку (по электронной почте), вы сможете войти в систему и перейти на вкладку "Приложения и ключи API" на портале разработчика, чтобы создать новое приложение, а затем оно даст вам ключи вам нужны. Что касается получения идентификатора списка, перейдите на вкладку "Тестер API" на портале разработчика, введите свой токен доступа, не нажимайте "Получить токен доступа", а затем прокрутите вниз и найдите "Получить коллекцию списков контактов". Нажмите на эту ссылку, а затем просто нажмите кнопку попробовать. Он вернет каждый список, который вы настроили, а также их числовой идентификатор.
Обратите внимание, что у меня также есть блок массива 'ssl' ниже. В моем случае я обнаружил, что он работает с этим блоком и без него, но все равно запускает транзакцию по HTTPS.
Для получения дополнительной информации о блоке JSON, используемом для добавления контактов, который имеет гораздо больше опций для добавления контакта, вы можете прочитать об этом в онлайн-документации. Одна важная дополнительная переменная свойства JSON, на которую следует обратить внимание, это confirmed
имущество.
Однако есть одна загвоздка. Если этот контакт был ранее добавлен в определенную учетную запись, вы получите сообщение об ошибке "Конфликт HTTP 409". Обходной путь, однако, не очень прост. Шаги будут:
- Измените код ниже, чтобы добавить
'ignore_errors' => TRUE
в массив http.- Если ответ содержит
already exists
, это означает, что электронное письмо уже есть в этой учетной записи, и оно не позволит вам добавить его в этот список без этого обходного пути. Так что читайте дальше....- Лови это условие.
- Получите ID контакта по указанному адресу электронной почты, используя HTTP GET в API / contacts, передавая его
?email=$sEmail&status=ALL&limit=1&api_key=$sAPIKey
,- Получите объект Contact JSON по указанному идентификатору контакта, используя HTTP GET в API / contacts / {contactId}, и используйте
json_decode()
преобразовать это в объект в PHP.- Измените объект Contact JSON, чтобы добавить новый идентификатор списка с помощью
$oJSON->lists[] = (object) array('id'=>'' . $sListID);
- Теперь сохраните индивидуальный контакт с новым списком дополнений. Для этого преобразуйте объект Contact JSON в строку JSON и обновите контакт, используя HTTP PUT ON для API / contacts / {contactId}. Даже если вы случайно вызовете этот шаг более одного раза, API-интерфейс ConstantContact v2 достаточно умен, чтобы знать, что не следует добавлять этого человека в список более одного раза, и не выдаст ошибку.
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
header('Content-Type: text/plain');
// REPLACE WITH YOUR OWN
$sAPIKey = '689bnyc8td8dasxeau5bghb';
$sToken = '55de771a-dfee-453b-a654-1e62a5856231';
$sListID = 1000394510;
// END REPLACE BLOCK
// THE USER YOU WANT TO ADD, ONLY USING NAME AND EMAIL
$sEmail = 'username' . rand(1111,9999) . '@example.com';
$sFirst = 'Test';
$sLast = 'Tester';
$sURL = "https://api.constantcontact.com/v2/contacts?action_by=" .
"ACTION_BY_OWNER&api_key=$sAPIKey";
$sJSON = <<<EOD
{
"lists": [
{
"id": "$sListID"
}
],
"email_addresses": [
{
"email_address": "$sEmail"
}
],
"first_name": "$sFirst",
"last_name": "$sLast"
}
EOD;
$sResponse = file_get_contents($sURL,false,stream_context_create(array(
'http'=>array(
'method' => 'POST',
'header' => "Authorization: Bearer $sToken\nContent-Type: application/json",
'content' => $sJSON
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false,
'allow_self_signed'=>true,
)
)));
echo $sResponse;
Constant Contact
не допускает очень простых форм, подобных этой, в целом из-за проблем безопасности, вызванных простыми формами (таким образом, из-за отсутствия онлайн-примеров). Тем не менее, они предоставляют генератор формы регистрации
Для этого не нужно кодировать, просто имейте доступ к веб-странице / серверу, на который вы пытаетесь добавить код. Генератор форм, вероятно, ваш лучший и самый быстрый вариант, но вы также можете использовать API
- Общая документация API, которая поможет вам начать работу, если вы хотите пойти по этому пути (см. Ссылку "Примеры кода" на главной странице).
Надеюсь, это поможет!
Шеннон В.
Поддержка CTCT API
Просто чтобы следить за ответом Воломике, который должен получить здесь всю заслугу, поэтому проголосуйте за него, это мой расширенный код, который покрывает ошибку конфликта. Это процедурный подход. Не стесняйтесь писать получше.
Имейте в виду, что я должен был справиться с этим как с критическим исправлением чего-то в последнюю минуту. Я понятия не имею, что я добавил сюда, что может быть ненужным или могло быть написано лучше. Мне просто нужно было быстро размять его, чтобы он заработал. Если есть более полный и понятный способ сделать это, не стесняйтесь писать его в качестве ответа и комментировать этот ответ, чтобы я мог добавить вам.
Сегмент // ЗАМЕНИТЬ СВОЙ СОБСТВЕННЫЙ сегмент - см. Ответ Volomike для всего процесса учетной записи разработчика. Это очень быстро, так что пусть это вас не расстраивает. Просто зарегистрируйтесь, возьмите свой токен и ключи и подключите его.
error_reporting(E_ALL);
ini_set('display_errors','On');
header('Content-Type: text/plain');
// REPLACE WITH YOUR OWN
$sAPIKey = 'your-api-key';
$sToken = 'your-token';
$sListID = 11111111; //your list id
$email = 'email-to-be-added@gmail.com';
// END REPLACE BLOCK
$sURL = "https://api.constantcontact.com/v2/contacts?action_by=" .
"ACTION_BY_OWNER&api_key=$sAPIKey";
//DONT INDENT THIS. remember heredoc needs it to be rammed right up against the wall
$sJSON = <<<EOD
{
"lists": [
{
"id": "$sListID"
}
],
"email_addresses": [
{
"email_address": "$email"
}
]
}
EOD;
$sResponse = file_get_contents($sURL,false,stream_context_create(array(
'http'=>array(
'method' => 'POST',
'header' => "Authorization: Bearer $sToken\nContent-Type: application/json",
'content' => $sJSON,
'ignore_errors' => TRUE
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false,
'allow_self_signed'=>true,
)
)));
if(strpos($sResponse, 'http.status.email_address.conflict') > -1)
{
$sResponse = file_get_contents("https://api.constantcontact.com/v2/contacts?email=$email&status=ALL&limit=1&api_key=$sAPIKey",false,stream_context_create(array(
'http'=>array(
'header' => "Authorization: Bearer $sToken",
'ignore_errors' => TRUE
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false,
'allow_self_signed'=>true,
)
)));
$res = json_decode($sResponse);
$id = $res->results[0]->id;
$res->results[0]->lists[] = (object) array('id' => ''.$sListID);
$sResponse = file_get_contents("https://api.constantcontact.com/v2/contacts/$id?action_by=ACTION_BY_OWNER&api_key=$sAPIKey",false,stream_context_create(array(
'http'=>array(
'method' => 'PUT',
'header' => "Authorization: Bearer $sToken\nContent-Type: application/json",
'content' => json_encode($res->results[0]),
'ignore_errors' => TRUE
),
'ssl'=>array(
'verify_peer'=>false,
'verify_peer_name'=>false,
'allow_self_signed'=>true,
)
)));
echo $sResponse;
}
else
{
// didnt have a conflict
echo $sResponse;
}
//there was a problem of some kind if it reaches here