Я пытаюсь внедрить IPN-прослушиватель для подтверждения платежей Paypal моих клиентов. Я пытался реализовать IPN-прослушиватель, и когда я тестировал его с помощью симулятора Paypal, он говорил «подтвержденное рукопожатие». Тем не менее, когда я пытаюсь что-то купить с помощью учетной записи в песочнице, и после оплаты она связывается с моим сайтом подтверждения, он всегда говорит, что транзакция недействительна. Ребята, у вас есть идея?
Вот мой код слушателя
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Confirmation : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
// Post back to either sandbox or live
string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
string strLive = "https://www.paypal.com/cgi-bin/webscr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
// Set values for the request back
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] Param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(Param);
strRequest = strRequest + "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
// for proxy
// Dim proxy As New WebProxy(New System.Uri("http://url:port#"))
// req.Proxy = proxy
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
// Send the request to PayPal and get the response
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();
if (strResponse == "VERIFIED")
{
test.InnerText = "Verified";
}
else if (strResponse == "INVALID")
{
test.InnerText = "invalid";
}
else
{
test.InnerText = "error";
}
Span1.InnerText = strRequest;
test.InnerText = strResponse;
}
}
РЕДАКТИРОВАТЬ: В истории IPN я получаю ответ HTTP 200 и говорит, что он проверен. Но почему мой код говорит, что это НЕВЕРНО?