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
{
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
StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close(); req.GetResponse() 不是请求吗?
这个是请求么?为什么用chrome或者filebug监视不到请求呢?
这个是请求么?为什么用chrome或者filebug监视不到请求呢?
这是服务器端发送的请求,浏览器端自然看不到
这个是请求么?为什么用chrome或者filebug监视不到请求呢?
的确就是这个,发送请求不就是为了“获取响应”吗?你自己断点一下就知道了,看看是不是连不上服务器
这个是请求么?为什么用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]