Paypal IPN状态始终无效?

时间:2013-12-16 09:22:08

标签: asp.net-mvc-3 paypal

从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+"&currency_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";             
        }

如果任何身体帮助我的话会受到影响。

1 个答案:

答案 0 :(得分:2)

“INVALID”消息的原因如下:
- 检查您将回复发布到正确的网址,即https://www.sandbox.paypal.com/cgi-bin/webscrhttps://www.paypal.com/cgi-bin/webscr,具体取决于您是在沙盒中进行测试还是在线。
- 确认您对测试IPN消息的响应包含与测试消息完全相同的变量和值,并且它们与测试消息中的顺序相同。最后,验证原始变量前面是cmd = _notify-validate变量 - 确保您编码您的响应字符串,并使用与测试IPN消息使用的相同字符编码。 (例如,我可以看到他正在使用带有变音符号的字母和其他符号,如“/”等)。

关于最后一点,商家可以尝试更改其PayPal帐户中使用的编码语言,请按照以下步骤操作:

  1. 登录您的PayPal帐户
  2. 点击个人资料
  3. 点击“我的销售偏好设置”标签
  4. 点击“PayPal按钮语言编码”(在页面末尾)
  5. 点击“其他选项”
  6. 从下拉菜单中选择:UTF-8
  7. 也为第二个选项选择相同的字符集,该选项与IPN
  8. 相关
  9. 点击“保存”
  10. 如果问题仍然存在,我们建议您查看正在使用的脚本,PayPal上提供了一些IPN代码示例:https://github.com/paypal/ipn-code-samples

    有关其他信息,请添加以下链接:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4