C# 带MVC3的Paypal API请求
我花了很长时间整理,因为所有这些都适用于ASP,但不适用于MVC(包括他们其他方便的集成向导)。我看过oft参考资料,但它也是针对ASP的,我没有将Webforms转换为MVC的经验 我被困在一个地方,对另一个地方有安全顾虑 第一:您实际上如何向paypal api提交请求?通知您使用包含密码的表单C# 带MVC3的Paypal API请求,c#,asp.net-mvc-3,paypal,security,C#,Asp.net Mvc 3,Paypal,Security,我花了很长时间整理,因为所有这些都适用于ASP,但不适用于MVC(包括他们其他方便的集成向导)。我看过oft参考资料,但它也是针对ASP的,我没有将Webforms转换为MVC的经验 我被困在一个地方,对另一个地方有安全顾虑 第一:您实际上如何向paypal api提交请求?通知您使用包含密码的表单 <form method=post action=https://api-3t.sandbox.paypal.com/nvp> <input type=hidden na
<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>
好了,贝宝还提供了一个网络服务。。。而不仅仅是发布数据 您可以从控制器发出POST请求,允许对用户隐藏敏感数据(所有这些隐藏值) 在这里,您可以看到从代码发布数据的示例: 关于第二个问题,您可以在web.config中包含敏感的参数,这样只有在运行时才可以读取这些参数
贝宝还提供了一个沙箱,供您测试您的集成。。。所以在那一刻,你可以不加修饰地得到这个值。一旦您将应用程序移至生产环境,请使用您的专属生产凭证替换测试参数。参考您对Ashok Padmanabhan的回复 我有,但他似乎忽略了这一部分,而是专注于IPN的处理。我还试图从视频中找到代码,但找不到 这就是我让你用谷歌搜索的原因。Rob Connery的MvcStoreFront代码。这里是 我之前的回答是想让你知道,即使你得到了源代码,我怀疑你能从中学到很多东西。至少对我来说。我的错是对其他人也这么想。原因是因为它是一个不同版本的MVC,并且由于视频中的代码和源代码中的最终代码之间的差异,我遇到了各种各样的复杂情况 我自己也在努力实现PayPal。我已经放弃了对IPN和PDT的希望,因为我现在正在集成正常的返回URL。我想我会同意Romias在web.config中加密代码的想法(尽管我似乎还没有完全理解这个方法,希望我很快就会理解)
希望这是一个更有建设性的回答:)我看到了webrequest文档,但我仍然不知道如何向其中添加表单(或任何数据)。只是在向流中写入字符串?对不起,我以前从未这样做过。另外,如何在web.config中加密信息,我以前从未听说过这样做?是的,基本上是将字段名和值连接起来,然后将其转换为字节数组。请参见示例中的“postdata”变量。因此,在您的视图中,只需放置用于捕获用户数据的字段(例如金额),然后在控制器中添加其他字段。在这里,您可以看到有关加密webconfig值的一些信息:
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;
}