我在这里做了一些有点奇怪的事情,我从我的本地数据库中查询数据并使用cURL将其发布到Salesforce表单。数据正确发布到Salesforce。但是,选择倍数未获得选择的正确值。请参阅我的代码中的$ sd [“location”]:
//init curl
$ch = curl_init();
//setup the params
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
$oid = "HIDDEN";
//setup the superdelegate array
$sd = array();
$sd["oid"] = $oid;
$sd["retURL"] = "";
$sd["first_name"] = "1144asdfsadf4";
$sd["last_name"] = "SDFSD1111";
$sd["state"] = "IL";
$sd["location"] = '"Chicago","New York","California"'; //this is the value that submits to the select multiple
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($sd));
//post to Salesforce and then close the connection
curl_exec($ch);
curl_close($ch);
已在Salesforce中设置了选择倍数,其中包含30个不同的位置。我正试图通过应该被选中的城市(芝加哥,纽约,加利福尼亚州)。你能帮我修改我的代码以使其正常工作吗?
答案 0 :(得分:7)
您尝试实施/复制的是非标准(或者如果您愿意的话,是“实验性”)application / x-www-form-urlencoded格式。 mime类型中的“x-”表示它尚未正式标准化。
我遇到的最常见的application / x-www-form-urlencoded格式是在HTML 4(可能是HTML 5)规范here中指定的。简化后,states每个successful control与其名称和当前值配对,按其在表单中显示的顺序排列,并用&符号“&”分隔。这将转换为包含以下内容的HTTP GET或POST方法:
name=test&desc=some%20description&option=1&option=2&option=3
您还应该在表单名称和值上使用PHP的urlencode函数,然后在HTTP请求的相应位置传递它,以符合RFC1738。
作为旁注,PHP虽然可能并不孤单,但在如何处理单个post var上的多个值方面却是一个奇怪的例子。它遵循HTML建议的规范,但如果其名称包含PHP array append operator,则将其扩展为仅将var视为多个,例如formname[]
。如果您尝试在PHP脚本上遵循HTML建议(请参阅下文),则在通过$_POST
或$_GET
超全局访问时,它将覆盖名称上的上一个值。
答案 1 :(得分:1)
我明白了。最终这样做了:
发送为“value1; value2”不起作用。即implode(“;”,$ array)或join()不起作用。
奇怪的是,不得不在POST字符串中拆分这样的值:
$ post_string。=“& the_field = value1 $ the_field =数值 $ the_field =值3" ;
现在工作正常。
答案 2 :(得分:0)
$sd['location']
如果是一个倍数,应该是一个数组。例如:
$location = str_replace('"', '', '"Chicago","New York","California"');
$sd['location'] = explode(',', $location);
但是,您需要确保不要将值与标签混淆。如果使用以下内容构建salesforce,Salesforce将期望价值而不是标签:
1 = Antwerp
2 = California
...
29 = Whatever
然后您需要传递键值而不是实际的城市名称。我不知道你的销售人员的东西是什么样的,所以你必须弄清楚: - )
答案 3 :(得分:0)
我也尝试向Salesforce发送多个选择值,但我的代码看起来略有不同,我不确定如何实现您的解决方案。它确实是我能在网上找到的唯一解决方案,所以我希望你可以帮助我。这就是我的字段数组的样子:
//set POST variables
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
$fields = array(
'oid'=>urlencode($oid),
'00NE0000003yZ9B'=>urlencode($Lead_Source_Email),
'00NE0000004hd4z'=>urlencode($Personal_Challenges),
'recordType'=>urlencode($recordType),
'retURL'=>urlencode($retURL),
'first_name'=>urlencode($first_name),
'last_name'=>urlencode($last_name),
'email'=>urlencode($email),
'phone'=>urlencode($phone),
//'00NE0000003uZ4G'=>urlencode($Contact_By),
'00NE0000003uZ9X'=>urlencode($Message)
);
$Personal_Challenges
是具有多个值的选择框中的字段。老实说,我并不了解所有代码,但接下来就是这样:
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//print_r($fields_string);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
我很乐意给你任何帮助!很抱歉在回答中提出这个问题,但显然我无法直接在StackOverflow上发消息。
干杯!
答案 4 :(得分:0)
我看到这篇文章太旧了,但以防万一:
我们必须为它准备字符串
curl_setopt($ch, CURLOPT_POSTFIELDS, $str_fields);
我们可以准备像:
这样的数组$fields = array('f1' => 'v1', f2 =>['v21', 'v22', 'v23'], 'f3' =>'v3' );
$fields = http_build_query($fields);
它给出:f1 = v1& f2%5B0%5D = v21& f2%5B1%5D = v22& f2%5B2%5D = v23& f3 = v3 我们需要清除像“%5B0%5D”这样的字符
$str_fields=preg_replace("/(%5[A-F]\d{0,})/" ,"",$fields);
我们得到f1 = v1& f2 = v21& f2 = v22& f2 = v23& f3 = v3
多数人。