WinHTTP.WinHTTPRequest.5.1 funktioniert nicht mit der PayPal-sandbox nach TLS 1.2
PayPal-sandbox nur vor kurzem eingeschränkt auf TLS 1.2 Verbindung. Das macht unsere Website nicht mehr funktioniert mit der PayPal-sandbox, obwohl es stills Werk mit der Produktion PayPal. In die Zukunft der Produktion wird PayPal haben die gleiche Einschränkung. Wir sind mit classic ASP und Microsoft WinHTTP.WinHTTPRequest.5.1 Komponente für die Kommunikation mit PayPal. Hier ist der code unten. objHttp.StatusText liefert "Bad Request". Wir sind auf Windows Server 2008 R2. Ich habe versucht, MSXML2.ServerXMLHTTP.6.0 statt, aber es funktioniert nur auf meinem Windows-8.1 Entwicklung der Maschine, nicht auf unserem Windows Server 2008 R2. Obwohl MSXML2.ServerXMLHTTP.6.0 ist eine Obermenge von WinHTTP.WinHTTPRequest.5.1, aber es ist weniger zuverlässig als WinHTTP.WinHTTPRequest.5.1. Unser code nicht ein paar mal am Tag mit MSXML2.ServerXMLHTTP.6.0 in der Vergangenheit, so dass ich lieber mit WinHTTP.WinHTTPRequest.5.1. Ich bin auch nicht überzeugt, dass in dieser Codezeile: objHttp.Option(9) = &H0AA0 . Eine Abhilfe, die wir verwenden, ist das aufrufen der WebAPI für senden Nachricht an PayPal; dies verursacht jedoch eine zusätzliche geringfügige Verzögerung.
dim objHttp
Set objHttp = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1")
dim WinHttpRequestOption_EnableHttp1_1 : WinHttpRequestOption_EnableHttp1_1 = 17
objHttp.Option(WinHttpRequestOption_EnableHttp1_1) = False
dim WinHttpRequestOption_SslErrorIgnoreFlags : WinHttpRequestOption_SslErrorIgnoreFlags=4
objHttp.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300
objHttp.setTimeouts 0, 120000, 120000, 120000
objHttp.Option(9) = &H0AA0 '2720
objHttp.open "post", "" & "https://api-3t.sandbox.paypal.com/2.0/" & "", False
strRequest = SetExpressCheckoutSOAP(returnURL, cancelURL)
objHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
objHttp.setRequestHeader "Content-Length", Len(strRequest)
objHttp.setRequestHeader "Host", "api-3t.sandbox.paypal.com"
Call objHttp.send(strRequest)
if objHttp.Status = 200 then
resp = objHttp.responseText
else
response.write objHttp.StatusText
end if
WebAPI invoke-code:
dim webapiresp, webapidata
webapidata = "{""url"":""" & gv_APIEndpoint & """, ""message"":""" & nvpStrComplete & """,""soap"":0}"
webapiresp=InvokeWebAPI(strApiDomain, "POST", "comm/send", "", webapidata)
set reply=JSON.parse(webapiresp)
resp = reply.xml
Function InvokeWebAPI(strApiDomain, method, funcname, param, data)
dim HttpReq, apiURI, resp
set HttpReq=Server.CreateObject("MSXML2.ServerXMLHTTP")
'apiURI=strApiDomain & funcname & param
apiURI=strApiDomain & "api/" & funcname & param
HttpReq.open method, apiURI, false
HttpReq.setRequestHeader "Content-Type", "application/json; charset=UTF-8"
HttpReq.setRequestHeader "SOAPAction", apiURI
HttpReq.setRequestHeader "Authorization", "Basic " & Base64Encode("xxx:xxx")
if data <> "" then
HttpReq.send data
else
HttpReq.send
end if
resp = HttpReq.responseText
set HttpReq=Nothing
InvokeWebAPI = resp
End Function
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Bewerbung ist geschrieben in ASP classic und ich benutze
WinHttp.WinHttpRequest.5.1
im OrtMSXML2.ServerXMLHTTP.6.0
. zu post zu paypal sandbox url.Was funktioniert für mich ist das erzählen der
WinHttp.WinHttpRequest.5.1 objec
für die Verwendung von TLS 1.2:Set
Alle, die auf Windows Server 2012
Diese option:
Funktioniert nur in Windows 2012 und neuere
System-Bibliothek "winhttp.dll" Windows 2008 R2 hat nur die Aufnahme für TLS 1.0, was gleich:
Die anderen Werte fallen, eine Ausnahme.
Aber ich habe eine Lösung gefunden die erfordert nur änderungen in der registry, ohne weitere änderungen im code.
Details siehe hier:
Classic ASP Ausgehende TLS 1.2
Ich hatte das exakt gleiche Problem, aber eher als Einstellung
option(9)
ein.k.einWinHttpRequestOption_SecureProtocols
ich brauchte, um Unterstützung für TLS 1.2 in WinHttp sichSiehe Artikel unten, wo Sie laufen kann "Easy Fix" oder hinzufügen von registry-keys manuell
https://support.microsoft.com/en-gb/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-a-default-secure-protocols-in
Müssen Sie zuerst aktivieren Sie die Unterstützung für TLS 1.2 auf dem server (ich bevorzuge die freien IISCrypto tool von Nartac Software)
Dann ändern Sie können das Standard-Verhalten von der Einstellung der folgenden registry-Schlüssel:
Wenn Sie die 32-bit-Anwendungen müssen Sie auch die Schlüssel: