Войдите в систему Salesforce, используя cURL в PHP - PullRequest
0 голосов
/ 27 июля 2011

Я создаю страницу входа, с которой я хотел бы подключиться к своей учетной записи 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. Если вы уже являетесь пользователем системы, пожалуйста, войдите ниже.

Может ли кто-нибудь сказать мне, что я делаю не так?

Ура!

Ответы [ 2 ]

1 голос
/ 27 июля 2011

urlencode () не является правильным методом для кодирования ваших данных, так как вы не передаете данные в URL.

CURL может взять массив и автоматически преобразовать данные в нем в POSTнабор данных.Вы не должны делать кодирование самостоятельно.Просто сделай

curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
0 голосов
/ 06 августа 2014

CURLOPT_POST принимает bool, а не количество полей, которые вы публикуете.

curl_setopt($ch, CURLOPT_POST, 1);

Кроме того, если служба использует файлы cookie для хранения сеансов, вам необходимо добавить файл cookie.С http://curl.haxx.se/libcurl/php/examples/cookiejar.html

Для первоначального запроса аутентификации:

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

И для последующих запросов с его использованием:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...