首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

前不久在做PayPal接口,一些代码不是很明白,希望和大家讨论下

2013-08-01 
最近在做PayPal接口,一些代码不是很明白,希望和大家讨论下。protected void Page_Load(object sender, Even

最近在做PayPal接口,一些代码不是很明白,希望和大家讨论下。

        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()”引发的异常,在没有被捕捉的情况下为什么不报错呢? PalPal HTTP?Request
[解决办法]
//回复IPN并接受反馈信息
            StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
            strResponse = stIn.ReadToEnd();
            stIn.Close();            

req.GetResponse() 不是请求吗?
[解决办法]
引用:
Quote: 引用:

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

req.GetResponse() 不是请求吗?


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

这是服务器端发送的请求,浏览器端自然看不到
[解决办法]
引用:

Quote: 引用:

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

req.GetResponse() 不是请求吗?


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

的确就是这个,发送请求不就是为了“获取响应”吗?你自己断点一下就知道了,看看是不是连不上服务器
[解决办法]
你是要搞明白他们的工作原理还是要做好可以使用?关于深层应用不建议你去过于深入理解。因为PAYPAL太强大除非你想进入他们的团队。关于你说异常主要是他的数据交换不是一般得明显性数据交换。req已经定义了PAYPAL的数据集,你测试不出来是很正常得事。加油做好接口,收钱就行了。还有建议你向PAYPAL去要一份详细得数据结构说明。对你有帮助。

热点排行