private string GenerateOAuthToken(string base64ClientId)
{
string response = null;
Uri uniformResourceIdentifier = null;
Uri baseUri = null;
if (config.ContainsKey(BaseConstants.OAuthEndpoint))
{
baseUri = new Uri(config[BaseConstants.OAuthEndpoint]);
}
else if (config.ContainsKey(BaseConstants.EndpointConfig))
{
baseUri = new Uri(config[BaseConstants.EndpointConfig]);
}
else if (config.ContainsKey(BaseConstants.ApplicationModeConfig))
{
string mode = config[BaseConstants.ApplicationModeConfig];
if (mode.Equals(BaseConstants.LiveMode))
{
baseUri = new Uri(BaseConstants.RESTLiveEndpoint);
}
else if (mode.Equals(BaseConstants.SandboxMode))
{
baseUri = new Uri(BaseConstants.RESTSandboxEndpoint);
}
else if (mode.Equals(BaseConstants.TestSandboxMode))
{
baseUri = new Uri(BaseConstants.RESTTestSandboxEndpoint);
}
else
{
throw new ConfigException("You must specify one of mode(live/sandbox) OR endpoint in the configuration");
}
}
bool success = Uri.TryCreate(baseUri, OAuthTokenPath, out uniformResourceIdentifier);
ConnectionManager connManager = ConnectionManager.Instance;
HttpWebRequest httpRequest = connManager.GetConnection(this.config, uniformResourceIdentifier.AbsoluteUri);
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Authorization", "Basic " + base64ClientId);
string postRequest = "grant_type=client_credentials";
httpRequest.Method = "POST";
httpRequest.Accept = "*/*";
httpRequest.ContentType = "application/x-www-form-urlencoded";
UserAgentHeader userAgentHeader = new UserAgentHeader(SdkVersion == null ? "" : SdkVersion.GetSDKId(), SdkVersion == null ? "" : SdkVersion.GetSDKVersion());
Dictionary<string, string> userAgentMap = userAgentHeader.GetHeader();
foreach (KeyValuePair<string, string> entry in userAgentMap)
{
// aganzha
//iso-8859-1
Encoding iso8851 = Encoding.GetEncoding("iso-8859-1", new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback());
byte[] bytes = Encoding.Convert(Encoding.UTF8,iso8851, Encoding.UTF8.GetBytes(entry.Value));
httpRequest.UserAgent = iso8851.GetString(bytes);
}
foreach (KeyValuePair<string, string> header in headers)
{
httpRequest.Headers.Add(header.Key, header.Value);
}
HttpConnection httpConnection = new HttpConnection(config);
try
{
response = httpConnection.Execute(postRequest, httpRequest);
}
catch (PayPal.Exception.HttpException ex)
{
// If we get an HTTP exception back and the status code is 401,
// then try and generate an IdentityException object to throw.
if (ex.StatusCode == HttpStatusCode.Unauthorized)
{
IdentityException identityEx;
if (ex.TryConvertTo<IdentityException>(out identityEx))
{
throw identityEx;
}
}
throw;
}
JObject deserializedObject = (JObject)JsonConvert.DeserializeObject(response);
string generatedToken = (string)deserializedObject["token_type"] + " " + (string)deserializedObject["access_token"];
this.ApplicationId = (string)deserializedObject["app_id"];
this.AccessTokenExpirationInSeconds = (int)deserializedObject["expires_in"];
this.AccessTokenLastCreationDate = DateTime.Now;
return generatedToken;
}