Tôi đang cố gắng để thực hiện một Paypal tức thì thông báo thanh toán (IPN)Nhận bài yêu cầu nguyên liệu trong một ApiController
Các protocol là
- PayPal HTTP POST nghe bạn một thông báo IPN thông báo cho bạn về một biến cố.
- Trình nghe của bạn trả về phản hồi HTTP 200 trống cho PayPal.
- Trình nghe HTTP của bạn ĐĂNG lại thông báo hoàn chỉnh, chưa được sửa đổi trở lại PayPal; tin nhắn phải chứa cùng các trường (theo cùng thứ tự) làm tin nhắn gốc và được mã hóa theo cùng cách với thông báo gốc .
- PayPal sẽ gửi lại một từ duy nhất - hoặc XÁC MINH (nếu thư khớp với thư gốc) hoặc INVALID (nếu thư không khớp với số bản gốc).
Cho đến nay tôi có
[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;
}
Vấn đề của tôi là tôi không thể tìm ra cách để gửi yêu cầu ban đầu để Paypal với các thông số theo thứ tự. Tôi có thể tạo một HttpContent
với số PaypalIPNBindingModel
của mình nhưng tôi không thể đảm bảo đơn đặt hàng.
Có cách nào tôi có thể đạt được điều này không?
Cảm ơn bạn
Bạn không thể nhận nó như một chuỗi từ PayPal, bạn có thể tự mình thực hiện, làm bất cứ điều gì bạn cần làm để xác thực, sau đó POST chuỗi họ gửi lại? –
Cảm ơn bạn, vâng tôi nghĩ nhưng tôi nghĩ rằng nó sẽ là thanh lịch hơn để sử dụng mô hình ràng buộc từ asp.net nhưng nếu không có cách nào khác, tôi sẽ làm deserialize bản thân mình. – Marc