我是编码和网络开发的新手,并且使用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();
}
?>
答案 0 :(得分:4)
API 2并不存在:在GetResponse they say版本“1.5.0中 - 这是我们API的最后一个JSON / RPC版本”,特别是如果您在10个月前发言时。现在他们正准备进行beta测试v3。所以我假设你在谈论1.5并回答它(我不熟悉v3,也许它有所不同)。
您必须send contact id with set_contact_customs,而您却没有。
当它说“请求错误:数组”时,它与您的阵列无关(即使问题在您的阵列中,因为您没有发送它的联系人ID),他们正在发送一个数组作为带有错误消息的响应。
我很想告诉你,在哪里获取联系人ID以便发送,但我现在正在寻找它。 :)
更新:
好的,我把它从互联网上的各个部分组合起来,现在这是工作格式。
你不需要add_contact然后更新它,你可以一次性完成,将'customs'参数添加到add_contact调用(GR说,我们不应该期望联系到立即添加,如果你立即调用该功能,你可能甚至不会让谁更新。
add_contact的字段描述为here。
'海关'参数应该看起来不同。而不是:
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发送它时,我没有收到任何错误;我想看看,如果它会删除字段或字段值 - 它没有做任何事情。
如果您仍希望更新现有联系人,请按以下步骤通过更新电话发送联系人ID:
$result = $client->set_contact_customs(
$api_key, array(
'contact' => $contact_id,
'customs' => $custom_fields_array
)
);
要首先找到联系人ID,您应该致电get_contacts。并且由于已经说过(我还没有测试过),在同一个电子邮件地址的不同广告系列联系人中有不同的联系人ID,您应该同时传递广告系列和电子邮件。
当您can see时,广告系列可以通过“广告系列”参数发送(然后是广告系列ID,您应该使用add_contact,或者使用“get_campaigns”)(然后广告系列名称甚至前缀可以使用)。
以下是针对您的代码的广告系列ID调用:
$result = $client->get_contacts(
$api_key, array(
'campaigns' => array( 'My-Camp-ID' ),
'email' => array( 'EQUALS' => $emailaddress )
)
);
要从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
}
为了使该错误消息更具描述性,而不是仅仅“请求返回错误:数组”,打开您的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上无休止地帮助我的人,只是在几年前给别人的问题答案。谢谢!希望我的回答也会节省一些时间,精力和心情。 :)