PHP中的cURL输出

问题描述:

我有这个卷曲输出,用我的id,秘密和url替换。它给出了正确的回应。PHP中的cURL输出

curl -XPOST -H "Cache-Control:no-cache" -H "Content-Type:application/json" --user 'id:secret' 'url' 

但是,当我试图把它写在PHP以下面的方式,它给错误无效cleint。如何在php中以相同的方式重写上面的输出curl?谢谢!

$url = 'https://test.api.neteller.com/v1/oauth2/token?grant_type=client_credentials'; 
$clientId = 'client_id; 
$clientSecret = 'secret_id';  
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_USERPWD, $clientId . ":" . $clientSecret); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($curl); 
curl_close($curl); 

它给错误 - '无效cleint',但是当我在控制台中运行它时,它会返回访问令牌。此代码仅用于访问令牌,不用于付款。

编辑:我当前的代码是:

$url ='https://test.api.neteller.com/v1/oauth2/token?grant_type=client_credentials'; 
 
$clientId = NETELLER_CLIENT_ID; 
 
$clientSecret = NETELLER_CLIENT_SECRET; 
 
$curl = curl_init($url); 
 
curl_setopt($curl, CURLOPT_POST, true); 
 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
 
curl_setopt($curl, CURLOPT_HEADER, false); 
 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
 

 
$headers = array(
 
'Authorization: Basic '. base64_encode($clientId) . ':' . base64_encode($clientSecret), 
 
'Content-Type:application/json' 
 
); 
 

 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
 
$response = curl_exec($curl); 
 
if (curl_error($curl)) { 
 
curl_close($curl); 
 
throw new \Exception('System error. Can not get neteller token'); 
 
} 
 
curl_close($curl);

+0

你得到了什么错误? –

+0

我编辑了我的问题 –

+0

完整的错误消息以及curl错误号。请。 –

尝试添加凭据作为头部的一部分。

$headers = array(
     'Authorization: Basic '. base64_encode($clientID . ':' . $clientSecret), 
     'Content-Type:application/json' 
    ); 

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
+0

我试过了,但还是显示出这样的回应:'''string(31)“{”error“:”invalid_client“ }”''' –

+0

尝试将“Content-Type:application/json”添加到头,也许该web服务不允许与“应用程序/ json”不同的内容类型的请求 –

+0

我试过了,仍然是相同的响应。我会更新我的问题以显示我目前的代码。 –

好吧,我发现了。

更新:

有4个原因试图运行你的代码时,你可能会得到{ "error": "invalid_client" }

  1. 您正在生产环境中使用来自您的测试帐户的client_id + client_secret,反之亦然。
  2. 您的client_id或client_secret值是错误的。
  3. 您的应用程序发出传出请求的IP地址未在商户帐户中列入白名单。
  4. 您没有正确发送授权标头。
  5. 您错过了curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type:application/json", "Cache-Control:no-cache"));从您的代码。
+0

我在我的测试商家帐户中锁住了我提出的请求,并且在开发者设置中启用了安全IP,并且我有:您的商户帐户安全IP地址:在这里我列出了IP地址和我的IP地址,当我悬停它说:它不能删除你当前的IP地址。 –

+0

您用于测试的命令行curl请求是从您用于开发(Same IP)的同一台计算机执行的? –

+0

是的,相同的IP,同一台机器。当我在我的问题中发布命令行curl请求时,它返回令牌,但是当我尝试使用此php curl代码时,它返回'无效客户端'。 –