Salesforce REST API with PHP, INVALID_SESSION_ID 成功验证后
Salesforce REST API with PHP, INVALID_SESSION_ID after successful authentication
我将我的网络应用程序连接到 salesforce,并成功按照网络服务器 OAuth 流程中的所有步骤获取 access_token 和相关信息:
https://developer.salesforce.com/docs/atlas.en-us.api_placeorder.meta/api_placeorder/intro_understanding_web_server_oauth_flow.htm
每一步似乎 return 文档中指定的预期结果集,但是当我尝试使用最终访问令牌发出请求时,我收到一条错误消息,指出我的会话 ID 无效。这是我的代码:
// Execute a request for access_token and related info
$output = json_decode(curl_exec($ch));
curl_close($ch);
var_dump($output);
// Extract token and instance_url from output
$sf_url = $output->instance_url . '/services/data/v35.0/';
$sf_auth = 'Bearer ' . $output->access_token;
// Execute a new cURL request with auth values
$ci = curl_init();
curl_setopt($ci, CURLOPT_URL, $sf_url);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ci, CURLOPT_HTTPHEADER, array(
'Accept' => '*/*',
'Authorization' => $sf_auth,
'X-PrettyPrint' => 1
));
$output2 = curl_exec($ci);
curl_close($ci);
var_dump($output2);
$output 的转储给出:
object(stdClass)#194 (7) {
["access_token"]=> string(112) "xxxxxxxxxxxxxxxx"
["signature"]=> string(44) "xxxxxxxxxxxxxx"
["scope"]=> string(3) "api"
["instance_url"]=> string(27) "https://cs10.salesforce.com"
["id"]=> string(68) "https://test.salesforce.com/id/xxxxx/xxxxx"
["token_type"]=> string(6) "Bearer"
["issued_at"]=> string(13) "1453358xxxxxx" }
$output2 的转储给出:
string(75) "[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]"
如有任何帮助,我们将不胜感激。
* 更新 *
我也尝试过使用用户名-密码身份验证流程,但得到了相同的结果。我可以获得访问令牌,但我无法查询数据库,并且 returned 的错误与 INVALID_SESSION_ID.
相同
我为 chrome 使用了 Postman 插件,为用户名-密码流传递了所有相同的信息,它适用于进行查询。我不确定有什么不同,似乎所有传递的数据都是一样的。
我找到了答案,我设置 curl 的语法错误 headers。我试图将值作为关联数组传递,但正确的方法是这样的:
curl_setopt($ci, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Authorization:' . $sf_auth,
'X-PrettyPrint:1'
));
我将我的网络应用程序连接到 salesforce,并成功按照网络服务器 OAuth 流程中的所有步骤获取 access_token 和相关信息: https://developer.salesforce.com/docs/atlas.en-us.api_placeorder.meta/api_placeorder/intro_understanding_web_server_oauth_flow.htm
每一步似乎 return 文档中指定的预期结果集,但是当我尝试使用最终访问令牌发出请求时,我收到一条错误消息,指出我的会话 ID 无效。这是我的代码:
// Execute a request for access_token and related info
$output = json_decode(curl_exec($ch));
curl_close($ch);
var_dump($output);
// Extract token and instance_url from output
$sf_url = $output->instance_url . '/services/data/v35.0/';
$sf_auth = 'Bearer ' . $output->access_token;
// Execute a new cURL request with auth values
$ci = curl_init();
curl_setopt($ci, CURLOPT_URL, $sf_url);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ci, CURLOPT_HTTPHEADER, array(
'Accept' => '*/*',
'Authorization' => $sf_auth,
'X-PrettyPrint' => 1
));
$output2 = curl_exec($ci);
curl_close($ci);
var_dump($output2);
$output 的转储给出:
object(stdClass)#194 (7) {
["access_token"]=> string(112) "xxxxxxxxxxxxxxxx"
["signature"]=> string(44) "xxxxxxxxxxxxxx"
["scope"]=> string(3) "api"
["instance_url"]=> string(27) "https://cs10.salesforce.com"
["id"]=> string(68) "https://test.salesforce.com/id/xxxxx/xxxxx"
["token_type"]=> string(6) "Bearer"
["issued_at"]=> string(13) "1453358xxxxxx" }
$output2 的转储给出:
string(75) "[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]"
如有任何帮助,我们将不胜感激。
* 更新 *
我也尝试过使用用户名-密码身份验证流程,但得到了相同的结果。我可以获得访问令牌,但我无法查询数据库,并且 returned 的错误与 INVALID_SESSION_ID.
相同我为 chrome 使用了 Postman 插件,为用户名-密码流传递了所有相同的信息,它适用于进行查询。我不确定有什么不同,似乎所有传递的数据都是一样的。
我找到了答案,我设置 curl 的语法错误 headers。我试图将值作为关联数组传递,但正确的方法是这样的:
curl_setopt($ci, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Authorization:' . $sf_auth,
'X-PrettyPrint:1'
));