在.Net中为Payapal编码IPNListener为什么我不能从沙箱获得响应?

时间:2016-10-07 09:49:31

标签: .net paypal

我正在尝试从Paypal Sandbox IPN模拟器获得'验证'回复。 我找到并尝试了一些样品,但我无法工作。所以我想我必须错过一些非常明显的东西。 下面是我最近的尝试,我尝试了前缀和后缀'cmd = _notify-validate'以及ASCII和UTF8编码。 在所有情况下,从模拟器中获取参数字符串,然后从请求中获得空的共鸣。

如果有人能够发现我的错误,那将会使我的星期五。 感谢

public partial class IPNListner : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        byte[] parameters = Request.BinaryRead(Request.ContentLength);
        string body = Verify(true, parameters);
    }
    private string Verify(bool isSandbox, byte[] parameters)
    {

        string response = "";
        try
        {

            string url = isSandbox ?
              "https://www.sandbox.paypal.com/cgi-bin/webscr" : "https://www.paypal.com/cgi-bin/webscr";

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";

            //must keep the original intact and pass back to PayPal with a _notify-validate command
            string data = Encoding.ASCII.GetString(parameters);
            data += "&cmd=_notify-validate";

            webRequest.ContentLength = data.Length;

            //Send the request to PayPal and get the response                 
            using (StreamWriter streamOut = new StreamWriter(webRequest.GetRequestStream(), System.Text.Encoding.ASCII))
            {
                streamOut.Write(data);
                streamOut.Close();
            }
            using (StreamReader streamIn = new StreamReader(webRequest.GetResponse().GetResponseStream()))
            {
                response = streamIn.ReadToEnd();
                streamIn.Close();
            }
        }
        catch { }
        return response;
    }       
}

1 个答案:

答案 0 :(得分:0)

好吧,我是傻瓜,设置沙箱帐户使用我的IPN列表,它工作正常。怀疑我在使用paypal IPN模拟器时应该使用www.developer.paypal.com地址。上面的代码适用于Sandbox我相信它会正常工作。