2016-09-19 3 views
4

Paypal Rest API를 호출 할 때 RestSharp 구성 요소에 오류가 있습니다.PayPal Rest API가 Restach가 xamarin android에서 작동하지 않습니다.

Android 용 Xamarin을 사용하여 다음 코드를 작성했습니다.

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; 
    } 

그러나이 오류가있어 : 나는 또한 ModernHttpClient를 사용했다

를 : "오류 SecureChannelFailure (. 인증 또는 암호 해독에 실패했습니다)"하지만 당신은 강제로 시도 해 봤나

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

당신이 ModernHttpClient를 사용하는 RestSharp에서 사용하는 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);