我一直有一個時間整理PayPal's documentation,因爲它適用於所有ASP但不是MVC(包括他們的方便的集成嚮導)。我已經看到過 - 參考文獻guide by Rick Strahl,但它也適用於ASP,我沒有Webforms翻譯成MVC的經驗。PayPal API請求與MVC3
我被困在一個部分,並有一個安全問題關於另一部分。
第一:你如何實際提交請求到貝寶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調用,用戶無法看到它,任何有權訪問源代碼的人(如Web主機或其他開發人員)都可以查看密碼。這似乎不是很好的安全性。這裏的做法是什麼?這怎麼可能變得安全?
編輯 對於誰過來找人,這是多麼我最終提交初始請求(凝結的代碼轉化爲可讀性一塊)
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;
}
我看到WebRequest的文檔,但我仍然不知道如何將窗體(或數據)添加到它。將只是寫一個字符串流?對不起,我從來沒有這樣做過。另外,你如何加密web.config中的信息,我從來沒有聽說過這樣做? – Tyrsius
是的,基本上你連接字段名稱和值,並將其轉換爲字節數組。參見示例中的'postdata'變量。因此,在您看來,只需放置字段來捕獲用戶數據(例如金額),並在控制器中添加其他字段。在這裏您可以看到有關加密webconfig值的一些信息:http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx – Romias