0

嗨,我想将一个简单的 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

4 回答 4

1

Constant Contact由于简单表单引起的安全问题(因此缺乏在线示例),因此通常不允许像这样的非常简单的表单。也就是说,他们提供了一个注册表单生成器

这不需要您编写代码,只需访问您尝试添加代码的网页/服务器即可。表单生成器可能是您最好和最快的选择,但如果您想走这条路,您也可以使用API-通用 API 文档来帮助您入门(请参阅主页上的代码示例链接)。

我希望这会有所帮助!

香农 W。

CTCT API 支持

于 2012-08-27T14:08:37.577 回答
1

这个简单的 PHP 示例应该对您有所帮助。您必须注册一个开发人员帐户,然后在确认该注册链接(通过电子邮件)后,您可以登录并转到开发人员门户中的应用程序和 API 密钥选项卡以创建一个新应用程序,然后它会为您提供你需要的钥匙。至于获取 List ID,请单击 Developer Portal 中的 API Tester 选项卡,输入您的 Access Token,不要单击 Get Access Token,然后向下滚动并查找“Retrieve a collection of ContactLists”。单击该链接,然后单击 Try It 按钮。它将返回您设置的每个列表以及它们的数字 ID。

请注意,下面还有一个“ssl”数组块。在我的案例中,我发现它在有和没有那个块的情况下都可以工作,但仍然通过 HTTPS 运行事务。

有关用于添加联系人的 JSON 块的更多信息,它有更多用于添加联系人的选项,您可以在在线文档上阅读相关信息。需要注意的一个重要的额外 JSON 属性变量是confirmed属性。

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

  1. 更改下面的代码,以便添加'ignore_errors' => TRUE到 http 数组中。
  2. 如果响应包含already exists,则这意味着该电子邮件已经在该帐户中,并且如果没有该解决方法,它将不允许您将其添加到该列表中。所以请继续阅读......
  3. 捕获那个条件。
  4. 使用/contacts API 上的 HTTP GET通过给定的电子邮件地址获取联系人 ID ,并传递它?email=$sEmail&status=ALL&limit=1&api_key=$sAPIKey
  5. 使用/contacts/{contactId} API 上的 HTTP GET通过给定的联系人 ID 获取联系人 JSON 对象, 并用于json_decode()将其转换为 PHP 中的对象。
  6. 修改联系人 JSON 对象,以便您附加一个新的列表 ID$oJSON->lists[] = (object) array('id'=>'' . $sListID);
  7. 现在保存带有新列表添加的单个联系人。为此,请将联系人 JSON 对象转换为 JSON 字符串,并使用/contacts/{contactId} API 上的 HTTP PUT更新联系人。即使您不小心多次调用此步骤,ConstantContact v2 API 也足够聪明,知道不会多次将人员添加到列表中,也不会出错。
<?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;
于 2018-08-04T04:12:09.460 回答
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. 享受您节省的所有时间。

于 2021-03-26T00:37:07.270 回答
0

只是为了跟进 Volomike 的回答,这应该在这里得到所有的赞誉,所以要支持他,这是我的扩展代码,涵盖了冲突错误。这是一种程序方法。随意写一个更好的。

请记住,我必须将其作为危机的最后一分钟热修复来处理。我不知道我在这里放了什么可能是不必要的或者可以写得更好。我只需要快速将其捣碎即可使其正常工作。如果有更完整,更清洁的方法,请随时将其写为答案并对此答案发表评论,以便我加你。

//REPLACE WITH YOUR OWN 部分 - 请参阅 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
于 2019-06-18T21:03:17.900 回答