没有 IPN 历史记录和 Paypal 安全性

Posted

技术标签:

【中文标题】没有 IPN 历史记录和 Paypal 安全性【英文标题】:No IPN history and Paypal security 【发布时间】:2017-10-31 04:38:15 【问题描述】:

我将以下表格发送到 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 来接收消息,输入一个可以从我的网络外部访问的公共 URL。

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

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

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

我将与 notify_url 相同的 URL 添加到返回 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 的响应是否有任何我应该根据这些字段进行检查。

【问题讨论】:

你能提供一个交易ID吗?有什么东西我可以在我这边查看一下,看看发生了什么? 是的,明白了。谢谢。 【参考方案1】:

您的收款人帐户中的电子邮件地址似乎未得到确认。如果未确认电子邮件地址,付款将保持“待处理”状态,直到接收方 (a) 在该电子邮件地址下创建帐户,并且 (b) 确认该电子邮件地址。如果收款人未在 30 天内付款,付款将自动取消并退回给发件人。

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

【讨论】:

我看到了 - 谢谢。我确实尝试过验证我的帐户,但我从未收到过验证电子邮件。检查了我们的 IT,他们确认没有从 PP 的电子邮件地址收到任何电子邮件。那么从这一点上我是否需要在任何地方添加身份令牌以确保无法操纵交易? 仅供参考,来自沙箱的电子邮件实际上并没有发送到现实世界——相反,它们会发送到一个特殊的邮箱,您可以通过转到 developer.paypal.com 访问该邮箱 => Dashboard =>沙盒 => 通知。 您不需要包含用于 IPN 的身份令牌 - 仅用于 PDT (developer.paypal.com/docs/classic/ipn/integration-guide/…)。 我正在使用 PDT,但我认为 IPN 也需要让 PDT 工作....所以如果我想在设置上述变量后使用 PDT,我是否正确假设我得到了交易在我的处理程序上从 PP 获取 id,然后调用 PP,但包括 authToken,如 cmd=_notify-synch&tx=[TransactionID]&at=[PDTIdentityToken]。如果全部通过身份验证,哪个会返回成功? 不,PDT 和 IPN 是独立的(尽管相似)产品。一个不需要使用另一个。而且您对如何使用 PDT 是正确的 - 如果成功,它将返回付款详细信息。

以上是关于没有 IPN 历史记录和 Paypal 安全性的主要内容,如果未能解决你的问题,请参考以下文章

PayPal IPN 消息问题

PayPal IPN 突然停止流入

PayPal 难以捉摸的 IPN 历史在哪里?

PayPal 没有向听众发送 IPN

PayPal IPN - 排队

PayPal IPN:交付状态已禁用