我试图从paypal沙盒环境获得响应,以测试从paypal返回的变量。我正在使用asp.net和vb.net,现在代码在现场支付宝网上工作正常,但由于某些奇怪的原因,不能在本地代码上工作。
我想使用沙盒环境进行本地测试,但是出现以下错误。
System.dll中出现“System.Net.WebException”类型的异常,但未在用户代码中处理
其他信息:底层连接已关闭:发送时发生意外错误。
现在代码正常运行
Dim req As HttpWebRequest = CType(WebRequest.Create("https://www.paypal.com/cgi-bin/webscr"), HttpWebRequest)
我以为我所改变的只是这个
Dim req As HttpWebRequest = CType(WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"),
主要代码
Dim req As HttpWebRequest = CType(WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"), HttpWebRequest)
'Set values for the request back
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
Dim Param() As Byte = Request.BinaryRead(HttpContext.Current.Request.ContentLength)
Dim strRequest As String = Encoding.ASCII.GetString(Param)
strRequest = strRequest + "&cmd=_notify-validate"
req.ContentLength = strRequest.Length
'Send the request to PayPal and get the response
Dim streamOut As StreamWriter = New StreamWriter(req.GetRequestStream(), Encoding.ASCII)
streamOut.Write(strRequest)
streamOut.Close()
Dim streamIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream())
Dim strResponse As String = streamIn.ReadToEnd()
streamIn.Close()
'Assign payment variables
strOrderNo = HttpContext.Current.Request("item_number")
strGross = HttpContext.Current.Request("mc_gross")
编辑2 经过进一步的调查后,似乎是paypal改变了他们的沙箱的方式,但我无法将我的应用程序升级到4.5只是使用沙箱是他们对我开放的任何选项?根据这个堆栈
建议更改此行以使用Tsl12,但这不是我网站上的选项,我无法将其升级为其日常使用的网站。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
为什么代码在实时环境中工作正常为什么paypal改变了他们的沙箱来做这个?
答案 0 :(得分:1)
对于其他任何挣扎的人,我发现如何使用以下黑客来解决这个问题
Const _Tls12 As SslProtocols = DirectCast(&HC00, SslProtocols)
Const Tls12 As SecurityProtocolType = DirectCast(_Tls12, SecurityProtocolType)
ServicePointManager.SecurityProtocol = Tls12
感谢How to implement Security Protocols TLS 1.2 in .Net 3.5 framework
这个伟大的行动任何人都可以告诉我没有使用上述黑客的含义,这将是未来的证据。