我在收回数据时不断收到来自PayPal的INVALID
回复,以验证它是否来自他们。我已经阅读了很多关于SO的其他帖子,到目前为止没有任何帮助。这是我可以验证的:
cmd=_notify-validate&
。这是一些发布数据的快速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?
答案 0 :(得分:1)
我遇到了同样的问题。它似乎是模拟器的错误。
尝试清除模拟器中的所有日期字段,使其为空白。似乎表单中的某些特殊字符会导致问题。
这只是IPN模拟器中的一个错误,真正的IPN消息不会以同样的方式受到影响。