PayPal沙盒阻止WinHTTP.WinHTTPRequest.5.1

3

paypalfunctions.asp 和 expresscheckout.asp 文件

我希望能得到帮助,如果不能得到帮助,那么我需要雇佣一位精通Classic ASP和PayPal的开发人员来解决这个问题。

我们有一个运行Classic ASP的Windows 2008 R2服务器。我们已经进行了一年以上的沙箱测试开发,并且最近所有的PayPal Express Checkout "posts"似乎都停止了,现在当你点击按钮进入expresscheckout时,屏幕变成了白色,什么也没有返回。

所以,这意味着PayPal似乎停止了或改变了它与WinHTTP.WinHTTPRequest.5.1的工作方式,或者我们的服务器已经更新了?

PayPal在使用Classic ASP中的WinHTTPRequest.5.1发送NVP,用于其Express Checkout。

我们正在使用带有API Signature的IPN通知的Classic ASP。

当paypalfunctions.asp中删除On Error Resume Next时,我会收到以下错误:

500错误 - 描述:安全通道支持中出现错误。
错误代码:80072f7d。行:176

添加

objHTTP.Option(9) = 128 

针对 WinHTTP 请求进行操作

response.write(nvpStrComplete) 
方法 = SetExpressCheckout&版本= 93&USER = sdk%2Dthree%5Fapi1%2Esdk%2Ecom&PWD = QFZ
CWN5HZM8VBG7Q&SIGNATURE = A%2DIzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzm
OU&L%5FPAYMENTREQUEST%5F0%5FNAME0 =我的订单&L%5FPAYMENTREQUEST%5F0%5FDESC0 =我的
项目&L%5FPAYMENTREQUEST%5F0%5FAMT0 = 4&L%5FPAYMENTREQUEST%5F0%5FNAME1 =处理
费用&L%5FPAYMENTREQUEST%5F0%5FAMT1 = 0%2E42&PAYMENTREQUEST%5F0%5FPAYMENTACTION = Sale
&PAYMENTREQUEST%5F0%5FCURRENCYCODE = USD&PAYMENTREQUEST%5F0%5FAMT = 4%2E42&RETURNURL
= http%3A%2F%2Fwww%mysite%2Ecom%2F%23paymentcomplete&CANCELURL = http%3A%2F%2Fwww%2
Emysite%2Ecom%2F%23paymentcancel&ALLOWNOTE = 0&BUTTONSOURCE = PP%2DECWizard

这对我来说看起来不错?

有人知道如何通过使用 paypalfunctions.asp 标准输出向导集成代码绕过 WinHTTP.WinHTTPRequest.5.1 吗?

如果不行,或者这已经不再是一个选项,可以推荐一位专业和有能力的 Classic ASP / PayPal 开发者,以便他/她可以与我们现有的代码一起工作/修订吗?


1
实际问题是什么?您确定 WinHTTP.WinHTTPRequest.5.1 不再受支持了吗?您是否遇到错误?您能展示一下您正在使用的 HTTP 请求代码片段(不包括用户名和密码)吗?到目前为止,您没有告诉我们太多信息,很难判断您希望我们做什么。 - user692942
没问题,你不需要下载文件,但是当你要求一个代码“片段”时,基于PayPal文件的结构,确切地知道哪个片段是有用的/问题所在有点困难。看起来问题出在WinHTTP协议的使用上,但据我了解,你不认为这是问题所在? - Steve
我已经给你的问题点了踩?有六个人浏览了这个问题,我只是花时间与你互动了一下,但不再做更多。 - user692942
你肯定会从 WinHTTP.WinHTTPRequest.5.1 调用开始,然后继续进行吧? - user692942
不要再错了,问题在于TLS 1.2而不是WinHTTPRequest对象。这里还有一个可能不是TLS 1.2的问题,也许是这个http://stackoverflow.com/q/14691204/692942。我的观点是你的问题不够清晰,范围太广,无法期望得到任何有意义的帮助。 - user692942
显示剩余30条评论
1个回答

3

总结评论如下。

错误指向安全通道问题,通常与使用错误协议调用端点有关。

这并不意味着WinHTTP.WinHTTPRequest.5.1无法工作,只是意味着使用了错误的协议来进行HTTP请求。

由于SSL 3.0中POODLE互联网安全漏洞,PayPal告知用户从Sandbox开始将停用对SSL 3.0的支持

引用自PayPal - 必要的安全更新

PayPal 如何应对?

PayPal 将在未来通过PayPal Notify公布时间表,彻底停用 SSL 3.0 支持;然而,基于安全监控,我们可能需要迅速采取行动以保护我们的客户,因此时间对于进行更改至关重要。不幸的是,我们意识到关闭 SSL 3.0 可能会导致一些客户的兼容性问题,这可能导致无法使用 PayPal 在某些商家网站上付款或其他处理问题,我们仍在确定中。为了使您能够评估和潜在地解决问题,我们提供了此商家响应指南,以确保您的集成不受此漏洞的影响。

解决方法是使用 TLS,这样应该可以连接到端点而没有任何问题。

你可以使用 WinHttp.WinHTTPRequest.5.1 对象的 Option 属性WINHTTP_OPTION_SECURITY_FLAGS 来实现此操作。

'The WINHTTP_OPTION_SECURITY_FLAGS option
Const WinHttpRequestOption_SecureProtocols = 9

'Valid WINHTTP_OPTION_SECURITY_FLAGS option flags
Const SecureProtocol_SSL2   = 8       'SSL 2.0
Const SecureProtocol_SSL3   = 32      'SSL 3.0
Const SecureProtocol_TLS1   = 128     'TLS 1.0
Const SecureProtocol_TLS1_1 = 512     'TLS 1.1
const SecureProtocol_TLS1_2 = 2048    'TLS 1.2

你可以按照以下方式修改WinHttp对象(假设该对象称为winhttp,以切换安全协议:
winhttp.Option(WinHttpRequestOption_SecureProtocols) = SecureProtocol_TLS1_2

注意:某些版本的Windows Server不支持SecureProtocol_TLS1_2标志,或者可能需要热修复程序。这实际上取决于系统上安装的winhttp.dll版本。

有用的链接


2
好的...据我所知...Windows 2008 R2中的winhttp.dll不包含TLS 1.1或TLS1.2协议。看起来PayPal强制在沙盒中使用TLS 1.2,这意味着即使在注册表中设置了TLS协议,Windows 2008 R2也无法识别它们。参考这个帖子,还有大约两周前发布的一些帖子,显示没有解决方案:http://forums.iis.net/t/1229018.aspx?winhttp+dll+on+windows+2008+r2+x64 - Steve
@Steve 不是最理想的选择,但值得一看 - 如何限制Schannel.dll中某些加密算法和协议的使用。这似乎是可行的,只是不太直接,另一个选择是升级到Windows Server 2012。从长远来看,你可能会发现这更少痛苦。 - user692942
@Steve,看一下这些微软支持链接,比如这个 - 当你使用TLS 1.2时,Windows禁用了SHA512,建议通过Windows更新提供的更新已经修复了这些问题。如果你发现问题没有解决,可以尝试确保Windows Server 2008 R2已经完全打了补丁,或者直接联系微软客服寻求帮助。 - user692942
我的朋友,我累坏了。 - Steve
2
你最好告诉你的老板不要那么固执,否则六月份PayPal启用正式服务器时你会陷入困境。 - Drew Angell
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接