Constant Contact API简单形式

时间:2012-08-16 07:54:48

标签: php api constantcontact

您好我想保存简单html FORM的数据以保持联系。我似乎无法找到有关如何完成此操作的任何信息。有没有人之前使用过他们的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 个答案:

答案 0 :(得分:1)

由于简单表单导致的安全问题(因此缺少在线示例),

Constant Contact一般不允许非常简单的表单。也就是说,他们提供Signup Form Generator

这不需要您编写代码,只需访问您尝试添加代码的网页/服务器即可。表单生成器可能是您最好和最快的选项,但如果您想要使用该路径,还可以使用API - General API Documnetation来帮助您入门(请参阅主页中的“代码示例”链接) )。

我希望有所帮助!

W。

CTCT API支持

答案 1 :(得分:0)

这个简单的PHP示例应为您提供帮助。您必须先signup for a Developer Account,然后(通过电子邮件)确认注册链接后,才能登录并转到Developer Portal中的“应用程序和API密钥”标签,以创建一个新的应用程序,然后为您提供所需的钥匙。至于获取列表ID,请在开发人员门户中单击“ API测试器”选项卡,键入您的访问令牌,不要单击“获取访问令牌”,然后向下滚动并查找“检索ContactLists的集合”。单击该链接,然后单击“试用”按钮。它将返回您已设置的每个列表及其数字ID。

请注意,我下面还有一个“ ssl”数组块。在我的案例中,我发现它可以使用该块,也可以不使用该块,但是仍然通过HTTPS运行事务。

有关用于添加联系人的JSON块的更多信息,该块具有用于添加联系人的更多选项,您可以read about it on the online docs。需要注意的一个重要的额外JSON属性变量是confirmed属性。

  

但是有一个陷阱。如果该联系人之前已添加到   给定帐户,那么您将收到“ HTTP 409冲突”错误。的   但是,解决方法不是很容易。步骤将是:

     
      
  1. 更改下面的代码,以便将'ignore_errors' => TRUE添加到http数组中。
  2.   
  3. 如果响应中包含already exists,则表示该电子邮件已经在该帐户中,因此您无法将其添加到该帐户中   没有该解决方法的列表。所以请继续阅读...。
  4.   
  5. 抓住那个条件。
  6.   
  7. 使用HTTP GET on the /contacts API通过给定的电子邮件地址获取联系人ID,   通过?email=$sEmail&status=ALL&limit=1&api_key=$sAPIKey
  8.   
  9. 使用HTTP GET on the /contacts/{contactId} API通过给定的联系人ID获取联系人JSON对象   并使用json_decode()将其转换为PHP中的对象。
  10.   
  11. 修改Contact JSON对象,以便您使用$oJSON->lists[] = (object) array('id'=>'' . $sListID);附加新的列表ID
  12.   
  13. 现在使用添加的新列表保存单个联系人。为此,请将Contact JSON对象转换为JSON字符串并更新联系人   使用HTTP PUT ON the /contacts/{contactId} API。   即使您不小心多次调用了此步骤,   ConstantContact v2 API非常聪明,知道不添加人员   多次出现在列表中,不会出错。
  14.   
<?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;

答案 2 :(得分:0)

仅是跟进Volomike的回答,这应该得到大家的认可,因此可以赞扬他的回答,这是我扩展的代码,其中涵盖了冲突错误。这是一种程序方法。随时写一个更好的。

请紧记,我不得不在最后一刻紧急解决某些问题。我不知道我在这里输入的内容可能是不必要的,或者可能写得更好。我只需要快速将其捣碎即可使用。如果有更完整,更清洁的方法,请随时将其作为答案并对此答案发表评论,以便我加您。

“ //用自己的替换”部分-有关整个开发人员帐户过程的信息,请参见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

答案 3 :(得分:0)

对于不幸使用 Constant Contact 进行简单电子邮件注册表单的可怜人,请节省自己的工作时间,只需这样做:

  1. 在 Constant Contact 仪表板中创建内联表单并将该表单添加到您的页面。

  2. 使用 CSS 尽可能快地隐藏那个傻瓜(display: none; 可以)。

  3. 创建您自己的漂亮表单(包括验证)并执行如下操作:

    $("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();
    });
    
  4. 为自己的所作所为羞愧地低下头。

  5. 享受您节省的所有时间。