最近在做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")//对比币种
{
//处理这次付款,包括写数据库
}
}
}
}
}
}
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() 不是请求吗?
这个是请求么?为什么用chrome或者filebug监视不到请求呢?