IPN通知验证无效

时间:2016-07-11 11:34:04

标签: paypal paypal-ipn paypal-sandbox

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

  1. params的顺序是一样的。
  2. 数据是相同的,除了我在请求前加cmd=_notify-validate&
  3. 这是一些发布数据的快速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是通过我的Action(使用MVC)提供的数据。我通过查看Request.Form.ToString()数据验证了这是正确的。

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

    我已经读过将paypal偏好设置中的语言编码更改为UTF-8,但我使用的是IPN模拟器,因此不确定这是如何应用的。

    我似乎是围成一圈,不知道该怎么做。

    修改 我刚刚从我的沙盒paypal帐户尝试了这个,进入IPN历史并重新发送一个,它已经正常工作。我得到了经过验证的状态。

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

1 个答案:

答案 0 :(得分:1)

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

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

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