我正在使用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);
}
你看過像Guzzle而不是cURL的東西嗎?它對開發人員更友好...只是一個想法。 – geggleto
感謝兄弟表示有興趣解決上述問題,但在Guzzle上集成需要一些時間。我沒有得到上述代碼中缺少的內容? – Akki
servlet.WebToLead通常用HTML響應以將用戶瀏覽器重定向到retURL。你也可能發現添加值爲1的'debug'輸入有用。 –