实时贝宝错误
Posted
技术标签:
【中文标题】实时贝宝错误【英文标题】:Live Paypal Error 【发布时间】:2012-09-21 15:37:58 【问题描述】:我在 ASP.net 中使用 PayPal,当我在沙盒中测试时一切正常,但是当我使用实时部分时,我收到了这个错误:
此付款无法完成,您的帐户也没有被扣款。请联系您的商家以获取更多信息。 我们目前无法使用您的 PayPal 帐户处理您的付款。请返回商家网站并尝试使用其他付款方式(如果有)。
这是我的网络配置
<add key="token" value="*************************"/>
<add key="paypalemail" value="*************@gmail.com"/>
<add key="PayPalSubmitUrl" value="https://www.paypal.com/cgi-bin/webscr"/>
<add key="FailedURL" value="http://www.stockholmsbygg.net/Failed.aspx"/>
<add key="SuccessURL" value="http://www.stockholmsbygg.net/FindOpenRequests.aspx"/>
<add key="Notification" value="http://www.stockholmsbygg.net/Notification.aspx"/>
并重定向到 Paypal
public static string RedirectToPaypal(string invoiceNumber, string requestId, string userId, string customId, string itemName, string amount)
string redirecturl = "";
redirecturl += "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=" + ConfigurationManager.AppSettings["paypalemail"].ToString();
redirecturl += "&first_name=" + userId;
redirecturl += "&item_name=" + itemName;
redirecturl += "&amount=5.00";
redirecturl += "&quantity=1";
redirecturl += "¤cy=SEK";
redirecturl += "&invoice=" + invoiceNumber;
redirecturl += "&custom=" + requestId;
redirecturl += "&on0=" + HttpContext.Current.Request.UserHostAddress;
redirecturl += "&return=" + ConfigurationManager.AppSettings["SuccessURL"].ToString() + "?Type=ShowDetail";
redirecturl += "&cancel_return=" + ConfigurationManager.AppSettings["FailedURL"].ToString();
redirecturl += "¬ify_url=" + ConfigurationManager.AppSettings["Notification"].ToString();
return redirecturl;
这是我从贝宝返回到我的地址后检查的所有内容
if (Request.QueryString["cm"] != null)
const string authToken = "*********************************";
string txToken = Request.QueryString["tx"];
string query = "cmd=_notify-synch&tx=" + txToken + "&at=" + authToken;
//const string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
string strSandbox = "https://www.paypal.com/cgi-bin/webscr";
var req = (HttpWebRequest)WebRequest.Create(strSandbox);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = query.Length;
var streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(query);
streamOut.Close();
var streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();
var results = new Dictionary<string, string>();
if (strResponse != "")
var reader = new StringReader(strResponse);
string line = reader.ReadLine();
if (line == "SUCCESS")
while ((line = reader.ReadLine()) != null)
results.Add(line.Split('=')[0], line.Split('=')[1]);
var userId = Convert.ToInt64(Session["UserID"]);
var item = Convert.ToInt64(Request.QueryString["cm"]);
context = new entities();
var existUser = context.Payments.Where(u => u.UserID == userId).ToList();
var existItem = existUser.Where(i => i.RequestID == item).ToList();
var paypalInvoice = results["invoice"];
var txn_id = results["txn_id"];
var sameInvoice =
existItem.Where(i => i.invoice== paypalInvoice).FirstOrDefault();
if (sameInvoice != null)
var currentAmount = Request.QueryString["amt"];
var dbAmount = Convert.ToDecimal(sameInvoice.Amount).ToString();
var currentIp = HttpContext.Current.Request.UserHostAddress;
if (dbAmount != null)
if (currentAmount == dbAmount)
if (currentIp == sameInvoice.IP)
sameInvoice.Status = true;
sameInvoice.PaypalTX = txn_id;
pnlSearch.Visible = false;
pnlShowDetail.Visible = true;
ShowDetail(Request.QueryString["cm"], true);
btnBack.Visible = false;
PrivateDetail.Visible = true;
interested.Visible = false;
context.SaveChanges();
else if (line == "FAIL")
// Log for manual investigation
Response.Write("Unable to retrive transaction detail");
else
//unknown error
Response.Write("ERROR");
有什么问题? 同样在第一次测试时,我付了钱,但什么也没发生。发票状态仍然是假的,但自从我付款后它应该变成真了!
【问题讨论】:
【参考方案1】:这个函数是错误的 100% RedirectToPaypal()
没有重定向到贝宝。该地址只有post
带有post 参数,而不是get
(重定向)。
这是合乎逻辑的,因为如果您将所有敏感数据放在 url 上,那么任何将 url 与所有数据一起保存在中间的 ether 代理的人都会暴露给任何人。
对我来说,如果您使用该数据进行重定向而不是发布,则在 paypal 中找不到有关该帐户的任何信息,因为没有发布数据,这就是您收到该错误的原因。
【讨论】:
非常感谢,我应该知道些什么!!请帮帮我,你有什么建议?为什么它在沙盒上工作? @user1615818 我不知道什么有效,但事实并非如此。你能在这里告诉你如何在贝宝上发第一篇付款吗? @user1615818 你读过这本手册吗? cms.paypal.com/cms_content/US/en_US/files/developer/… 与我编写的完全相同的代码。当我第一次在 Paypal 的 Live 上进行测试时,一切正常,金额也从我的帐户中提取。但是应该在后付款中进行的更改没有完成。我再次尝试测试,这次没有取款,并提示上述错误。 @user1615818 看,你在这里写了我不知道你在哪里找到的代码。很简单 - 获取官方的 paypal 代码并按原样使用它。从这里获取它cms.paypal.com/ca/cgi-bin/…以上是关于实时贝宝错误的主要内容,如果未能解决你的问题,请参考以下文章
获取实时贝宝帐户的 clientID 和 clientSecret