protected void Page_Load(object sender, EventArgs e)
        {
            string strFormValues;
            string strNewValue;
            string strResponse;
            string reqUrl = "https://www.sandbox.paypal.com/cgi-bin/webscr";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(reqUrl);
            //设置request属性
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            byte[] param = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength);
            strFormValues = Encoding.ASCII.GetString(param);
            //建议在此将接收到的信息记录到日志文件中以确认是否收到IPN信息
            strNewValue = strFormValues + "&cmd=_notify-validate";
            req.ContentLength = strNewValue.Length;
            //发送request
            StreamWriter stOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
            stOut.Write(strNewValue);
            stOut.Close();            //回复IPN并接受反馈信息
            StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
            strResponse = stIn.ReadToEnd();
            stIn.Close();                        //确认IPN是否合法
            if (strResponse == "VERIFIED")
            {
                //检查付款状态
                //检查 receiver_email 是否是您的 PayPal 账户中的 EMAIL 地址
                //检查付款金额和货币单位是否正确
                //处理这次付款,包括写数据库
                //检查付款状态
                if (Request.Form["payment_status"] == "Completed")
                {
                    //检查交易号 txn_id 是否已经处理过
                    //Request.Form["txn_id"]
                    //检查receiver_email 是否是您的PayPal 账户中的EMAIL 地址,yourbesiness是商家帐号,对比看有没有被改
                    if (Request.Form["receiver_email"].ToString() == "yourbesiness")
                    {
                        //检查付款金额和货币单位是否正确,amount是你从数据库定单查询出来,进行比对
                        if (Request.Form["mc_gross"].ToString() == "amount")
                        {
                            if (Request.Form["mc_currency"].ToString() == "USD")//对比币种
                            {
                                //处理这次付款,包括写数据库
                            }
                        }
                    }
                }
            }
        }上面就是要讨论的代码了。其中,注释行//发送request有点疑问了,按照我的理解是,前面的代码构建了一个request请求,并设置了该请求的相关参数,在发送的时候是不是应该有一个比较明显的发送方法呢?例如:send什么的。莫非stOut.Write(strNewValue);就是发送?应该不可能吧?还有就是,我对代码行
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);添加监视,在监视窗口中看到“req.GetRequestStream()”引发的异常,在没有被捕捉的情况下为什么不报错呢?PalPalHTTP Request

解决方案 »

  1.   

    //回复IPN并接受反馈信息
                StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
                strResponse = stIn.ReadToEnd();
                stIn.Close();            req.GetResponse() 不是请求吗?
      

  2.   


    这个是请求么?为什么用chrome或者filebug监视不到请求呢?
      

  3.   


    这个是请求么?为什么用chrome或者filebug监视不到请求呢?
    这是服务器端发送的请求,浏览器端自然看不到
      

  4.   


    这个是请求么?为什么用chrome或者filebug监视不到请求呢?
    的确就是这个,发送请求不就是为了“获取响应”吗?你自己断点一下就知道了,看看是不是连不上服务器
      

  5.   

    你是要搞明白他们的工作原理还是要做好可以使用?关于深层应用不建议你去过于深入理解。因为PAYPAL太强大除非你想进入他们的团队。关于你说异常主要是他的数据交换不是一般得明显性数据交换。req已经定义了PAYPAL的数据集,你测试不出来是很正常得事。加油做好接口,收钱就行了。还有建议你向PAYPAL去要一份详细得数据结构说明。对你有帮助。
      

  6.   


    这个是请求么?为什么用chrome或者filebug监视不到请求呢?
    的确就是这个,发送请求不就是为了“获取响应”吗?你自己断点一下就知道了,看看是不是连不上服务器应该是这样的吧,我自己在msdn上弄了一段代码,尝试着把创建了一个请求,访问百度页面,结果获取到了百度首页的html,哈哈,蛮有意思,这就是小偷程序的思路吧?比如我想获取别人网站上的电影资源,也不用去点击翻页了,只需要提供相应的参数即可,哈哈哈哈哈!![code=csharp]        public void GetPageResouseByUrl(string urlAddress) 
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);            // Set some reasonable limits on resources used by this request
                request.MaximumAutomaticRedirections = 4;
                request.MaximumResponseHeadersLength = 4;
                // Set credentials to use for this request.
                request.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();            //Response.Write(string.Format("Content length is {0}", response.ContentLength));
                //Response.Write(string.Format("Content type is {0}", response.ContentType));            // Get the stream associated with the response.
                Stream receiveStream = response.GetResponseStream();            // Pipes the stream to a higher level stream reader with the required encoding format. 
                StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);            Response.Write(readStream.ReadToEnd());
                response.Close();
                readStream.Close();
            }
    [/code]