读书人

前不久在做PayPal接口一些代码不是很

发布时间: 2013-08-01 15:23:18 作者: rapoo

最近在做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去要一份详细得数据结构说明。对你有帮助。

读书人网 >asp.net

热点推荐