我正在尝试创建一个页面,其中:
- 1.用户单击名为"购买"的按钮
- 2.用户被重定向到贝宝页面,在那里他需要登录并付款
在他付款后,他将被重定向到另一个页面,其中:
- 1.在页面加载中,我将检查付款是否成功
我已经这样做了,但似乎不起作用 我做了什么?
-
1.从贝宝账户启用IPN,url设置为asp页面。
2.在网站上托管这两个文件(php/asp.net)
-
3.已测试,但标签文本未更改为"完成,已付款",这意味着他无法处理付款。
购买产品的php页面:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business" value="seller@domain.com" />
<input type="hidden" name="item_name" value="Happiness" />
<input type="hidden" name="amount" value="6.52" />
<input type="submit" value="Buy!" />
</form>
asp.net页面:
protected void Page_Load(object sender, EventArgs e)
{
string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
//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);
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();
if (strResponse == "VERIFIED")
{
Label1.Text = "Done,payment was made.";
}
else if (strResponse == "INVALID")
{
//whatever
}
else
{
//whatever
}
}
我能做什么?
IPN事务是分批发送的,通常会在几分钟后发送。您不应该设计用户看到的页面来反映IPN消息的状态。在我的系统中,我只是告诉用户他们的购买已经完成,当PayPal建议结清资金时,他们就会完成,我会通过电子邮件通知他们。