public IActionResult AccountPost(Token token)
        {
            AdvertiserAccount account = new AdvertiserAccount();

            try
            {
                Microsoft.BingAds.Authentication authentication = AuthenticateWithOAuth(token);

                // Most Bing Ads service operations require account and customer ID.
                // This utiltiy operation sets the global authorization data instance
                // to the first account that the current authenticated user can access.
                IList <AdvertiserAccount> accounts = SetAuthorizationDataAsync(authentication, token.DeveloperToken).Result;
                account = accounts[0];

                // You can extend the console app with the examples library at:
                // https://github.com/BingAds/BingAds-dotNet-SDK/tree/master/examples/BingAdsExamples
            }
            // Catch authentication exceptions
            catch (OAuthTokenRequestException ex)
            {
                OutputStatusMessage(string.Format("OAuthTokenRequestException Message:\n{0}", ex.Message));
                if (ex.Details != null)
                {
                    OutputStatusMessage(string.Format("OAuthTokenRequestException Details:\nError: {0}\nDescription: {1}",
                                                      ex.Details.Error, ex.Details.Description));
                }
            }
            // Catch Customer Management service exceptions
            catch (FaultException <AdApiFaultDetail> ex)
            {
                OutputStatusMessage(string.Join("; ", ex.Detail.Errors.Select(error =>
                {
                    if ((error.Code == 105) || (error.Code == 106))
                    {
                        return("Authorization data is missing or incomplete for the specified environment.\n" +
                               "To run the examples switch users or contact support for help with the following error.\n");
                    }
                    return(string.Format("{0}: {1}", error.Code, error.Message));
                })));
                OutputStatusMessage(string.Join("; ",
                                                ex.Detail.Errors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
            }
            catch (FaultException <Microsoft.BingAds.V12.CustomerManagement.ApiFault> ex)
            {
                OutputStatusMessage(string.Join("; ",
                                                ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
            }
            catch (HttpRequestException ex)
            {
                OutputStatusMessage(ex.Message);
            }

            return(View(account));
        }
        /// <summary>
        /// Utility method for setting the customer and account identifiers within the global
        /// <see cref="_authorizationData"/> instance.
        /// </summary>
        /// <param name="authentication">The OAuth authentication credentials.</param>
        /// <returns></returns>
        private async Task <IList <AdvertiserAccount> > SetAuthorizationDataAsync(Microsoft.BingAds.Authentication authentication, string developerToken)
        {
            _authorizationData = new AuthorizationData
            {
                Authentication = authentication,
                DeveloperToken = developerToken
            };

            _customerManagementService = new ServiceClient <ICustomerManagementService>(_authorizationData);

            var getUserRequest = new GetUserRequest
            {
                UserId = null
            };

            var getUserResponse = (await _customerManagementService.CallAsync((s, r) => s.GetUserAsync(r), getUserRequest));
            var user            = getUserResponse.User;

            var predicate = new Predicate
            {
                Field    = "UserId",
                Operator = PredicateOperator.Equals,
                Value    = user.Id.ToString()
            };

            var paging = new Paging
            {
                Index = 0,
                Size  = 10
            };

            var searchAccountsRequest = new SearchAccountsRequest
            {
                Ordering   = null,
                PageInfo   = paging,
                Predicates = new[] { predicate }
            };

            var searchAccountsResponse =
                (await _customerManagementService.CallAsync((s, r) => s.SearchAccountsAsync(r), searchAccountsRequest));

            var accounts = searchAccountsResponse.Accounts.ToArray();

            //if (accounts.Length <= 0) return;

            _authorizationData.AccountId  = (long)accounts[0].Id;
            _authorizationData.CustomerId = (int)accounts[0].ParentCustomerId;

            //OutputArrayOfAdvertiserAccount(accounts);

            return(accounts);
        }
Esempio n. 3
0
        /// <summary>
        /// Utility method for setting the customer and account identifiers within the global 
        /// <see cref="_authorizationData"/> instance. 
        /// </summary>
        /// <param name="authentication">The OAuth or Bing Ads managed (UserName/Password) authentication credentials.</param>
        /// <returns></returns>
        private static async Task SetAuthorizationDataAsync(Authentication authentication)
        {
            _authorizationData = new AuthorizationData
            {
                Authentication = authentication,
                DeveloperToken = (Settings.Default["DeveloperToken"] != null) ? Settings.Default["DeveloperToken"].ToString() : null
            };

            _customerService = new ServiceClient<ICustomerManagementService>(_authorizationData);

            var user = await GetUserAsync(null);
            var accounts = await SearchAccountsByUserIdAsync(user.Id);
            if (accounts.Length <= 0) return;

            _authorizationData.AccountId = (long)accounts[0].Id;
            _authorizationData.CustomerId = (int)accounts[0].ParentCustomerId;

            return;
        }