我正在尝试登录salesforce.com API。在this教程后我能够这样做,但是在将我的代码迁移到cakephp 3时,我得到了相同的访问被拒绝响应。
登录凭据有效,如果我这样做:
curl -X POST \
https://login.salesforce.com/services/oauth2/token \
-d 'grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD}'
我获得了有效的会话令牌等。
以下是我目前使用的代码,但没有运气:
//USING CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.salesforce.com/services/oauth2/token");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD}");
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($ch);
debug($status); //(int) 400
debug($result); //'{"error":"invalid_grant","error_description":"authentication failure"}'
//使用CAKEPHP HTTPCLIENT
$data = [
"grant_type" => "password",
"client_id" => {CLIENT_ID},
"client_secret" => {CLIENT_SECRET},
"username" => {USERNAME},
"password" => {PASSWORD},
];
$http = new Client();
$response = $http->post("https://login.salesforce.com/services/oauth2/token", $data);
debug($response->body()); //'{"error":"invalid_grant","error_description":"authentication failure"}'
任何帮助都将不胜感激。
- 已解决 -
我实际上解决了这个问题。似乎Salesforce需要TLSv 1.1(或)TLSv1.2来回复令牌。我的MAMP卷曲php版本使用TLSv 1.0,我的终端卷曲版本使用TLSv1.2。这就是为什么它在终端上工作而不是php。
Here是另一个解决方案论坛的主题。