IPN 通知验证无效

IPN Notification Verfication INVALID

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

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

这是一些 post 数据的快速 hacky 代码:

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() 数据验证了这是正确的。

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

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

我好像在兜圈子,不知如何是好。

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

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

我遇到了同样的问题。看来是模拟器出错了。

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

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