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
InformationsquelleAutor Phong | 2016-01-29
Schreibe einen Kommentar