没有IPN历史和Paypal安全性

时间:2017-05-30 15:49:47

标签: c# asp.net paypal paypal-sandbox paypal-ipn

我将以下表格发送给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帐户添加任何其他配置? - 我正在查看的URL是:

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

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

我将与notify_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的表单和响应是否有我应该根据我的检查的任何字段。

1 个答案:

答案 0 :(得分:1)

您的收件人帐户中的电子邮件地址似乎未得到确认。如果电子邮件地址未经确认,则付款将保留在&#34;待定&#34;状态直到接收者(a)在该电子邮件地址下创建一个帐户,并且(b)确认该电子邮件地址。如果收件人在30天内没有这样做,付款将自动取消并退还给寄件人。

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