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