从IPN获得无效响应,有人提到像返回网址和通知网址不应该相同,但我改变了这种方式,甚至得到相同的结果。 这是我的付款代码,付款工作正常。
Paypal paypal = new Paypal();
paypal.cmd = "_xclick";
paypal.business = ConfigurationManager.AppSettings["BusinessAccountKey"];
bool useSandbox = Convert.ToBoolean(ConfigurationManager.AppSettings["UseSandbox"]);
paypal.cancel_return = "http://www.patronalerts.com/";
//paypal.@return = ConfigurationManager.AppSettings["ReturnURL"];
paypal.@return = "http://www.patronalerts.com/";
paypal.notify_url = ConfigurationManager.AppSettings["NotifyURL"];
paypal.currency_code = ConfigurationManager.AppSettings["CurrencyCode"];
paypal.item_name = "Test Product";
paypal.amount = "10";
url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd="+paypal.cmd +"&business="+ paypal.business+"&no_shipping=&return="+paypal.@return+"&cancel_return="+paypal.cancel_return+"¤cy_code="+paypal.currency_code+"&item_name="+ paypal.item_name+"&amount="+ paypal.amount;
但是在paypal帐户下面的代码或配置的问题我无法猜测。最有可能使用paypal配置,因为每个人都使用此代码。
string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] param = Request.BinaryRead(System.Web.HttpContext.Current.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
string strResponse_copy = strRequest; //Save a copy of the initial info sent by PayPal
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();
if (strResponse == "VERIFIED")
{
NameValueCollection these_argies = HttpUtility.ParseQueryString(strResponse_copy);
string user_email = these_argies["payer_email"];
string pay_stat = these_argies["payment_status"];
if (pay_stat.Equals("Completed"))
{
ViewBag.Result = "Kishore Suceess";
}
}
else if (strResponse == "INVALID")
{
ViewBag.Result = "invalids";
}
else
{
ViewBag.Result = "Ipn data for manual investigation";
}
如果任何身体帮助我的话会受到影响。
答案 0 :(得分:2)
“INVALID”消息的原因如下:
- 检查您将回复发布到正确的网址,即https://www.sandbox.paypal.com/cgi-bin/webscr或https://www.paypal.com/cgi-bin/webscr,具体取决于您是在沙盒中进行测试还是在线。
- 确认您对测试IPN消息的响应包含与测试消息完全相同的变量和值,并且它们与测试消息中的顺序相同。最后,验证原始变量前面是cmd = _notify-validate变量
- 确保您编码您的响应字符串,并使用与测试IPN消息使用的相同字符编码。 (例如,我可以看到他正在使用带有变音符号的字母和其他符号,如“/”等)。
关于最后一点,商家可以尝试更改其PayPal帐户中使用的编码语言,请按照以下步骤操作:
如果问题仍然存在,我们建议您查看正在使用的脚本,PayPal上提供了一些IPN代码示例:https://github.com/paypal/ipn-code-samples
有关其他信息,请添加以下链接:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4