WinHTTP.WinHTTPRequest.5.1 no funciona con el sandbox de PayPal después de TLS 1.2

PayPal sandbox recientemente restringido a la conexión TLS 1.2. Esto hace que nuestro sitio deje de funcionar con el sandbox de PayPal, aunque todavía funciona con la producción de PayPal. En el futuro, la producción de PayPal tendrá la misma restricción. Estamos utilizando el componente clásico ASP y Microsoft WinHTTP.WinHTTPRequest.5.1 para la comunicación con PayPal. Aquí está el código a continuación. objHttp.StatusText devuelve "Solicitud incorrecta". Estamos en Windows Server 2008 R2. Intenté usar MSXML2.ServerXMLHTTP.6.0 en su lugar, pero solo funciona en mi máquina de desarrollo de Windows 8.1, no en nuestro Windows Server 2008 R2. Aunque MSXML2.ServerXMLHTTP.6.0 es un superconjunto de WinHTTP.WinHTTPRequest.5.1, pero es menos confiable que WinHTTP.WinHTTPRequest.5.1. Nuestro código falla varias veces al día usando MSXML2.ServerXMLHTTP.6.0 en el pasado, así que prefiero usar WinHTTP.WinHTTPRequest.5.1. Tampoco confío en esta línea de código: objHttp.Option (9) = & H0AA0. Una solución alternativa que estamos utilizando es llamar a WebAPI para enviar mensajes a PayPal; sin embargo, esto causa un retraso menor adicional.

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

Código de invocación de WebAPI:

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta