C# SagePay-接收时发生意外错误

C# SagePay-接收时发生意外错误,c#,transactions,httpwebrequest,integration,opayo,C#,Transactions,Httpwebrequest,Integration,Opayo,按照以下地址的说明操作: 我得到以下错误: 基础连接已关闭:接收时发生意外错误 创建包含所有必需值(VPSProtocol、TxType、Vendor、Crypt)的要发布的URL 使用Form Integration Encryption Password作为密钥和IV(RijndaelManaged)加密Crypt字段(包含所有必需的值) 实例化HttpWebRequest(KeepAlive=false;Method=“POST”(也尝试获取)) SecurityProtocol=Tls1

按照以下地址的说明操作:

我得到以下错误:

基础连接已关闭:接收时发生意外错误

  • 创建包含所有必需值(VPSProtocol、TxType、Vendor、Crypt)的要发布的URL

  • 使用Form Integration Encryption Password作为密钥和IV(RijndaelManaged)加密Crypt字段(包含所有必需的值)

  • 实例化HttpWebRequest(KeepAlive=false;Method=“POST”(也尝试获取))

  • SecurityProtocol=Tls12(也尝试了Ssl3和Tls)

  • 最初我的呼叫站点不是Https(没有SSL证书)

  • 已尝试创建自签名证书

  • 加密过程使用MemoryStream/CryptoStream/StreamWriter对要在Crypt参数中传递的数据进行加密

  • url复制了Apendix的一个加密字段示例

  • Sagepay Url-我将参数附加到该Url

  • 回应

    基础连接已关闭:接收时发生意外错误


    几乎没有想法了。

    你能给我们看看你的代码吗?不看到它就无法调试。请给我们一个很好的解释,看起来SagePay/.net的知识非常缺乏,但谢天谢地,我可能已经发现了这个问题。我使用完全相同的代码创建了一个控制台应用程序,它使用.NET4.0框架工作,而web应用程序使用.NET4.5。控制台应用程序是从我的本地桌面运行的,而该应用程序是从Windows web服务器运行的。强烈建议问题在于SagePay/.net 4.5。当我在.NET4.0中构建web应用程序并查看会发生什么时,就会证明这一点。您得到的错误来自于您的代码,而不是他们的代码。文档非常清楚如何发送和接收到他们的服务器,我从来没有遇到过问题。正如我在评论中指出的,完全相同的代码可以通过从我的桌面运行的控制台应用程序工作。注:“完全相同的代码”。因此,问题可能出在框架/sagepay或服务器上;请保留对主题的评论和建设性意见。
    string valsToCrypt = "VendorTxCode= ....etc
    
    using (RijndaelManaged myRijndael = new RijndaelManaged())
    {
        var passToBytes = System.Text.Encoding.UTF8.GetBytes("pass val");
        myRijndael.Key = passToBytes;
        myRijndael.IV = passToBytes;
    
        // Encrypt the string to an array of bytes. 
        byte[] encrypted = EncryptStringToBytes(valsToCrypt, myRijndael.Key, myRijndael.IV);
    
        string cryptEncrypted = "";
    
        foreach (byte item in encrypted)
        {
            cryptEncrypted += item;
        }
    
        string uri = "https://test.sagepay.com/gateway/service/vspform-register.vsp";
        uri += "?VPSProtocol=3.00&TxType=PAYMENT&Vendor=vendorname&Crypt=@" + cryptEncrypted;
        var webRequest = (HttpWebRequest)WebRequest.Create(uri);
        webRequest.KeepAlive = false;
        webRequest.Method = "POST";