microsoft / Partner-Center-PowerShell

PowerShell module for managing Partner Center resources.
https://docs.microsoft.com/powershell/partnercenter/
MIT License
130 stars 59 forks source link

Trying to automate pulling the licensebased prices every month #414

Open freddy-lopez-dev opened 1 year ago

freddy-lopez-dev commented 1 year ago

I was trying to setup an azure Powershell automation with New-PartnerAccessToken trying to invoke-restmethod for pulling up the prices. The access token received from the cmdlet doesn't seem to work and it always gives me a 401 Unauthorized error.

Steps to reproduce

This is my command: $appId = 'xxxxxxxxxxxx' $appSecret = 'xxxxxxxxxxx' | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential $appId, $appSecret $token = New-PartnerAccessToken -Credential $credential -Resource https://api.partnercenter.microsoft.com -ServicePrincipal $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Accept", "application/json") $headers.Add("Authorization", "Bearer $token") $response = Invoke-RestMethod 'https://api.partner.microsoft.com/v1.0/sales/pricesheets(Market=''ca'',PricesheetView=''updatedlicensebased'')/$value' -Method 'GET' -Headers $headers

Expected behavior

I should receive the CSV format of product prices

Actual behavior

401 Unauthorized

Environment

Sandbox 5.1

moiaune commented 8 months ago

I think that you are setting your Authorization header the wrong way, because the $token variable will be an object containing multiple fields.

Try this instead:

$headers.Add("Authorization", "Bearer $($token.AccessToken)")

You can also take a look at this blog post on how I do it which is a bit different: https://moiaune.dev/2021/11/03/generate-microsoft-partner-center-refresh-token/

GH-KimV commented 7 months ago

I was trying to setup an azure Powershell automation with New-PartnerAccessToken trying to invoke-restmethod for pulling up the prices. The access token received from the cmdlet doesn't seem to work and it always gives me a 401 Unauthorized error.

Steps to reproduce

This is my command: $appId = 'xxxxxxxxxxxx' $appSecret = 'xxxxxxxxxxx' | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential $appId, $appSecret $token = New-PartnerAccessToken -Credential $credential -Resource https://api.partnercenter.microsoft.com -ServicePrincipal $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Accept", "application/json") $headers.Add("Authorization", "Bearer $token") $response = Invoke-RestMethod 'https://api.partner.microsoft.com/v1.0/sales/pricesheets(Market=''ca'',PricesheetView=''updatedlicensebased'')/$value' -Method 'GET' -Headers $headers

Expected behavior

I should receive the CSV format of product prices

Actual behavior

401 Unauthorized

Environment

Sandbox 5.1

you need to add resource and have the value be api.partner.microsoft.com in the body data in your request