2012-09-30 79 views
2

我使用PayPal在ASP.net,當我在沙盒測試的一切是正確的,但是當我使用我得到這個錯誤的帶電部件:活貝寶錯誤

This payment cannot be completed and your account has not been charged. Please contact your merchant for more information. We are not able to process your payment using your PayPal account at this time. Please return to the merchant's website and try using a different payment method (if available).

這是我的webconfig

<add key="token" value="*************************"/> 
    <add key="paypalemail" value="*************@gmail.com"/> 
    <add key="PayPalSubmitUrl" value="https://www.paypal.com/cgi-bin/webscr"/> 
    <add key="FailedURL" value="http://www.stockholmsbygg.net/Failed.aspx"/> 
    <add key="SuccessURL" value="http://www.stockholmsbygg.net/FindOpenRequests.aspx"/> 
    <add key="Notification" value="http://www.stockholmsbygg.net/Notification.aspx"/> 

,並重定向到貝寶

public static string RedirectToPaypal(string invoiceNumber, string requestId, string userId, string customId, string itemName, string amount) 
     { 

      string redirecturl = ""; 
      redirecturl += "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=" + ConfigurationManager.AppSettings["paypalemail"].ToString(); 
      redirecturl += "&first_name=" + userId; 
      redirecturl += "&item_name=" + itemName; 
      redirecturl += "&amount=5.00"; 
      redirecturl += "&quantity=1"; 
      redirecturl += "&currency=SEK"; 
      redirecturl += "&invoice=" + invoiceNumber; 
      redirecturl += "&custom=" + requestId; 
      redirecturl += "&on0=" + HttpContext.Current.Request.UserHostAddress; 
      redirecturl += "&return=" + ConfigurationManager.AppSettings["SuccessURL"].ToString() + "?Type=ShowDetail"; 
      redirecturl += "&cancel_return=" + ConfigurationManager.AppSettings["FailedURL"].ToString(); 
      redirecturl += "&notify_url=" + ConfigurationManager.AppSettings["Notification"].ToString(); 
      return redirecturl; 
     } 

,這是我從貝寶回到我加後檢查一切雷斯

if (Request.QueryString["cm"] != null) 
         { 

          const string authToken = "*********************************"; 
          string txToken = Request.QueryString["tx"]; 
          string query = "cmd=_notify-synch&tx=" + txToken + "&at=" + authToken; 

          //const string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr"; 
          string strSandbox = "https://www.paypal.com/cgi-bin/webscr"; 
          var req = (HttpWebRequest)WebRequest.Create(strSandbox); 

          req.Method = "POST"; 
          req.ContentType = "application/x-www-form-urlencoded"; 
          req.ContentLength = query.Length; 


          var streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII); 
          streamOut.Write(query); 
          streamOut.Close(); 
          var streamIn = new StreamReader(req.GetResponse().GetResponseStream()); 
          string strResponse = streamIn.ReadToEnd(); 
          streamIn.Close(); 

          var results = new Dictionary<string, string>(); 
          if (strResponse != "") 
          { 
           var reader = new StringReader(strResponse); 
           string line = reader.ReadLine(); 

           if (line == "SUCCESS") 
           { 

            while ((line = reader.ReadLine()) != null) 
            { 
             results.Add(line.Split('=')[0], line.Split('=')[1]); 

            } 
            var userId = Convert.ToInt64(Session["UserID"]); 
            var item = Convert.ToInt64(Request.QueryString["cm"]); 
            context = new entities(); 
            var existUser = context.Payments.Where(u => u.UserID == userId).ToList(); 
            var existItem = existUser.Where(i => i.RequestID == item).ToList(); 
            var paypalInvoice = results["invoice"]; 
            var txn_id = results["txn_id"]; 
            var sameInvoice = 
             existItem.Where(i => i.invoice== paypalInvoice).FirstOrDefault(); 
            if (sameInvoice != null) 
            { 
             var currentAmount = Request.QueryString["amt"]; 
             var dbAmount = Convert.ToDecimal(sameInvoice.Amount).ToString(); 
             var currentIp = HttpContext.Current.Request.UserHostAddress; 

             if (dbAmount != null) 
             { 
              if (currentAmount == dbAmount) 
              { 

               if (currentIp == sameInvoice.IP) 
               { 

                sameInvoice.Status = true; 
                sameInvoice.PaypalTX = txn_id; 
                pnlSearch.Visible = false; 
                pnlShowDetail.Visible = true; 
                ShowDetail(Request.QueryString["cm"], true); 
                btnBack.Visible = false; 
                PrivateDetail.Visible = true; 
                interested.Visible = false; 
                context.SaveChanges(); 
               } 

              } 
             } 


            } 

           } 
           else if (line == "FAIL") 
           { 
            // Log for manual investigation 
            Response.Write("Unable to retrive transaction detail"); 
           } 
          } 
          else 
          { 
           //unknown error 
           Response.Write("ERROR"); 
          } 
         } 

什麼問題? 也在第一次測試時,我付了錢但沒有發生任何事情。發票狀態wad仍然是錯誤的,而它應該變成真,因爲我已付款!

回答

1

此函數是一個錯誤100%RedirectToPaypal()

沒有重定向到PayPal。該地址只有post帶有發佈參數,而不是get(重定向)。

這是合乎邏輯的,因爲如果你把所有的敏感數據放在url上,那麼暴露給任何在中間ether以太網代理的任何東西,任何使url保持所有數據的東西。

對我而言,如果您使用該數據進行重定向而不發帖,則無法找到有關該帳戶的任何信息,因爲沒有發佈數據,這就是爲什麼您會收到該錯誤。

+0

非常感謝,所以我該怎麼知道!請幫助我,你有什麼建議?爲什麼它在沙盒上工作? –

+0

@ user1615818我不知道工作是什麼,但事實並非如此。你可以在這裏給你如何在付款的PayPal的第一篇文章? – Aristos

+0

@ user1615818您是否閱讀過本手冊? https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_WebsitePaymentsStandard_IntegrationGuide.pdf – Aristos