2013-05-28 72 views
0

我已經設置了IPN與PayPal內的我的網站進行通信,但由於某些原因PayPal似乎沒有稱之爲。下面是正在聆聽的方法,但它似乎沒有任何東西。C#paypal IPN通信

難道有人請指點我的寫作方向嗎?

感謝

[HttpPost] 
    public void paypalipn(string receiver_email, string receiver_id, string test_ipn, string txn_id, string payer_id, string payer_status, string payment_date, string payment_status, string payment_type) 
    { 
     string subject = "Audit - Paypal IPN "; 
     string buildemail = "receiver_email: " + receiver_email; 
     buildemail += "receiver_id: "+receiver_id; 
     buildemail += "<br>test_ipn: "+test_ipn; 
     buildemail += "<br>txn_id: " + txn_id; 
     buildemail += "<br>payer_id: " + payer_id; 
     buildemail += "<br>payer_status: " + payer_status; 
     buildemail += "<br>payment_date: " + payment_date; 
     buildemail += "<br>payment_status: " + payment_status; 
     buildemail += "<br>payment_type: " + payment_type; 

     Libraries.Email.Product.SendAudit(subject, buildemail); 



    } 

回答

1

如果您在您的PayPal帳戶設置您的IPN,確保它已啓用,網址是正確的。另外,如果您將其設置在您的帳戶中,您可以檢查IPN歷史記錄以查看IPN POST是否正在發送。他們將被標記爲發送,重試或失敗。如果它們處於失敗或重試狀態,您可以單擊該消息,並且如果您的服務器正在發回任何錯誤代碼,則應在此處列出。另外,請檢查服務器上的錯誤日誌,以確保腳本沒有錯誤。

+0

謝謝。我已經用PayPal啓用了此功能,但我的帳戶在歷史記錄中沒有任何內容。 –

0

當我調試貝寶IPN的反應,我做了這樣的事情:

string keysReceived = ""; 
foreach (string key in Request.Params.AllKeys) 
    keysReceived += "\r\nKey: " + key + ", Val: " + Request.Params[key]; 
string debugLogPath = HttpContext.Server.MapPath("/") + "debug_PayPalNotify.log"; 
System.IO.File.AppendAllText(debugLogPath, keysReceived); 

注意使用全局對象請求。你可以做很多事情來進行調試。

1

我確實是這樣的:

public class IPNData 
{ 
    public string Response { get; set; } 
    public NameValueCollection Args { get; set; } 
} 

然後,對於從請求收集數據的方法,以及將數據發送到貝寶進行驗證。

IPNData GetIPNData() 
{ 
    var ipnData = new IPNData(); 
    var param = Request.BinaryRead(HttpContext.Request.ContentLength); 
    var ipnStr = Encoding.ASCII.GetString(param); 
    ipnData.Args = HttpUtility.ParseQueryString(ipnStr); 

    // Return the ipn string to paypal for validation 
    ipnStr += "&cmd=_notify-validate"; 

    var request = (HttpWebRequest)WebRequest.Create("https://www.paypal.com/cgi-bin/webscr"); 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = strRequest.Length; 

    using (var sw = new StreamWriter(request.GetRequestStream(), Encoding.ASCII)) 
    { 
     sw.Write(ipnStr); 
    } 

    using (var sr = new StreamReader(request.GetResponse().GetResponseStream())) 
    { 
     // Response should be "VERIFIED" 
     ipnData.Response = sr.ReadToEnd(); 
    } 

    return ipnData; 
} 

PaymentController.cs示例爲subscriptionpayment,或者如果用戶取消訂閱。

public ActionResult PaypalIPNExample() 
{ 
    var ipn = GetIPNData(); 
    if (ipn.Response != "VERIFIED") 
    { 
     // Do some logging 
     return null; 
    } 

    var type = ipn.Args["txn_type"]; 
    var email = ipn.Args["payer_email"]; 
    var transactionId = ipn.Args["txn_id"]; 

    switch (type) 
    { 
     case "subscr_cancel": 
      UserService.CancelSubscription(email); 
      break; 
     case "subscr_payment": 
      if (ipn.Args["payment_status"].Equals("Completed")) 
      { 
       LogPayment(email, transactionId); 
       UserService.ExtendMembership(email); 
      } 
      break; 
     default: 
      // Do some logging? 
      break;      
    } 

    return Json("ok"); 
}