0
我試圖登錄到我的Salesforce帳戶並檢索一些數據。到目前爲止,我已經能夠通過在Salesforce登錄頁面上提供用戶名和密碼登錄到Salesforce,然後重定向到我有一些echo
語句的數據頁面。我想知道如何在PHP本身設置用戶名和密碼,併成功通過Salesforce登錄。我使用Salesforce提供的此文檔,Interact with the Force.com REST API from PHP如何使用Rest API在Salesforce登錄的PHP腳本中設置用戶名和密碼
請幫忙。
以下是我config.php
<?php
ini_set('display_errors',1);
error_reporting(E_ALL^E_WARNING);
define("CLIENT_ID", "xxx");
define("CLIENT_SECRET", "xxx");
define("REDIRECT_URI", "https://xxxx/oauth_callback.php");
define("LOGIN_URI", "https://login.salesforce.com");
define("USERNAME","[email protected]");
define("PASSWORD","*******");
define("SECURITY_TOKEN","xxxx");
?>
以下是我oauth.php
<?php
require_once 'config.php';
$auth_url = LOGIN_URI
. "/services/oauth2/authorize?response_type=code&client_id="
. CLIENT_ID . "&redirect_uri=" . urlencode(REDIRECT_URI);
header('Location: ' . $auth_url);
?>
以下是我oauth_callback.php
<?php
require_once 'config.php';
session_start();
$token_url = LOGIN_URI . "/services/oauth2/token";
$code = $_GET['code'];
if (!isset($code) || $code == "") {
die("Error - code parameter missing from request!");
}
$params = "code=" . $code
. "&grant_type=authorization_code"
. "&client_id=" . CLIENT_ID
. "&client_secret=" . CLIENT_SECRET
. "&username=" . USERNAME
. "&password=" . PASSWORD
. "&redirect_uri=" . urlencode(REDIRECT_URI);
$curl = curl_init($token_url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status != 200) {
die("Error: call to token URL $token_url failed with status $status, response $json_response curl_error " . curl_error($curl) . " curl_errno " . curl_errno($curl));
}
curl_close($curl);
$response = json_decode($json_response, true);
$access_token = $response['access_token'];
$instance_url = $response['instance_url'];
if (!isset($access_token) || $access_token == "") {
die("Error - access token missing from response!");
}
if (!isset($instance_url) || $instance_url == "") {
die("Error - instance URL missing from response!");
}
$_SESSION['access_token'] = $access_token;
$_SESSION['instance_url'] = $instance_url;
header('Location: demo_rest.php') ;
?>
以下是我demo_rest.php
(顯示輸出)
$query = "SELECT Id FROM test__c limit 3";
$url = "$instance_url/services/data/v20.0/query?q=" . urlencode($query);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Authorization: OAuth $access_token"));
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
$json_response = curl_exec($curl);
curl_close($curl);
$response = json_decode($json_response, true);
$total_size = $response['totalSize'];
echo "$total_size record(s) returned<br/><br/>";
echo "<br/>";
print_r($json_response);
@Ozgur事情是我的代碼正在工作。問題是,我手動必須通過Salesforce登錄頁面提供用戶名和密碼。我想從PHP腳本本身設置用戶名和密碼,而不用重定向到Salesforce登錄頁面,輸出數據。 但是當我嘗試你的代碼時,它仍然重定向到salesforce登錄頁面! –
@NisalMalindaLivera你可能想看看下面的鏈接或類似的文檔 - > https://labs.hybris.com/2012/06/18/trying-out-oauth2-via-curl/ –