2017-04-17 2 views
0

J'essaie de me connecter à mon compte Salesforce et de récupérer certaines données. Jusqu'à présent, j'ai pu me connecter à Salesforce en fournissant le nom d'utilisateur et le mot de passe sur la page de connexion de Salesforce, puis en redirigeant vers la page de données dont j'ai quelques instructions echo. Je veux savoir comment définir le nom d'utilisateur et mot de passe dans PHP lui-même, et faire une connexion réussie Salesforce.J'ai utilisé cette documentation fournie par Salesforce, Interact with the Force.com REST API from PHPComment définir un nom d'utilisateur et un mot de passe dans un script PHP pour une connexion Salesforce à l'aide de Rest API

S'il vous plaît aider.

Après est mon 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"); 

?> 

Après est mon 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); 
?> 

suivant est mon 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') ; 
?> 

suivant est mon demo_rest.php (montre la sortie)

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

Répondre

0

Problème est que vous ne pouvez pas obtenir les valeurs des variables $ instance_id et $ access_token sur votre fichier demo_rest.php.

Remplacez le code de votre fichier demo_rest.php par celui ci-dessous.

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

Si cela ne fonctionne pas, laissez-moi un commentaire.

+0

@Ozgur Le truc, c'est que mon code fonctionne. Le problème est que je dois fournir manuellement le nom d'utilisateur et le mot de passe via la page de connexion de Salesforce. Je veux définir le nom d'utilisateur et le mot de passe du script PHP lui-même et sans rediriger vers la page de connexion de Salesforce, sortir les données. Mais quand j'essaye votre code, il redirige toujours vers la page de connexion de Salesforce! –

+0

@NisalMalindaLivera vous voudrez peut-être jeter un oeil sur le lien suivant, ou des documents similaires -> https://labs.hybris.com/2012/06/18/trying-out-oauth2-via-curl/ –