簡體   English   中英

在PHP中使用cURL登錄Salesforce

[英]Log in Salesforce using cURL in PHP

我正在建立一個登錄頁面,從這里我想連接到我的salesforce.com帳戶。 想法是,如果用戶名/密碼錯誤,我會將用戶留在我的網站上,否則我會將其重定向到salesforce面板。

要檢查用戶名密碼是否存在,我使用Salesforce PHP Toolkit。 當我看到用戶輸入了合法帳戶時,我使用cURL將用戶名和密碼發布到應該處理登錄的表單中。

這是一些代碼:

$url = 'https://login.salesforce.com/';
$fields = array(
      'username' => urlencode($username),
      'pw' => urlencode($pw),
      'un' => urlencode($username),
      'width' => urlencode($width),
      'height' => urlencode($height),
      'hasRememberUn' => urlencode(true),
      'startURL' => urlencode(''),
      'loginURL' => urlencode(''),
      'loginType' => urlencode(''),
      'useSecure' => urlencode(true),
      'local' => urlencode(''),
      'lt' => urlencode('standard'),
      'qs' => urlencode(''),
      'locale' => urlencode('uk'),
      'oauth_token' => urlencode(''),
      'login' => urlencode(''),
      'serverid' => urlencode(''),
      'display' => urlencode('page')
  );

  $fields_string =''; 
  foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
  rtrim($fields_string,'&');
  $ch = curl_init();

  /* Set the url, number of POST vars, POST data */
  curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
  curl_setopt($ch, CURLOPT_POST,count($fields));
  curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

  $result = curl_exec($ch);
  curl_close($ch);

我檢查了salesforce.com登錄頁面的源,以查看它需要什么帖子值,並將其放在上面的代碼中。

問題是,每當我輸入有效的帳戶時,它會將我重定向到salesforce.com的登錄頁面(因此我沒有登錄)

您試圖訪問需要salesforce.com登錄的頁面。 如果您已經是該系統的用戶,請在下面登錄。

誰能告訴我我在做什么錯?

干杯!

urlencode()不是正確的數據編碼方法,因為您沒有在URL中傳遞數據。

CURL可以采用一個數組,並將其中的數據自動轉換為可發布POST的數據集。 您不必自己進行編碼。 簡單地做

curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

CURLOPT_POST需要一個布爾值,而不是您要發布的字段數。

curl_setopt($ch, CURLOPT_POST, 1);

另外,如果該服務使用cookie進行會話存儲,則需要添加一個cookie jar。 來自http://curl.haxx.se/libcurl/php/examples/cookiejar.html

對於初始身份驗證請求:

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName");

對於使用它的后續請求:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM