Наш разработчик имеет небольшую проблему с API (Brightpearl) и получает «Тело запроса не может быть прочитано при попытке проанализировать его как JSON "при попытке запустить сценарий ниже. У кого-нибудь есть идеи по возможной проблеме? Спасибо заранее.Ошибка «Тело запроса не может быть прочитано при попытке разобрать его как JSON»
<?php
define ("DB_HOST","localhost");
define ("DB_USER","busi6292_REMOVED");
define ("DB_PASSWORD","REMOVED");
define ("DB_DATABASE","busi6292_REMOVED");
$link = @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
or die ('I cannot connect to the database because: ' . @mysql_error());
@mysql_select_db (DB_DATABASE);
mysql_set_charset('utf8',$link);
// Brightperl Data Access Start
$authenticationDetails = array(
'apiAccountCredentials' => array(
'emailAddress' => 'REMOVED',
'password' => 'REMOVED',
),
);
$encodedAuthenticationDetails = json_encode($authenticationDetails);
$authenticationUrl = 'https://ws-eu1.brightpearl.com/REMOVED/authorise';
//$cresponse_token=getdata($url,$authenticationDetails);
$ch = curl_init();
$headers = array('Content-Type: application/json');
curl_setopt($ch, CURLOPT_URL, $authenticationUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($authenticationDetails));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (false === $response) {
echo 'Request unsuccessful' . PHP_EOL;
curl_close($ch);
exit(1);
}
$responseCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
$responseBody = json_decode($response);
curl_close($ch);
$authorisationToken = $responseBody->response;
// End
$sql = "select * from mail where InvoiceDate ='".date('Y-m-d')."'";
$query = mysql_query($sql);
while($sql_array = mysql_fetch_array($query))
{
//print_r($sql_array);
//echo $authorisationToken; exit;
// Brigtperl API Access for the Orders has been shipped Start
$ShippingGoodsoutURL = 'https://ws-eu1.brightpearl.com/2.0.0/REMOVED/warehouse-service/goods-note/goods-out/'.$sql_array['OrderNo'];
$headers = array(
"brightpearl-auth: {$authorisationToken}",
'Content-Type: application/json;charset=UTF-8',
'X-HTTP-Method-Override: PUT',
);
$newShippingWarehouseDetails = array(
"priority" => false,
"shipping" =>
array(
"reference" =>'"'.$sql_array['InvoiceNumber'].'"',
),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ShippingGoodsoutURL);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($newShippingWarehouseDetails));
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($newShippingWarehouseDetails));
$GoodsoutreShippingResponse = curl_exec($ch);
curl_close($ch);
print_r($GoodsoutreShippingResponse);
//exit;
// End
}
?>
Почему вы выполняете '@mysql_error()'? Удалите эти '@'. Вам нужно обрабатывать свои ошибки, а не просто игнорировать их. –
Не совсем уверен, но не должна эта строка -> 'curl_setopt ($ ch, CURLOPT_POSTFIELDS, http_build_query ($ newShippingWarehouseDetails));' использовать 'json_encode' вместо' http_build_query'. Вы передаете заголовок типа Content-Type: application/json; charset = UTF-8, но передаете данные в виде кодированной строки URL-адреса. – War10ck