2016-01-22 23 views
34

Stava funzionando bene prima di una settimana, ma ora mostra l'errore seguente. Ho provato le seguenti cose ma inutile.La richiesta è stata interrotta: Impossibile creare l'account sandbox del canale protetto SSL/TLS

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

così mi suggeriscono con possibile soluzione

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

Eventuali aggiornamenti su questo? Anch'io sto affrontando lo stesso problema. – Saurabh

risposta

35

Ho appena incontrato lo stesso problema nel mio ambiente di test così (per fortuna i miei pagamenti in tempo reale stanno attraversando). Ho riparato cambiando:

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

a

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

Essi supporto disabilitato per SSL3 qualche tempo fa: https://www.paypal.com/uk/webapps/mpp/ssl-security-update, in particolare affermando

garantire che si sta collegando al endpoint PayPal utilizzando TLS 1.0 oppure 1.2 (non tutti gli endpoint API attualmente supportano TLS 1.1).

loro latest update (thx per il commento aggiornamento dal @awesome) afferma:

PayPal sta aggiornando i suoi servizi per richiedere TLS 1.2 per tutte le HTTPS connessioni. In questo momento, PayPal richiederà anche HTTP/1.1 per tutte le connessioni ... Per evitare perturbazioni del servizio, è necessario verificare che i sistemi siano pronti per questo cambiamento dal 17 Giugno 2016

+1

Notizie ufficiali https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US –

+0

Grazie mille! Proprio quello di cui avevo bisogno. – Brendan

22

Infatti modifica SecurityProtocolType.Tls risolve il problema, se si sta lavorando in VS con un framework inferiore a 4.5 non è possibile modificarlo, è necessario aggiornare il VS alla versione più alta 2012/2013/2015 per cambiare esso.

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

+27

In realtà si * può * usarlo (almeno in 4.0) in questo modo: 'ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; // SecurityProtocolType.Tls12' –

+0

@James McCormack: molto bene grazie, avere un upvote. –

+0

Questo è molto molto utile @JamesMcCormack – scgough

7

Aggiungere il seguente codice al proprio global.asax o prima di chiamare (WebWebRequest) WebRequest.Create (url);

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

Ciò è stato causato dal fatto che PayPal sta cambiando la crittografia su TLS anziché SSL. Questo è già stato aggiornato sugli ambienti Sandbox ma non ancora sul live.

Per saperne di più: https://devblog.paypal.com/upcoming-security-changes-notice/