我有一个与zohoCRM有效的PHP集成,可以从网络表单中将引线插入到系统中。突然,这些表单不再起作用,并且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
错误之外我什么都得不到。有没有人碰到这个?
答案 0 :(得分:3)
我们以完全相同的方式向Zoho发帖,他们似乎工作正常(我只是运行它以确保它不是一个问题全面。)我唯一能想到的是确保使用斜杠和HTML实体正确转义XML中的值,以便XML有效。这可能是个问题,因为它似乎在说“无法读取你的XML”。
答案 1 :(得分: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
是我的代码中的问题,特别是cURL的密码CURLOPT_SSL_CIPHER_LIST
,所以只需添加选项用于指定密码,在这种情况下{0}用于Zoho:
rsa_rc4_128_sha
再次运行代码,一切都应该正常......:)
Ps:如果你想要你可以使用这个包装器,与zoho crm交互,我就用它...
Zoho CRM library for PHP 5.3+
希望有所帮助:)
答案 2 :(得分:0)
确保在CDATA括号中设置具有特殊字符的值的内容。 来自电子邮件的评论或价值通常就是这种情况。
像这样:
$ xml。=&#39;&lt; FL val="Description">
&lt; ![CDATA[" .$comments. "]]><
/ FL&gt;&#34;;