Php 为什么不将我的数据发送给salesforce?

Php 为什么不将我的数据发送给salesforce?,php,forms,curl,salesforce,drupal-6,Php,Forms,Curl,Salesforce,Drupal 6,我正在使用drupal表单构建联系我们表单 我想将我的联系方式数据发送给salesforce function contact_us_form_submit($form, $form_state){ $temp = $form_state['values']; $ch = curl_init(); foreach ($temp as $key => $value) { //Set array element for each POST variable (ie. first

我正在使用drupal表单构建联系我们表单

我想将我的联系方式数据发送给salesforce

function contact_us_form_submit($form, $form_state){

  $temp = $form_state['values'];
  $ch = curl_init();
  foreach ($temp as $key => $value) {

//Set array element for each POST variable (ie. first_name=Arsham)
$kv[] = stripslashes($key)."=".stripslashes($value);

}
  $query_string = join("&", $kv);


//The original form action URL from Step 2 :)
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';

//Open cURL 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($kv));
     curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
     curl_setopt($ch, CURLOPT_HEADER, FALSE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 $result = curl_exec($ch);

//close cURL connection
curl_close($ch);

}
我的“联系我们”窗体具有操作“”

我希望在发送给salesforce之前验证表单详细信息,因此我使用了hook_validate函数来验证表单

如果我在hook_菜单中直接提到#action,那么它会直接将数据发布到salesforce,但在发送之前不会验证数据

所以,我尝试使用cURL向salesforce发送数据

function contact_us_form_submit($form, $form_state){

  $temp = $form_state['values'];
  $ch = curl_init();
  foreach ($temp as $key => $value) {

//Set array element for each POST variable (ie. first_name=Arsham)
$kv[] = stripslashes($key)."=".stripslashes($value);

}
  $query_string = join("&", $kv);


//The original form action URL from Step 2 :)
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';

//Open cURL 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($kv));
     curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
     curl_setopt($ch, CURLOPT_HEADER, FALSE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 $result = curl_exec($ch);

//close cURL connection
curl_close($ch);

}
这是我的表格:

function contact_us_form($form_state){

     $form['orgid'] = array(
            '#name' => 'orgid',
            '#type' => 'hidden',
            '#value' => 'xxxxxx'
           );

     $form['retURL'] = array(
        '#name' => 'retURL',
        '#type' => 'hidden',
        '#value' => 'http://www.example.com'
       );

     $form['external'] = array(
        '#name' => 'external',
        '#type' => 'hidden',
        '#value' => '1'
       );

    $form['name'] = array(
        '#type' => 'textfield',
        '#size' => 40,
        '#id' => 'name',
        '#title' => t('First and Last Name'),
        '#prefix' => '<table><tr><td>',
        '#suffix' => '</td></tr>',
        '#required' => TRUE
       );

     $form['email'] = array(
        '#type' => 'textfield',
        '#size' => 40,
        '#id' => 'email',
        '#title' => t('Valid Email Address'),
        '#prefix' => '<tr><td>',
        '#suffix' => '</td></tr>',

       );
     $form['phone'] = array(
        '#type' => 'textfield',
        '#id' => 'phone',
        '#title' => t('Phone Number'),
        '#size' => 40,
        '#prefix' => '<tr><td>',
        '#suffix' => '</td></tr>'

    );

    $form['subject'] = array(
        '#type' => 'textfield',
        '#size' => 40,
        '#title' => t('Subject'),
        '#prefix' => '<tr><td>',
        '#suffix' => '</td></tr>'
    );

    $form['desc'] = array(
        '#type' => 'textarea',
        '#size' => 40,
        '#title' => t('Description1'),
        '#prefix' => '<tr><td>',
        '#suffix' => '</td></tr>'
    );

   $form['type'] = array(
        '#name' => 'type',
        '#type' => 'hidden',
        '#value' => 'Web-to-case'
       );

 //  // Adds a simple submit button that refreshes the form and clears its contents -- this is the default behavior for forms.
    $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
    '#prefix' => '<br><tr><td style="padding-left:150px;">',
    '#suffix' => '</td></tr></table>'
  ); 


  return $form;
}
以下是我的提交代码,该代码不起作用: 理想情况下,cURL调用不应该返回,因为我在表单中提到了retURL,retrurnurl将由salesforce设置。目前我没有被重定向到retURL。没有任何条目将转到salesforce

function contact_us_form_submit($form, $form_state){

  $temp = $form_state['values'];
  $ch = curl_init();
  foreach ($temp as $key => $value) {

//Set array element for each POST variable (ie. first_name=Arsham)
$kv[] = stripslashes($key)."=".stripslashes($value);

}
  $query_string = join("&", $kv);


//The original form action URL from Step 2 :)
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';

//Open cURL 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($kv));
     curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
     curl_setopt($ch, CURLOPT_HEADER, FALSE);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 $result = curl_exec($ch);

//close cURL connection
curl_close($ch);

}
我想你想要

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //returns response as data.
我知道这听起来很愚蠢,但您已经检查过是否安装了cURL,并且它是在php中启用的,对吗

您还应该尝试检查$result是否为false

if($result=== false)
{
    echo "Error Number:".curl_errno($ch)."<br>";
    echo "Error String:".curl_error($ch);
}
if($result==false)
{
echo“错误号:”.curl\u errno($ch)。“
”; echo“Error String:.curl_Error($ch); }

只是想看看是否有什么问题,比如你因为一些安全问题无法发布salesforce,比如你没有为你的帐户传递salesforce.com用户名和密码或API密钥。

你有没有考虑过Guzzle而不是cURL?它对开发人员更加友好。。。只是一个想法。感谢buddy对解决上述问题表现出兴趣,但Guzzle的集成需要一段时间。我不明白上面代码中缺少了什么?servlet.WebToLead通常用HTML响应,将用户浏览器重定向到retURL。您可能还会发现添加值为1的
debug
输入很有用。