2016-01-22 28 views
34

To działało dobrze przed upływem tygodnia, ale teraz pokazuje następujący błąd. Próbowałem następujących rzeczy, ale bezużyteczne.Żądanie zostało przerwane: nie można utworzyć bezpiecznego konta Sandbox kanału SSL/TLS

ServicePointManager.Expect100Continue = true; 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

więc sugerować mnie z możliwych rozwiązań

public string HttpCall(string NvpRequest) //CallNvpServer 
    { 
     string url = pendpointurl; 

     //To Add the credentials from the profile 
     string strPost = NvpRequest + "&" + buildCredentialsNVPString(); 
     strPost = strPost + "&BUTTONSOURCE=" + HttpUtility.UrlEncode(BNCode); 

     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
     // allows for validation of SSL conversations 
     ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 


     HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url); 
     objRequest.Timeout = Timeout; 
     objRequest.Method = "POST"; 
     objRequest.ContentLength = strPost.Length; 

     try 
     { 
      using (StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream())) 
      { 
       myWriter.Write(strPost); 
      } 
     } 
     catch (Exception e) 
     { 
      /* 
      if (log.IsFatalEnabled) 
      { 
       log.Fatal(e.Message, this); 
      }*/ 
     } 

     //Retrieve the Response returned from the NVP API call to PayPal 
     HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); 
     string result; 
     using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) 
     { 
      result = sr.ReadToEnd(); 
     } 

     //Logging the response of the transaction 
     /* if (log.IsInfoEnabled) 
     { 
      log.Info("Result :" + 
         " Elapsed Time : " + (DateTime.Now - startDate).Milliseconds + " ms" + 
         result); 
     } 
     */ 
     return result; 
    } 
+0

żadnych nowości na ten temat? Mam również do czynienia z tym samym problemem. – Saurabh

Odpowiedz

35

po prostu wpadł na ten sam problem w moim środowisku testowym, a także (na szczęście moi żywo płatności przechodzą). Naprawiłem go przez zmianę:

public PayPalAPI(string specialAccount = "") 
{ 
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls; 

do

public PayPalAPI(string specialAccount = "") 
{ 
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; 

one wyłączone wsparcie dla SSL3 jakiś czas temu: https://www.paypal.com/uk/webapps/mpp/ssl-security-update, stwierdzając

Upewnić się łączysz końcowych PayPal wykorzystaniem TLS 1.0 lub 1.2 (nie wszystkie punkty końcowe API obsługują obecnie protokół TLS 1.1).

Ich latest update (thx dla aktualizacji Komentarz @awesome) stwierdza:

PayPal aktualizuje swoje usługi wymagają TLS 1.2 dla wszystkich połączeń HTTPS . W tym czasie, PayPal będzie również wymagać HTTP/1.1 dla wszystkich połączeń ... Aby uniknąć zakłóceń w eksploatacji, należy sprawdzić, czy systemy są gotowe do tej zmiany przez 17 czerwca 2016

+1

Oficjalne wiadomości https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US –

+0

Dzięki stosy! Dokładnie to, czego potrzebowałem. – Brendan

22

Rzeczywiście zmiana SecurityProtocolType.Tls rozwiązuje problem, jeśli pracujesz w VS z frameworkiem niższym niż 4.5, nie będziesz w stanie go zmienić, musisz zaktualizować swoją VS do najwyższej wersji 2012/2013/2015, aby zmienić to.

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType. Tls12;

+27

Właściwie * możesz * używać go (przynajmniej w wersji 4.0) w następujący sposób: 'ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; // SecurityProtocolType.Tls12' –

+0

@James McCormack: Bardzo dobrze, dzięki. –

+0

Jest to bardzo pomocne @JamesMcCormack – scgough

7

Dodaj następujący kod do pliku global.asax lub przed wywołaniem (HttpWebRequest) WebRequest.Create (url);

protected void Application_Start() 
{ 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
    // ... 
} 

Jest to spowodowane tym, że PayPal zmienia szyfrowanie na TLS zamiast SSL. Zostało to już zaktualizowane w środowiskach Sandbox, ale jeszcze nie na żywo.

Więcej: https://devblog.paypal.com/upcoming-security-changes-notice/

Powiązane problemy