Я пытаюсь реализовать Paypal моментальной оплаты Уведомление (IPN)Получить необработанный запрос пост в ApiController
protocol является
- PayPal HTTP запросы POST ваш слушатель сообщение IPN, который уведомляет о мероприятие.
- Ваш прослушиватель возвращает пустой ответ HTTP 200 на PayPal.
- Ваш прослушиватель HTTP POST передает полное, неизмененное сообщение обратно PayPal; сообщение должно содержать те же поля (в том же порядке) как исходное сообщение и быть закодировано так же, как и исходное сообщение .
- PayPal отправляет одно слово назад - либо VERIFIED (если сообщение соответствует оригиналу), либо INVALID (если сообщение не соответствует оригиналу ).
До сих пор я
[Route("IPN")]
[HttpPost]
public void IPN(PaypalIPNBindingModel model)
{
if (!ModelState.IsValid)
{
// if you want to use the PayPal sandbox change this from false to true
string response = GetPayPalResponse(model, true);
if (response == "VERIFIED")
{
}
}
}
string GetPayPalResponse(PaypalIPNBindingModel model, bool useSandbox)
{
string responseState = "INVALID";
// Parse the variables
// Choose whether to use sandbox or live environment
string paypalUrl = useSandbox ? "https://www.sandbox.paypal.com/"
: "https://www.paypal.com/cgi-bin/webscr";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(paypalUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
//STEP 2 in the paypal protocol
//Send HTTP CODE 200
HttpResponseMessage response = client.PostAsync("cgi-bin/webscr", "").Result;
if (response.IsSuccessStatusCode)
{
//STEP 3
//Send the paypal request back with _notify-validate
model.cmd = "_notify-validate";
response = client.PostAsync("cgi-bin/webscr", THE RAW PAYPAL REQUEST in THE SAME ORDER).Result;
if(response.IsSuccessStatusCode)
{
responseState = response.Content.ReadAsStringAsync().Result;
}
}
}
return responseState;
}
Моя проблема в том, что я не могу понять, как отправить первоначальный запрос на Paypal с параметрами в том же порядке. Я мог бы построить HttpContent
с моим PaypalIPNBindingModel
, но я не могу гарантировать заказ.
Есть ли способ, которым я мог бы это достичь?
Спасибо
Невозможно получить его в виде строки из PayPal, тогда вы можете десериализовать его самостоятельно, сделать все, что вам нужно, чтобы проверить его, затем POST строку, которую они отправили обратно? –
Спасибо, да, я думаю, но я подумал, что было бы более элегантно использовать модель привязки от asp.net, но если нет другого пути, я сделаю десериализацию себя. – Marc