{"detail":"Authentication credentials were not provided."}

Compañeros tengo este error, estoy con CURL mediante PHP y el error persiste, ya obtengo el token pero no logro hacer un cargo correctamente. Adjunto mi código:

function callAPI($method, $url, $data,$cabecera){
   $curl = curl_init();
   switch ($method){
      case "POST":
         curl_setopt($curl, CURLOPT_POST, 1);
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
         break;
      case "PUT":
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         if ($data)
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                              
         break;
      default:
         if ($data)
            $url = sprintf("%s?%s", $url, http_build_query($data));
   }
   // OPTIONS:
   if($cabecera){
   	$headers=array(
      "Content: application/json",
      'Authorization: Bearer '.$cabecera,
   );
   }
   else{
   	$headers=[
      'Content-Type: application/json',
   ];
   }

   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
   // EXECUTE:
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   return $result;
}
$campos = array(
	'amount' => '66.99', 
	'description' => 'Prueba Curso1',
	'entity_description' => 'Prueba Curso2',
	'currency' => 'usd',
	'credit_card_number' => '4242424242424242',
	'credit_card_security_code_number' => '123',
	'exp_month' => '11',
	'exp_year' => '2022'
);

$campos = json_encode($campos);

$url_pago='https://api.payments.4geeks.io/v1/charges/simple/create/';
  $get_data1 = callAPI('POST', $url_pago, $campos, $token);
  $response1 = json_decode($get_data1, true);
  echo $get_data1; 

Hola @Andres_Jimenez. Obtienes el mismo resultado si haces la petición por Postman? Publica aqui por favor el POST request completo (headers, body, etc).
Creo que tu caso tiene que ver con la forma en que envías el access token, porque por algun razón no se está recibiendo de forma correcta.

Hola Allan, ya resolví esta parte pero cuando hago el cargo me devuelve NULL, no me devuelve ni código de error ni nada

Entonces no estás enviando correctamente el request al API, porque no existe ningún mensaje de error que sea null. Es decir, ese error no es del API, sino de tu fragmento de código.

Este es mi código en PHP, no sé si estaré enviando mal el arreglo de la transacción.

function callAPI($method, $url, $data,$cabecera){
$curl = curl_init();
switch ($method){
case “POST”:
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case “PUT”:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, “PUT”);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $cabecera);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
if(!$result){die(“Connection Failure”);}
curl_close($curl);
return $result;
}

$campos = array(
‘amount’ => ‘66.99’,
‘description’ => ‘Prueba Curso1’,
‘entity_description’ => ‘Prueba Curso2’,
‘currency’ => ‘usd’,
‘credit_card_number’ => ‘4242424242424242’,
‘credit_card_security_code_number’ => ‘123’,
‘exp_month’ => ‘11’,
‘exp_year’ => ‘2022’
);

$campos1 = json_encode($campos);
$headers2=array(
‘Authorization: bearer’.$token,
“Content-Type: application/json”,
);
$url_pago=‘https://api.payments.4geeks.io/v1/charges/simple/create/’;
$get_data1 = callAPI(‘POST’, $url_pago, $campos, $headers2);
$response1 = json_decode($get_data1, true);
echo ‘

’;
var_dump($response1);

He resuelto este tema, apenas tenga terminado este proyecto, les paso el proyecto con PHP y CURL para que lo puedan implementar en sus webs

1 Like

Grandioso! ¿Cómo lo resolviste?

Incluyendo los headers dentro de la función, al parecer no funcionaba enviando las cabeceras directamente a la función