IPN 通知验证无效



在发送数据以验证数据是否来自他们时,我不断收到PayPal的INVALID响应。到目前为止,我已经阅读了许多其他关于SO的帖子,但没有任何帮助。这是我可以验证的:

  1. 参数的顺序是相同的。
  2. 数据是相同的,除了我在请求的前面加上cmd=_notify-validate&

这是一些快速的黑客代码来发布数据:

using (WebClient client = new WebClient())
{
    var nvc = new NameValueCollection { {"cmd", "_notify-validate"} };
    foreach (var f in formCollectionData.AllKeys)
        nvc.Add(f, formCollectionData[f]);
    try
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        var response = client.UploadValues(_urls[payPalResponse.test_ipn], "POST", nvc);
        var result = System.Text.Encoding.UTF8.GetString(response); //returns "INVALID"
    }
    catch (Exception e)
    {
        ;
    }
}

formCollectionData是馈送到我的操作(使用 MVC)的数据。我已经通过查看Request.Form.ToString()数据来验证这是正确的。

我尝试使用其他几种方法发布,但得到了相同的INVALID结果。

我已经阅读了有关将PayPal首选项中的语言编码更改为UTF-8的信息,但我使用的是IPN模拟器,因此不确定这将如何应用。

我似乎在兜圈子,不知道该怎么办。

编辑我刚刚通过进入 IPN 历史记录并重新发送一个从我的沙盒PayPal帐户中尝试了这个,它工作正常。我得到的已验证状态。

这意味着它只是 IPN 模拟器无法正常工作,因此我认为这与编码有关。是否可以查看/更改模拟器的编码为 UTF-8?

我遇到了同样的问题。这似乎是模拟器的错误。

尝试清除模拟器中的所有日期字段,使其为空。似乎是表单中的某些特殊字符导致了问题。

这只是 IPN 模拟器中的一个错误,真正的 IPN 消息不会以同样的方式受到影响。

相关内容

  • 没有找到相关文章

最新更新