没有 IPN 历史和 Paypal 安全

No IPN history and Paypal security

我正在将以下表格发送到 PayPal

<form name="myForm" method="POST" action="https://www.sandbox.paypal.com/cgi-bin/webscr" >
<input type="hidden" name="cmd" value="_cart"/>
<input type="hidden" name="business" value="myemail@myDomain.com"/>
<input type="hidden" name="item_name_1" value="Product 1"/>
<input type="hidden" name="amount_1" value="500.00"/>
<input type="hidden" name="quantity_1" value="1"/>
<input type="hidden" name="upload" value="1"/>
<input type="hidden" name="currency_code" value="GBP"/>
<input type="hidden" name="return" value="http://XX/paypal/completed.aspx"/>
<input type="hidden" name="rm" value="2"/>
<input type="hidden" name="cancel_return" value="http://XX/paypal/Cancel.aspx"/>
<input type="hidden" name="shopping_url" value="http://XX/paypal/MyShop"/>
<input type="hidden" name="notify_url" value="http://XX/paypal/MyShop/checkout.aspx"/>
<input type="hidden" name="lc" value="GB"/>
<input type="hidden" name="image_url" value="http://XX/paypal/shop.gif"/>
<input type="hidden" name="no_note" value="1"/>
<input type="hidden" name="invoice" value="ZZZ1234567890"/>
<script type="text/javascript">document.myForm.submit();</script></form>

我可以使用沙盒帐户(买家和卖家)成功付款。 我设置了 IPN 来接收消息,输入一个 public URL,我可以从我的网络外部访问它。

我每次付款都看不到任何交易历史记录?我是否需要在上面或使用我的 Paypal 帐户添加任何其他配置? - 我看到的 URL 是:

https://www.sandbox.paypal.com/uk/cgi-bin/webscr?cmd=_display-ipns-history

我通过启用它来设置自动Return,因为我需要交易数据来使用来自 paypal 的响应更新我的数据库。

我将与 notify_url 相同的 URL 添加到 Return URL,并启用支付数据传输。我记下了身份令牌,但目前不需要使用它....

下面是我用来处理响应的 C# 代码

try
{
    string strRequest = string.Empty;
    string strLive = "https://www.sandbox.paypal.com/cgi-bin/webscr";
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strLive);
    req.KeepAlive = false;
    req.ReadWriteTimeout = 600000;
    req.Timeout = 600000;

    //Set values for the request back
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
    strRequest = Encoding.ASCII.GetString(param);
    strRequest += "&cmd=_notify-validate";
    req.ContentLength = System.Text.Encoding.UTF8.GetByteCount(strRequest);

    //Send the request to PayPal and get the response
    Stream RequestStream = req.GetRequestStream();
    StreamWriter streamOut = new StreamWriter(RequestStream, System.Text.Encoding.UTF8);
    RequestStream.ReadTimeout = 600000;
    RequestStream.WriteTimeout = 600000;
    streamOut.Write(strRequest);
    streamOut.Close();
}
catch (Exception ex)
{
.....
}

但是我不需要身份令牌来验证任何东西?所以我有点想知道我已经正确地保护了它并且我不需要添加额外的检查来确保处理响应的页面不会被轻易操纵?

我知道我没有发布实际处理数据库记录的代码,但我正在检查表单和来自 Paypal 的响应是否有我应该检查的任何字段。

您收件人帐户中的电子邮件地址似乎未得到确认。当电子邮件地址未被确认时,付款将保持 "pending" 状态,直到收款人 (a) 在该电子邮件地址下创建一个帐户,并且 (b) 确认该电子邮件地址。如果收款人未在 30 天内完成这些操作,付款将自动取消并退还给发件人。

我已经为您确认了沙盒帐户中的电子邮件地址。您应该很快就会看到交易显示在收款人的帐户中。