. Я чертовски потратил время на сортировку документации PayPal , так как все это относится к ASP, но не к MVC (включая их удобные в других отношениях Мастер интеграции). Я видел часто ссылающееся руководство Рика Страла , но оно также предназначено для ASP, и у меня нет опыта работы с Webforms для перевода в MVC.
Я застрял в одной части, и беспокоюсь о безопасности другой.
Во-первых: как вы на самом деле отправляете запрос в API PayPal? В документации указано использовать форму с вашим паролем.
Конечно, эта форма не входит в представление, где любой, у кого есть смысл проверить ваш источник, может украсть ваши данные для входа? Я бы предположил, что это нужно делать с помощью контроллера, но я не знаю, как это сделать с помощью контроллера. 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;
}