Paypal 错误从 Asp.net 中的传输流中收到意外的 EOF 或 0 字节

Posted

技术标签:

【中文标题】Paypal 错误从 Asp.net 中的传输流中收到意外的 EOF 或 0 字节【英文标题】:Paypal error Received an unexpected EOF or 0 bytes from the transport stream in Asp.net 【发布时间】:2016-06-07 20:44:18 【问题描述】:

我收到此错误,在 api-3t.sandbox.paypal.com 中调用 SetExpressCheckout 时,从传输流中收到了意外的 EOF 或 0 字节。我正在使用 Asp.net 调用 api。

这是我的代码:

private static NameValueCollection Submit(string values)

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
       String.Format("https://0/nvp", PayPalSettings.ApiDomain));

    request.Method = "POST";
    request.ContentLength = values.Length;

    using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    
        writer.Write(values);
    

    WebResponse webResponse = request.GetResponse();
    Stream response = webResponse.GetResponseStream();
    using (StreamReader reader = new StreamReader(response))
    
        return HttpUtility.ParseQueryString(reader.ReadToEnd());
    

当我调用 request.GetRequestStream() 时会发生错误。

values 参数包含: user = &pwd = &method = setExpressCheckout&Version = 76.0&hdrimg = &returnull = &cancelucll = pp-ecwizard&project =&allownote = 0&paintrequest_0_paymentaction = 0&paymentquest_0_paymentaction = publyquest_0_currencycode = aud&numping = 1&l_paymentRequest_0_name0 =注册&L_PAYMENTREQUEST_0_DESC0=注册+详细信息&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_AMT0=100

PayPalSettings.ApiDomain = api-3t.sandbox.paypal.com

奇怪的是,如果我使用上面相同的代码并调用 live/production paypal api,它会起作用。当然使用实时/生产 url 和凭据。

另外,如果我发布上面提到的 url(https://api-3t.sandbox.paypal.com/nvp?USER=&PWD=&METHOD=SetExpressCheckout&VERSION=76.0&HDRIMG=&RETURNURL=&CANCELURL=&BUTTONSOURCE = PP-ECWizard&SUBJECT =&ALLOWNOTE = 0&PAYMENTREQUEST_0_PAYMENTACTION =塞尔&PAYMENTREQUEST_0_AMT = 100&PAYMENTREQUEST_0_CURRENCYCODE = AUD&NOSHIPPING = 1&L_PAYMENTREQUEST_0_NAME0 =注册&L_PAYMENTREQUEST_0_DESC0 =注册+细节&L_PAYMENTREQUEST_0_QTY0 = 1&L_PAYMENTREQUEST_0_AMT0 = 100 EM>)在浏览器中它将返回所需的结果。

非常感谢您的帮助。

谢谢。

【问题讨论】:

您可能需要检查您的环境,Paypal 最近在沙盒环境中增强了安全性。参考paypal-knowledge.com/infocenter/… @ZhaoSamanta - 感谢您分享的信息。但是有一件事,如果 PayPal 增强了沙盒环境的安全性,他们不应该对他们的实时环境进行同样的增强。当我阅读 PayPal API 文档时,他们建议在开发时使用沙盒环境,完成后只需切换到实时环境。目前我的网络应用程序在实时环境中工作。此外,当我将 URL(用于沙盒)直接发布到浏览器时,它也可以工作。非常感谢您或任何人可以提供的任何帮助。谢谢。 PayPal首先在沙箱环境中进行更改,让商家了解更改。直播环境稍后会改变,可能在今年 6 月。 【参考方案1】:

经过一番研究,我想通了。 显然自几个月前paypal 更改了支持的 TLS 版本,使 1.2 版成为支持的最低版本。

问题是 .Net Framework 3.5 不支持该版本。 对于高于 3.5 的框架,您可以添加下一行:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

由于这个问题几乎是从一年前开始的,我认为微软不会对 fw 3.5 进行更新,所以我建议将你的应用程序迁移到 4.5。

【讨论】:

VB 版本:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12

以上是关于Paypal 错误从 Asp.net 中的传输流中收到意外的 EOF 或 0 字节的主要内容,如果未能解决你的问题,请参考以下文章

如何从asp.net中的paypal(Sandbox)获取返回url中的参数

Paypal sdk asp.net 返回 (400) 错误请求

无法通过Paypal测试工具测试IPN(HTTP错误代码500)_Asp.net

如何通过 ASP.NET 将资金从商家 Paypal 帐户转移到 EndUser Paypal 帐户?

如何通过 ASP.NET 将资金从商家 Paypal 帐户转移到 EndUser Paypal 帐户?

ASP.NET 3.5 - 在 pdf 查看器中直接从流中打开 PDF