本地可以工作,但在生产中它返回 403。相同的 PHP 和 Laravel 版本。有什么我可以做的吗?
$url = 'https://admin.appmax.com.br/api/v3/order/'.$order_id.'?access-token='.$token;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($curl);
curl_close($curl);`
我做了所有测试,它不仅仅在生产中有效。
您将 CURLOPT_POST 设置为 true,这表明您要发送 POST 请求,但您还将 CURLOPT_CUSTOMREQUEST 设置为“GET”,这表明您要发送 GET 请求。您应该删除 CURLOPT_POST 选项,因为您正在发送 GET 请求。
您都没有将访问令牌作为标头传递。您将其作为 URL 中的查询参数传递。
此外,在使用curl_error 处理响应之前检查响应是否有错误。
以下应该有效。
$url = 'https://admin.appmax.com.br/api/v3/order/'.$order_id.'?access-token='.$token;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($curl);
if ($response === false) {
echo 'cURL Error: ' . curl_error($curl);
return;
}
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode != 200) {
echo 'Error: ' . $httpCode;
return;
}
curl_close($curl);
// process $response
问题是服务器权限,他们解决了。谢谢。