Песочница PayPal совсем недавно была ограничена подключением TLS 1.2. Это заставляет наш сайт перестать работать с песочницей PayPal, хотя он по-прежнему работает с рабочей версией PayPal. В будущем такое же ограничение будет иметь производственный PayPal. Мы используем классический ASP и компонент Microsoft WinHTTP.WinHTTPRequest.5.1 для связи с PayPal. Вот код ниже. objHttp.StatusText возвращает «Плохой запрос». Мы на Windows Server 2008 R2. Я попытался использовать вместо этого MSXML2.ServerXMLHTTP.6.0, но он работает только на моей машине разработки Windows 8.1, а не на нашем Windows Server 2008 R2. Хотя MSXML2.ServerXMLHTTP.6.0 является надмножеством WinHTTP.WinHTTPRequest.5.1, но он менее надежен, чем WinHTTP.WinHTTPRequest.5.1. Наш код дает сбой несколько раз в день при использовании MSXML2.ServerXMLHTTP.6.0 в прошлом, поэтому я предпочитаю использовать WinHTTP.WinHTTPRequest.5.1. Я также не уверен в этой строке кода: objHttp.Option (9) = & H0AA0. Обходной путь, который мы используем, - это вызов WebAPI для отправки сообщения в PayPal; однако это вызывает дополнительную незначительную задержку.
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:
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