Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Paypal错误从Asp.net中的传输流接收到意外的EOF或0字节_C#_Asp.net_Paypal_Paypal Sandbox - Fatal编程技术网

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

C# Paypal错误从Asp.net中的传输流接收到意外的EOF或0字节,c#,asp.net,paypal,paypal-sandbox,C#,Asp.net,Paypal,Paypal Sandbox,我在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:

我在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()时会发生错误

参数包含: USER=&PWD=&METHOD=SetExpressCheckout&VERSION=76.0&HDRIMG=&RETURNURL=&CANCELURL=&BUTTONSOURCE=PP ECWizard&SUBJECT=&ALLOWNOTE=0&PAYMENTREQUEST\u 0\u PAYMENTACTION=Sale&PAYMENTREQUEST\u 0\u AMT=100&PAYMENTREQUEST\u 0\u CURRENCYCODE=AUD&NOSHIPPING=1&L\u PAYMENTREQUEST\u 0\u NAME0=Registration&L\u PAYMENTREQUEST\u 0\u DESC0=Registration+Details&L\u PAYMENTREQUEST\u 0\u PAYMENTREQUEST\u AMT0=100

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

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

另外,如果我张贴上述网址(&PWD=&METHOD=SetExpressCheckout&VERSION=76.0&HDRIMG=&RETURNURL=&CANCELURL>&BUTTONSOURCE=PP ECWizard&SUBJECT=&ALLOWNOTE=0&PAYMENTREQUEST\u 0\u PAYMENTACTION=Sale&PAYMENTREQUEST\u AMT=100&PAYMENTREQUEST\u 0\u CURRENCYCODE=AUD&NOSHIPPING=1&L\u PAYMENTREQUEST\u 0\u PAYMENTREQUEST\u_0_DESC0=注册+详细信息&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_AMT0=100)在浏览器中,它将返回所需的结果

非常感谢你的帮助


谢谢。

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

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

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

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

你可能需要检查你的环境,Paypal最近在沙箱环境中增强了安全性。请参阅@ZhaoSamanta-感谢你分享的信息。但是,如果Paypal增强了沙盒环境的安全性。他们不应该对其live环境也做同样的增强。当我阅读PayPal API文档时,他们建议在开发时使用沙盒环境,完成后只需切换到live环境。目前我的web应用程序在live环境中工作。当我发布URL(用于沙盒)直接连接到浏览器也可以。非常感谢您或任何人提供的任何帮助。谢谢。PayPal首先在沙盒环境中进行更改,让商家知道更改。Live环境将在稍后更改,可能在今年6月。VB版本:System.Net.ServicePointManager.SecurityProtocol=System.Net.SecurityProtocolType.Tls12