2015-05-05 34 views
0

我正在使用drupal表單建立聯繫我們表單。爲什麼cURL不將數據發送給salesforce?

我想將聯繫我們的數據發送給salesforce。

我聯繫我們表單有動作「https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8」。

我想在發送給salesforce之前驗證表單詳細信息,因此我使用驗證表單的hook_validate函數。

如果我直接提到hook_menu中的#action,那麼它會直接將數據發佈到salesforce,但在發送之前不會對其進行驗證。

所以,我想用cURL向salesforce發送數據。

這裏是我的形式:

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; 
} 

形式是正確redering。以下是我的驗證功能:

function contact_us_form_validate($form, $form_state) { 
    //logic to check fields.  
} 

以下是我提交的代碼,不工作: 理想捲曲通話不應該回來,因爲我已經在表中提及retURL和retrurn URL將被銷售人員設定。目前我沒有重定向到retURL.NO,任何入口都將銷售給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); 

} 
+0

你看過像Guzzle而不是cURL的東西嗎?它對開發人員更友好...只是一個想法。 – geggleto

+0

感謝兄弟表示有興趣解決上述問題,但在Guzzle上集成需要一些時間。我沒有得到上述代碼中缺少的內容? – Akki

+0

servlet.WebToLead通常用HTML響應以將用戶瀏覽器重定向到retURL。你也可能發現添加值爲1的'debug'輸入有用。 –

回答

0

我想你想......

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //returns response as data. 

我知道這聽起來很愚蠢,但你必須檢查,看看是否你已經安裝了捲曲,它是在PHP正確啓用?

此外,你應該嘗試檢查$結果爲false。

if($result=== false) 
{ 
    echo "Error Number:".curl_errno($ch)."<br>"; 
    echo "Error String:".curl_error($ch); 
} 

只是爲了看看東西了,就像你不能發佈銷售隊伍的,因爲一些安全的事情,就像你不會在你的salesforce.com用戶名和密碼,或爲您的帳戶API密鑰傳遞。

相關問題