Forum Discussion
wingmanzz
5 years agoRegular Visitor
PHP, Curl to get embed token via API GenerateToken returns 404 using service principal
Hi all, This snippet of code: <?php
/* Get token using a POST request */
$clientId = 'xxx';
$clientSecret = 'xxx';
$tenantId = 'xxxx';
$urlAccessToken = "https://login.windows.net/$tena...
- 5 years ago
So we dug into this a little bit more and were able to debug it..it was an error in the curl_setopts. posting fixed code here, in case anyone runs across this issue.
<?php /* Get token using a POST request */ $clientId = 'xxx'; $clientSecret = 'xxx'; $tenantId = 'xxxx'; $urlAccessToken = "https://login.windows.net/$tenantId/oauth2/token"; $resource = 'https://analysis.windows.net/powerbi/api'; $group = 'xxx'; $report ='xxx'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/$tenantId/oauth2/token"); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'resource' => $resource, 'client_id' => $clientId, 'client_secret' => $clientSecret, 'grant_type' => 'client_credentials' )); $data = curl_exec($ch); curl_close($ch); $data_obj = json_decode($data); $access_token = $data_obj->{"access_token"}; $headers = array( "Content-Type: application/json", "Authorization: Bearer $access_token" ); $url = "https://api.powerbi.com/v1.0/myorg/groups/$group/reports/$report/GenerateToken"; #$url ="https://api.powerbi.com/v1.0/myorg/groups/$group/reports"; $post_params = array( 'accessLevel' => 'View' ); $payload = json_encode($post_params); $ch2 = curl_init( $url ); curl_setopt( $ch2, CURLINFO_HEADER_OUT, true); curl_setopt( $ch2, CURLOPT_POSTFIELDS, $payload); curl_setopt( $ch2, CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch2, CURLOPT_RETURNTRANSFER, true); curl_setopt( $ch2, CURLOPT_FAILONERROR, true); $response = curl_exec( $ch2 ); if (curl_errno($ch2)) { $error_msg = curl_error($ch2); } echo $response; curl_close($ch2); if (isset($error_msg)) { echo $error_msg; } ?>
PhilipTreacy
5 years agoSuper User
Hi wingmanzz
Of course you shouldn't get a 404 if the resource was found so that's odd.
Once you've got a valid access token you can try using Postman to issue the GenerateToken request and see what is happening.
Phil
wingmanzz
5 years agoRegular Visitor
So we dug into this a little bit more and were able to debug it..it was an error in the curl_setopts. posting fixed code here, in case anyone runs across this issue.
<?php
/* Get token using a POST request */
$clientId = 'xxx';
$clientSecret = 'xxx';
$tenantId = 'xxxx';
$urlAccessToken = "https://login.windows.net/$tenantId/oauth2/token";
$resource = 'https://analysis.windows.net/powerbi/api';
$group = 'xxx';
$report ='xxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/$tenantId/oauth2/token");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'resource' => $resource,
'client_id' => $clientId,
'client_secret' => $clientSecret,
'grant_type' => 'client_credentials'
));
$data = curl_exec($ch);
curl_close($ch);
$data_obj = json_decode($data);
$access_token = $data_obj->{"access_token"};
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer $access_token"
);
$url = "https://api.powerbi.com/v1.0/myorg/groups/$group/reports/$report/GenerateToken";
#$url ="https://api.powerbi.com/v1.0/myorg/groups/$group/reports";
$post_params = array(
'accessLevel' => 'View'
);
$payload = json_encode($post_params);
$ch2 = curl_init( $url );
curl_setopt( $ch2, CURLINFO_HEADER_OUT, true);
curl_setopt( $ch2, CURLOPT_POSTFIELDS, $payload);
curl_setopt( $ch2, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch2, CURLOPT_FAILONERROR, true);
$response = curl_exec( $ch2 );
if (curl_errno($ch2)) {
$error_msg = curl_error($ch2);
}
echo $response;
curl_close($ch2);
if (isset($error_msg)) {
echo $error_msg;
}
?>