将curl命令迁移到cakephp 3.0

时间:2017-04-20 17:32:59

标签: php curl salesforce cakephp-3.0

我正在尝试登录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是另一个解决方案论坛的主题。

0 个答案:

没有答案