1

我是编码和 Web 开发的新手,我希望我从未做过 API 深入研究!然而,据说我的进步超出了预期。我现在在尝试将自定义字段添加到添加联系人功能时遇到问题。当用户点击我的感谢页面时,我试图获取代码以添加隐藏的表单输入字段。我不想在我的主页上使用 Getresponses 自己的表单构建器,所以最好使用 API。在添加联系人时,我的代码运行完美,但是当我添加 set_contact_customs 时,代码不会执行并且失败并出现以下错误:(请求有返回错误:数组)所以我理解它与 set_contact_customs 数组有关但是我对我做错了什么一无所知.. 非常感谢任何建议和帮助,因为我仍在学习基础知识,因此掌握专家所说的内容是一个很好的学习曲线。谢谢。

--- 下面是没有 set_contact_customs 的工作版本 ----

<?php
// Add contact to selected campaign id
try{
$result_contact = $client->add_contact(
$api_key,
array (
'campaign' => 'My-Camp-ID',
'name' => $fullname,
'email' => $emailaddress
)
);

echo "<p style='color: blue; font-size:24px;'>No Errors, Contact and Custom Fields have been added...</p>";
}

catch (Exception $e) {

echo $e->getMessage();
}

?>

--- 这是导致问题的代码(使用 set_contact_customs)----

    <?php
// Add contact to selected campaign id
try{
$result_contact = $client->add_contact(
$api_key,
array (
'campaign' => 'My-Camp-ID',
'name' => $fullname,
'email' => $emailaddress
)
);
$result_contact = $client->set_contact_customs(
        $api_key,
            array(
                'Survey Type' => $surveytype,
                'Survey Cost' => $surveycost
                )
);
echo "<p style='color: blue; font-size:24px;'> Contact Added </p>";
}

catch (Exception $e) {

echo $e->getMessage();
}

?>
4

1 回答 1

4
  1. API 2 并不真正存在:在 GetResponse 中,他们说版本“1.5.0 - 这是我们 API 的最后一个 JSON/RPC 版本”,尤其是如果您在 10 个月前说的话。现在他们正准备对 v3 进行 beta 测试。所以我会假设你在谈论 1.5 并回答它(我不熟悉 v3,也许它不同)。

  2. 您必须使用 set_contact_customs 发送联系人 ID,而您没有。

  3. 当它说“请求错误:数组”时,它与您的数组无关(即使问题出在您的数组中,因为您没有发送联系人 ID),他们正在发送一个数组作为响应错误信息。

  4. 我很想告诉你,从哪里获取联系人 ID 以便发送,但我现在正在自己寻找它。:)

更新:

好的,我将它从互联网上的各个部分组合起来,现在这是工作格式。

  1. 您不需要 add_contact 然后更新它,您可以一次性完成,将 'customs' 参数添加到 add_contact 调用(GR 说,我们不应该期望立即添加联系人,所以您如果您立即调用该函数,甚至可能无法更新谁)。

    此处描述了 add_contact 的字段。

  2. 'customs' 参数应该看起来不同。代替:

    array(
        'Survey Type' => $surveytype,
        'Survey Cost' => $surveycost
        )
    

    它应该是:

    array(
        array( 'name' => 'Survey Type', 'content' => $surveytype ),
        array( 'name' => 'Survey Cost', 'content' => $surveycost )
        )
    

    顺便说一句,根据我的测试,幸运的是,您不需要先在 GR UI 中定义那些自定义字段,无论您发送什么,都将被添加或更新(在自定义字段名称和值的限制范围内)。

    调用 add_contact 时尝试发送一个内容为空的自定义字段时出现错误。当我用 set_contact_customs 发送它时,我没有收到任何错误;我想看看它是否会删除字段或字段值 - 它没有做任何事情。

  3. 如果您仍希望更新现有联系人,以下是如何通过更新调用发送联系人 ID:

    $result = $client->set_contact_customs(
       $api_key, array(
          'contact' => $contact_id,
          'customs' => $custom_fields_array
        )
    );
    
  4. 要首先找到联系人 ID,您应该调用get_contacts。既然有人说(我没有测试过),在不同的活动中,具有相同电子邮件地址的联系人具有不同的联系人 ID,您应该通过活动和带有它的电子邮件。

    如您所见,活动可以在“campaigns”参数中发送(然后应该使用您为 add_contact 获得的活动 id),或者在“get_campaigns”中(然后可以使用活动名称甚至前缀)。

    这是带有广告系列 ID 的调用,用于您的代码:

    $result = $client->get_contacts(
        $api_key, array(
           'campaigns' => array( 'My-Camp-ID' ),
           'email' => array( 'EQUALS' => $emailaddress )
        )
    );
    
  5. 要从 get_contacts 检索联系人 ID,请执行与检索活动 ID 相同的建议:

    $contact_id = array_pop( array_keys( $result ) );
    if ( empty( $contact_id ) ) {
        //still not ok
    }
    else {
        //you can call set_contact_customs
    }
    
  6. 为了使该错误消息更具描述性,而不仅仅是“请求返回错误:数组”,请打开您的 jsonRPCClient.php,您肯定会将其与这些 GR 函数调用一起包含在您的文件中,然后查找以下行:

    !is_null($response['error']) => 'Request have return error: ' . $response['error'],
    

    并将其替换为以下内容,至少:

    !is_null($response['error']) => 'Request have returned error: ' . var_export($response['error'], true),
    

    现在您的代码将使用心爱的var_export功能,如果您犯了错误,您将在错误日志中看到如下内容:

    Request have returned error: array (
      'message' => 'Invalid params',
      'code' => -32602,
    )
    

我将这个彻底的答案献给所有在 StackOverflow 上无休止地帮助我的人,他们只是在几年前回答别人的问题。谢谢!希望我的回答也能节省一些人的时间、精力和心情。:)

于 2016-04-21T21:45:44.360 回答