2

我与 zohoCRM 进行了有效的 PHP 集成,以将潜在客户从 Web 表单插入系统。突然,这些表单不再起作用,并且 Zoho 错误消息中没有有用的调试信息。这是代码:

$xml  = '<?xml version="1.0" encoding="UTF-8"?>'; // same error with or without this line
$xml .= '<Leads>';
$xml .= '<row no="1">';
if(isset($fname)) $xml .= '<FL val="First Name">'.$fname.'</FL>';
if(isset($lname)) $xml .= '<FL val="Last Name">'.$lname.'</FL>';
if(isset($post['sender_email'])) $xml .= '<FL val="Email">'.$post['sender_email'].'</FL>';
$xml .= '<FL val="Lead Source">Web Research</FL>';
if(isset($phone)) $xml .= '<FL val="Phone">'.$phone.'</FL>';
$xml .= '<FL val="Description">'.$comments.'</FL>';
$xml .= '</row>';
$xml .= '</Leads>';

/*
var_dump($xml) returns:
<?xml version="1.0" encoding="UTF-8"?><Leads><row no="1"><FL val="First Name">Joe</FL><FL val="Last Name">Smith</FL><FL val="Email">smith@example.com</FL><FL val="Lead Source">Web Research</FL><FL val="Phone">123-456-5678</FL><FL val="Description">My comments</FL></row></Leads>
*/

$url ="https://crm.zoho.com/crm/private/xml/Leads/insertRecords";
$query="authtoken=validtoken&scope=crmapi&newFormat=1&xmlData=".$xml;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);// Set the request as a POST FIELD for curl.

//Execute cUrl session
$response = curl_exec($ch);
curl_close($ch);
var_dump( $response );

// returns 4600 Unable to process your request. Please verify if the name and value is appropriate for the "xmlData" parameter. 

似乎无论我尝试什么(并且我在一天的大部分时间里都尝试了很多),除了这个无用的4600错误之外,我什么也得不到。有没有人遇到过这个?

4

3 回答 3

3

我们以完全相同的方式向 Zoho 发布帖子,它们似乎运行良好(我只是运行它以确保它不是全面的问题。)我唯一能想到的就是确保值在您的 XML 中使用斜杠和 HTML 实体正确转义,因此 XML 有效。这可能是问题所在,因为它似乎在说“无法读取您的 XML”。

于 2013-04-24T20:03:52.453 回答
1

我以前遇到过同样的问题,这就是您的代码对我有用的方式...

所以运行你的代码给我4600错误代码,你的代码就可以了,所以我仔细获取了有关错误的更具体信息(只是添加curl_error函数,在发出请求之后和关闭它之前),如下所示:

// ...
//Execute cUrl session
$response = curl_exec($ch);
print_r(curL_error($ch)); // Right here
curl_close($ch);
var_dump( $response );

它会给你真正的原因,在这种情况下SSL connect error是你的代码的问题,特别是CURLOPT_SSL_CIPHER_LISTcURL 的密码,所以只需添加指定密码的选项,在这种情况下rsa_rc4_128_sha是 Zoho:

// ...
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);// Set the request ...
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'rsa_rc4_128_sha'); // NEW

//Execute cUrl session
$response = curl_exec($ch);

再次运行代码,一切都应该正常工作...... :)

Ps:如果你想你可以使用这个包装器,为了与 zoho crm 交互,我用它......

适用于 PHP 5.3+ 的 Zoho CRM 库

希望有所帮助:)

于 2014-03-21T16:17:48.097 回答
0

确保具有特殊字符的值的内容设置在 CDATA 括号中。来自电子邮件的评论或值通常是这种情况。

像这样:

$xml .= ' FL val="Description"><< ![CDATA[" .$comments. "]]></FL>";

于 2016-01-26T18:50:54.653 回答