Я немного повозился с вашей функцией curl, немного переместил некоторые вещи и добавил пару вещей - одна вещь - это улучшенная отладочная информация в выходных данных, а другая - использование cainfo
в SSL опции. Надеюсь, это поможет
function restRequestDispute($method, $endpoint, $data, $content_type, $token){
try{
/* you can freely download cacert.pem from the internet - always use when performing SSL communications in cURL */
$cacert = '/path/to/your/cacert.pem';
/* add additional debug info to this stream */
$vbh = fopen('php://temp', 'w+');
$method = strtoupper( $method );
$ch = curl_init( $endpoint );
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(
"Authorization: Bearer " . $token,
"Content-type: $content_type",
"Accepts: application/json"
)
);
if( parse_url( $endpoint,PHP_URL_SCHEME )=='https' ){
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $ch, CURLOPT_CAINFO, $cacert );
}
/* set the options for enhanced debugging */
curl_setopt( $ch, CURLOPT_VERBOSE, true );
curl_setopt( $ch, CURLOPT_NOPROGRESS, true );
curl_setopt( $ch, CURLOPT_STDERR, $vbh );
switch( $method ) {
case "GET":
curl_setopt($ch, CURLOPT_HTTPGET, true );
break;
case "DELETE":
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE" );
break;
case "PUT":
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT" );
break;
case "POST":
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $data );
break;
default:
throw new Exception("Error: Invalid HTTP method '$method' $endpoint");
return null;
}
$oRet = new StdClass;
$oRet->response = json_decode( curl_exec( $ch ) );
$oRet->status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$oRet->errors = curl_error( $ch );
/* add verbose information to the output for enhanced debugging */
rewind( $vbh );
$oRet->verbose = stream_get_contents( $vbh );
fclose( $vbh );
curl_close( $ch );
return $oRet;
}catch( Exception $e ){
exit( $e->getMessage() );
}
}
Когда функция вернется, если вы изучите вывод $oRet->verbose
или, как было вызвано, $response->verbose
, вы должны увидеть больше информации, которая много раз помогла мне решить проблемы с запросами curl.
Глядя на то, как вы вызываете вышеуказанную функцию, я замечаю это:
`restRequestDispute( $method, $endpoint, "", $content_type, $accessToken );`
не должно быть вместо этого
`restRequestDispute( $method, $endpoint, $params, $content_type, $accessToken );`