Живая Ошибка Paypal
Я использую PayPal в ASP.net и когда я тестировал в песочнице, все было правильно, но когда я использую живую часть, я получаю эту ошибку:
Этот платеж не может быть завершен, и с вашего счета не было снято никаких платежей. Пожалуйста, свяжитесь с вашим продавцом для получения дополнительной информации. В настоящее время мы не можем обработать ваш платеж с помощью вашего счета PayPal. Пожалуйста, вернитесь на сайт продавца и попробуйте использовать другой способ оплаты (если он доступен).
Это мой webconfig
<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;
}
И это все, что я проверяю после возвращения из paypal на мой адрес
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()
Нет перенаправления на paypal. Существует только
post
на этот адрес с параметрами post, а неget
(redirect).И это логично, потому что если вы размещаете все эти конфиденциальные данные на url, то подвергается любому, кто является эфирным прокси в среднем эфире все, что держит url со всеми этими данными.
Для меня, если вы сделаете редирект с этими данными, а не пост, то paypal не найдет ничего об учетной записи, потому что нет данных post, и вот почему вы получаете эту ошибку.