【发布时间】:2012-01-17 03:54:39
【问题描述】:
我一直在整理PayPal's documentation,因为所有这些都适用于 ASP,但不适用于 MVC(包括他们原本方便的集成向导)。我见过经常引用的guide by Rick Strahl,但它也是针对 ASP 的,我没有将 Webforms 转换为 MVC 的经验。
我被困在一个部分,并且对另一个部分有安全顾虑。
首先:您如何实际将请求提交到 paypal api? documentation 告诉您使用包含密码的表单。
<form method=post action=https://api-3t.sandbox.paypal.com/nvp>
<input type=hidden name=USER value=API_username>
<input type=hidden name=PWD value=API_password>
<input type=hidden name=SIGNATURE value=API_signature>
<input type=hidden name=VERSION value=XX.0>
<input type=hidden name=PAYMENTREQUEST_0_PAYMENTACTION
value=Sale>
<input name=PAYMENTREQUEST_0_AMT value=19.95>
<input type=hidden name=RETURNURL
value=https://www.YourReturnURL.com>
<input type=hidden name=CANCELURL
value=https://www.YourCancelURL.com>
<input type=submit name=METHOD value=SetExpressCheckout>
</form>
这个表单肯定不会进入任何有意识检查您的来源的人可以窃取您的登录信息的视图吗?我认为这需要从控制器完成,但我不知道如何从控制器创建这样做。 HttpWebRequest 和 WebClient 看起来很有希望,但我不知道如何实际向它们添加表单。
第二:即使我确实在用户看不到的控制器内部进行了此表单和 api 调用,任何有权访问源代码的人(如网络主机或其他开发人员)都可以看到密码。这似乎不是很好的安全性。这里的做法是什么?如何确保安全?
编辑 对于来找的人来说,这就是我最终提交初始请求的方式(为了便于阅读,将代码压缩成一个块)
public static string GetResponse(RequestContext context, decimal price)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp");
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp");
request.Method = "POST";
UrlHelper url = new UrlHelper(context);
string urlBase = string.Format("{0}://{1}", context.HttpContext.Request.Url.Scheme, context.HttpContext.Request.Url.Authority);
string formContent = "USER=" + System.Configuration.ConfigurationManager.AppSettings["paypalUser"] +
"&PWD=" + System.Configuration.ConfigurationManager.AppSettings["paypalPassword"] +
"&SIGNATURE=" + System.Configuration.ConfigurationManager.AppSettings["paypalSignature"] +
"&VERSION=84.0" +
"&PAYMENTREQUEST_0_PAYMENTACTION=Sale" +
"&PAYMENTREQUEST_0_AMT=" + String.Format("{0:0.00}", price) +
"&RETURNURL=" + urlBase + url.Action("Confirm", "Checkout") +
"&CANCELURL=" + urlBase + url.Action("Canceled", "Checkout") +
"&METHOD=SetExpressCheckout";
byte[] byteArray = Encoding.UTF8.GetBytes(formContent);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = HttpUtility.UrlDecode(reader.ReadToEnd());
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
【问题讨论】:
标签: c# asp.net-mvc-3 paypal security