Я использую эту статью для игры с PayPal (http://www.codeproject.com/Articles/42894/Introduction-to-PayPal-for-C-ASP-NET-developers).
После того, как платеж PayPal (песочница) завершен, я возвращаюсь к своему представлению с этой строкой запроса:
tx=9S599242S3646572T&st=Completed&amt=9.00&cc=AUD&cm=Registration+started%3a+2012-03-10+18%3a33%3a27&item_number=
используя этот код
authToken = WebConfigurationManager.AppSettings["PDTToken"];
txToken = Request.QueryString.Get("tx");
query = string.Format("cmd=_notify-synch&tx={0}&at={1}",
txToken, authToken);
string url = WebConfigurationManager.AppSettings["PayPalSubmitUrl"];
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = query.Length;
StreamWriter stOut = new StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(query);
stOut.Close();
StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();
PayPal отвечает примерно так:
SUCCESS
first_name=Firstname
last_name=Lastname
payment_status=Completed
payer_email=firstname%40lastname.com
payment_gross=50.00
mc_currency=USD
custom=Custom+value+you+passed+with+your+HTML+form
etc.
ОК, но (возможно, исходя из этого отклика) Я хочу проверить эту транзакцию, поэтому я использую приведенный ниже код (взят из этой статьи)
string postUrl = ConfigurationManager.AppSettings["PayPalSubmitUrl"];
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(postUrl);
//Set values for the request back
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
string ipnPost = strRequest;
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();
но HttpContext.Current.Request.ContentLength
равно 0, поэтому я всегда получаю ответ INVALID
. Я что-то не так делаю?