Failed to refresh access token. See inner exception for details.

3,643 views
Skip to first unread message

rentca...@gmail.com

unread,
Aug 16, 2018, 1:33:37 PM8/16/18
to AdWords API and Google Ads API Forum
Hi,

I'm getting error "Failed to refresh access token. See inner exception for details." when I try to get campaign information.  The line of code is page = campaignService.get(selector) where page = "CampaignPage".  This process works when I use it in a web application but not when I use it in a windows service.  Below is some information that I hope will be helpful in figuring out the problem.  I was not able to get the logging working in the windows service.

CampaignService
{Google.Api.Ads.AdWords.v201806.CampaignService}
    Channel: {System.Runtime.Remoting.Proxies.__TransparentProxy}
    ChannelFactory: {System.ServiceModel.ChannelFactory(Of Google.Api.Ads.AdWords.v201806.ICampaignService)}
    ClientCredentials: {System.ServiceModel.Description.ClientCredentials}
    EnableDecompression: True
    InnerChannel: {System.Runtime.Remoting.Proxies.__TransparentProxy}
    Proxy: {System.Net.WebRequest.WebProxyWrapper}
    RequestHeader: {<RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/v201806">
  <clientCustomerId>Replace for security</clientCustomerId>
  <developerToken>Replace for security</developerToken>
  <userAgent />
</RequestHeader>}
    ResponseHeader: Nothing
    Signature: {Google.Api.Ads.AdWords.Lib.AdWordsServiceSignature}
    State: Created {0}
    Timeout: 0
    User: {Google.Api.Ads.AdWords.Lib.AdWordsUser}
    UserAgent: Nothing

CampaignService.User.Config
{Google.Api.Ads.AdWords.Lib.AdWordsAppConfig}
    AdWordsApiServer: "https://adwords.google.com"
    ClientCustomerId: "Replace for security"
    DeveloperToken: "Replace for security"
    EnableGzipCompression: True
    GMBLoginEmail: ""
    GMBOAuth2RefreshToken: ""
    IncludeUtilitiesInUserAgent: False
    IncludeZeroImpressions: Nothing
    MaskCredentials: True
    MerchantCenterId: 0
    OAuth2AccessToken: ""
    OAuth2ClientId: "Replace for security"
    OAuth2ClientSecret: "Replace for security"
    OAuth2Mode: APPLICATION {0}
    OAuth2PrivateKey: ""
    OAuth2PrnEmail: ""
    OAuth2RedirectUri: "Replace for security"
    OAuth2RefreshToken: "Replace for security"
    OAuth2SecretsJsonPath: ""
    OAuth2ServerUrl: "https://accounts.google.com"
    OAuth2ServiceAccountEmail: Nothing
    Proxy: Nothing
    RetryCount: 0
    Signature: "AwApi-DotNet/23.6.0, Common-Dotnet/9.4.0, .NET CLR/4.0.30319.42000, "
    SkipColumnHeader: False
    SkipReportHeader: False
    SkipReportSummary: False
    Timeout: 600000
    UnixTimestamp: 1534434608
    UseRawEnumValues: Nothing
    UserAgent: "Replace for security"

selector
{Google.Api.Ads.AdWords.v201806.Selector}
    dateRange: {Google.Api.Ads.AdWords.v201806.DateRange}
    fields: {Length=7}
    ordering: Nothing
    paging: {LIMIT 0, 500}
    predicates: Nothing
?selector.fields
{Length=7}
    (0): "Id"
    (1): "Name"
    (2): "Status"
    (3): "StartDate"
    (4): "EndDate"
    (5): "BaseCampaignId"
    (6): "AdvertisingChannelType"

{"Failed to refresh access token. See inner exception for details."}
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 
at Google.Api.Ads.Common.OAuth.AdsOAuthProviderImpl.GetAccessTokenForAuthorizationCodeFlow()  
at Google.Api.Ads.Common.OAuth.AdsOAuthProviderImpl.RefreshAccessTokenInOfflineMode()

Error Occurred Message: Failed to retrieve campaign(s). Stack Trace:    at YSI.Ads.GoogleAdwordsHelper.GetListOfCampaigns(String during, DateTime startDate, DateTime endDate) in C:\TFS\Cafés\yCPC\Source\GoogleAdwords.vb:line 1711   at YSI.Cafe.RC.SiteManager.AdWordsAutomatedTasks.ImportAdwordsCampaigns() in C:\TFS\Cafés\RentCafe\Source\ManagerCafe\AppClasses\AdWordsAutomatedTasks.vb:line 337   at RCDaily.AdwordsImportCampaignRoutine.ImportAdwordsCampaigns() in C:\TFS\Cafés\RentCafe\Source\RCDaily\AdwordsImportCampaignsTasks.vb:line 33   at RCDaily.AdwordsImportCampaignRoutine.OnExecute(IJobExecutionContext context) in C:\TFS\Cafés\RentCafe\Source\RCDaily\AdwordsImportCampaignsTasks.vb:line 27   at RCDaily.yJob.Execute(IJobExecutionContext context) in C:\TFS\Cafés\RentCafe\Source\RCDaily\yJob.vb:line 10 Source: YSI.Ads Inner Message 1: One or more errors occurred. Inner Stack Trace 1:    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)   at Google.Api.Ads.Common.OAuth.AdsOAuthProviderImpl.GetAccessTokenForAuthorizationCodeFlow()   at Google.Api.Ads.Common.OAuth.AdsOAuthProviderImpl.RefreshAccessTokenInOfflineMode() Source 1: mscorlib Inner Message 2: An error occurred while sending the request. Inner Stack Trace 2:    at Google.Apis.Http.ConfigurableMessageHandler.<SendAsync>d__59.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.Requests.TokenRequestExtenstions.<ExecuteAsync>d__0.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.<FetchTokenAsync>d__35.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.<RefreshTokenAsync>d__31.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.UserCredential.<RefreshTokenAsync>d__16.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.TokenRefreshManager.<RefreshTokenAsync>d__12.MoveNext()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)   at Google.Apis.Auth.OAuth2.TokenRefreshManager.<GetAccessTokenForRequestAsync>d__10.MoveNext() Source 2: Google.Apis.Core Inner Message 3: Unable to connect to the remote server Inner Stack Trace 3:    at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) Source 3: System Inner Message 4: No connection could be made because the target machine actively refused it 127.0.0.1:8888 Inner Stack Trace 4:    at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) Source 4: System 

KDJ

Teja Makani

unread,
Aug 16, 2018, 5:53:49 PM8/16/18
to AdWords API and Google Ads API Forum
Hello,

Could you please confirm whether you are using AdWords .NET client library for this call? If not could you please share the code snippet that is making the call? You could also cross verify that you are following the steps required to make API call from here.

Also, to verify that your credentials are correct, you could try the CURL request provided below and see if you are able to generate the access token. If your credentials are correct, you should be able to generate an access token for the below CURL request.

curl https://www.googleapis.com/oauth2/v4/token \
-d refresh_token=your-refresh_token \
-d client_id=your-client-id \
-d client_secret=your-client-secret \
-d grant_type=refresh_token

If your credentials are incorrect or still facing issue then you could try generating a new refresh token with the help of this guide and retry your request. 

Regards,
Sai Teja, AdWords API Team.

rentca...@gmail.com

unread,
Aug 16, 2018, 7:33:57 PM8/16/18
to AdWords API and Google Ads API Forum
Sai Teja,

We are you VB.net library to make this call.  

As I mention in my previous email the call work fine with I'm making it through a web application, it just does not work when I make the call from a windows service.  Please note:  Both web application and the windows service hit the same code to make the call.  I should not need to generate a new refresh token since it works from my web application.

Please advise!

KDJ

Teja Makani

unread,
Aug 17, 2018, 3:45:34 PM8/17/18
to AdWords API and Google Ads API Forum
Hello,

Thanks for the details, since the API call is working good for web application, you might need to check how the windows service is pulling the credentials and passing it to client libraries. Ideally, the same credentials should work provided everything else (user making the call, account etc.,) is same in both the applications. Could you please verify if there is a separate config file for windows service? Please give it a try and let me know if the problem still persists.


Regards,
Sai Teja, AdWords API Team.

On Thursday, August 16, 2018 at 1:33:37 PM UTC-4, rentca...@gmail.com wrote:

rentca...@gmail.com

unread,
Aug 17, 2018, 6:01:37 PM8/17/18
to AdWords API and Google Ads API Forum
Sai,

I have verified that my windows service is using a separate config file.  I have also verified that the web application and the windows service are using the same credentials.  The web application and the windows service call the same dll which makes the call to the Adwords API.  Do you have any other suggestions?

KDJ

Nadine Sundquist (AdWords API Team)

unread,
Aug 20, 2018, 11:19:16 PM8/20/18
to AdWords API and Google Ads API Forum
Hello KDJ,

This was sent over to me since I've worked quite a bit with more complex configurations. You mentioned in your last message that you're using a different config file with the same credentials. Can we just for a sanity check make sure that all those credentials are working properly?

From the command line, try this with your refresh token and client information to get an access token back, where you substitute your values from your config file:

curl --data "refresh_token=<INSERT_REFRESH_TOKEN>&client_id=<INSERT_CLIENT_ID>&client_secret=<INSERT_CLIENT_SECRET>&grant_type=refresh_token" -X POST "https://www.googleapis.com/oauth2/v3/token"

With that access token, get the debug information for me, just in case something does go wrong later by putting this in your browser:


Save off that information for me in case something goes wrong in this next command line. 
With that access token, try this:

curl --header "Authorization: Bearer <INSERT_ACCESS_TOKEN>" --header "developerToken: <INSERT_DEVELOPER_TOKEN>" --header "clientCustomerId: <INSERT_CLIENT_CUSTOMER_ID_WITH_DASHES>" --header "clientSecret: <INSERT_CLIENT_SECRET>" https://adwords.google.com/api/adwords/reportdownload/v201806 --data "__rdquery=SELECT CampaignName, Impressions FROM CAMPAIGN_PERFORMANCE_REPORT DURING LAST_MONTH&__fmt=CSV"

If anything does not work, then please, in the forum, click on the drop down in this message and say Reply privately to author with this information. If you're only working in Windows, there are alternatives to curl that you can use on Windows.

If everything is working in these commands, and you're still having issues, then please send me the request ID of the request that failed. If you don't have that, then please send me the customer ID by replying privately to the author on the forum. I can try to look up your request on our servers to see if I have more information here on what exactly failed.

Best,
Nadine, AdWords API Team

vib...@whisskers.com

unread,
Nov 21, 2018, 12:59:32 AM11/21/18
to AdWords API and Google Ads API Forum
Failed to refresh access token.png

Nadine Sundquist (AdWords API Team)

unread,
Nov 21, 2018, 2:36:10 PM11/21/18
to AdWords API and Google Ads API Forum
Hello,

This is a pretty old thread from what it appears to be someone else. Could you please start a new thread with your information, so we can best help you and make sure your issue doesn't get confused with someone else's?

Thanks,
Nadine, AdWords API Team
Reply all
Reply to author
Forward
0 new messages