Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用cURL登录Salesforce_Php_Curl_Login_Salesforce - Fatal编程技术网

在PHP中使用cURL登录Salesforce

在PHP中使用cURL登录Salesforce,php,curl,login,salesforce,Php,Curl,Login,Salesforce,我正在构建一个登录页面,我想从这里连接到我的salesforce.com帐户。 这个想法是,如果用户名/密码错误,我会将用户留在我的网站上,否则我会将其重定向到salesforce面板 为了检查用户名密码是否存在,我使用Salesforce PHP工具包。当我看到用户输入了合法帐户时,我使用cURL将用户名和密码发布到应该处理登录的表单中 下面是一些代码: $url = 'https://login.salesforce.com/'; $fields = array( 'userna

我正在构建一个登录页面,我想从这里连接到我的salesforce.com帐户。 这个想法是,如果用户名/密码错误,我会将用户留在我的网站上,否则我会将其重定向到salesforce面板

为了检查用户名密码是否存在,我使用Salesforce PHP工具包。当我看到用户输入了合法帐户时,我使用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登录页面的源代码,查看它需要哪些post值,并将其放入上面的代码中

问题是,每当我输入一个有效的帐户时,它都会将我重定向到salesforce.com的登录页面(因此我没有登录)

您试图访问需要salesforce.com登录的页面。如果您已经是系统的用户,请在下面登录

谁能告诉我我做错了什么

干杯

urlencode()不是对数据进行编码的合适方法,因为您没有在URL中传递数据

CURL可以获取一个数组,并自动将其中的数据转换为可发布的数据集。您不必自己进行编码。干脆

curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

CURLOPT_POST
采用bool,而不是您发布的字段数

curl_setopt($ch, CURLOPT_POST, 1);
此外,如果服务使用cookie进行会话存储,则需要添加cookie jar。从

对于初始身份验证请求:

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName");
对于后续使用它的请求:

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

谢谢你的提示!但这并不能解决我的问题。