Paypal IPN работает с симулятором, но не с песочницей - C # ASP.NET - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь внедрить 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 и говорит, что он проверен. Но почему мой код говорит, что это НЕВЕРНО?

...