在发送数据以验证数据是否来自他们时,我不断收到PayPal的INVALID
响应。到目前为止,我已经阅读了许多其他关于SO的帖子,但没有任何帮助。这是我可以验证的:
- 参数的顺序是相同的。
- 数据是相同的,除了我在请求的前面加上
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 消息不会以同样的方式受到影响。