2017-04-17 13 views
0

Salesforceアカウントにログインしてデータを取得しようとしています。これまでSalesforceのログインページにユーザー名とパスワードを入力し、echo文があるデータページにリダイレクトすることでSalesforceにログインできました。私はPHP自体でユーザー名とパスワードを設定し、Salesforceのログインを成功させる方法を知りたいのですが、Salesforceが提供するこのドキュメントを使用しました。Interact with the Force.com REST API from PHPRest 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); 

答えて

0

問題demo_rest.phpファイルで変数$ instance_idと$ access_tokenの値を取得できません。

demo_rest.phpファイルのコードを下記のものに置き換えてください。

<?php 
session_start(); 

$access_token = $_SESSION['access_token']; 
$instance_url = $_SESSION['instance_url']; 

$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); 
?> 

これが機能しない場合は、私にコメントを残してください。

+0

@Ozgur問題は私のコードが動作していることです。問題は、Salesforceのログインページから手動でユーザー名とパスワードを入力する必要があることです。 PHP Script自体からユーザー名とパスワードを設定し、Salesforceログインページにリダイレクトせずにデータを出力したいと思います。 しかし、あなたのコードを試しても、まだsalesforceログインページにリダイレクトされています! –

+0

@ NisalMalindaLivera次のリンクや類似のドキュメントを見てみたいかもしれません - > https://labs.hybris.com/2012/06/18/trying-out-oauth2-via-curl/ –

関連する問題