2016-09-19 26 views
4

我有误差RestSharp组件工作时,我是叫贝宝REST API。宝REST API随着RestSharp不xamarin的Android

我使用Xamarin的Android下面的代码。

public async Task<PayPalGetTokenResponse> GetAccessToken() 
    { 
     var restRequest = new RestRequest("/oauth2/token", Method.POST); 
     // Add headers 
     restRequest.AddHeader("Accept", "application/json"); 
     restRequest.AddHeader("Accept-Language", "en_US"); 

     // Make Authorization header 
     restClient.Authenticator = new HttpBasicAuthenticator(Config.ApiClientId, Config.ApiSecret); 

     // add data to send 
     restRequest.AddParameter("grant_type", "client_credentials"); 

     var response = restClient.Execute<PayPalGetTokenResponse>(restRequest); 

     response.Data.DisplayError = CheckResponseStatus(response, HttpStatusCode.OK); 

     return response.Data; 
    } 

却得到了错误: “错误:SecureChannelFailure(认证或解密失败。)”

我也用ModernHttpClient但得到

public async Task<PayPalGetTokenResponse> GetAccessToken() 
{   
     string clientId = Config.ApiClientId; 
     string secret = Config.ApiSecret; 
     string oAuthCredentials =  Convert.ToBase64String(Encoding.Default.GetBytes(clientId + ":" + secret)); 
     string uriString = Config.ApiUrl+"/oauth2/token"; 
     PayPalGetTokenResponse result; 

     HttpClient client = new HttpClient(new NativeMessageHandler()); 
     var h_request = new HttpRequestMessage(HttpMethod.Post, uriString); 
     h_request.Headers.Authorization = new AuthenticationHeaderValue("Basic", oAuthCredentials); 
     h_request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     h_request.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue("en_US")); 
     h_request.Content = new StringContent("grant_type=client_credentials", UTF8Encoding.UTF8); 
     try 
     { 

      HttpResponseMessage response = await client.SendAsync(h_request); 
      //if call failed ErrorResponse created...simple class with response properties 
      if (!response.IsSuccessStatusCode) 
      { 
       var error = await response.Content.ReadAsStringAsync(); 
       var errResp = JsonConvert.DeserializeObject<string>(error); 
       //throw new PayPalException { error_name = errResp.name, details = errResp.details, message = errResp.message }; 
      } 
      var success = await response.Content.ReadAsStringAsync(); 
      result = JsonConvert.DeserializeObject<PayPalGetTokenResponse>(success); 
     } 
     catch (Exception) 
     { 
      throw new HttpRequestException("Request to PayPal Service failed."); 
     } 
     return result; 
    } 
+0

是否已经更换使用RestSharp使用ModernHttpClient HttpClient的? –

+0

是的,但得到了同样的错误 – Pratik

+0

你试过这里的例子:http://stackoverflow.com/a/17234955/1398425 –

回答

0

你试图强行同样的错误到现代的SSL协议?

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

这个工作对我来说:

if (ServicePointManager.SecurityProtocol != SecurityProtocolType.Tls12) 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

var client = new RestClient(payPalURL) { 
    Encoding = Encoding.UTF8 
}; 
var authRequest = new RestRequest("oauth2/token", Method.POST) { 
    RequestFormat = DataFormat.Json 
}; 
client.Authenticator = new HttpBasicAuthenticator(clientId, secret); 
authRequest.AddParameter("grant_type","client_credentials"); 
var authResponse = client.Execute(authRequest);