Pokaż
Ignoruj:
Data:
2009-12-08 10:09:39 (16 years ago)
Autor:
sylwek
Opis:

re #195 - merged with latest trunk

Lokalizacja:
branches/Emisje
Pliki:
2 zmodyfikowane

Legenda:

Bez zmian
Dodane
Usunięte
  • branches/Emisje

    • Property svn:mergeinfo
      •  

        old new  
        33/branches/ReklamaReorganizacja:568-731 
        44/tags/BazaReklam_1.1.28:831 
        5 /trunk:774-893 
         5/trunk:774-893,896-936 
  • branches/Emisje/eCard/eCardMVC/Platnosci/Controllers/MerchantController.cs

    r895 r939  
    11using System; 
    2 using System.Text; 
    32using System.Linq; 
    4 using System.Web; 
    5 using System.Web.UI; 
    6  
    7 using System.Web.UI.WebControls; 
    8 using System.Web.UI.WebControls.WebParts; 
    9 using System.Web.UI.HtmlControls; 
    10 using System.Web.Configuration; 
    113using System.Web.Mvc; 
    12 using System.Web.Mvc.Ajax; 
    13 using System.Collections.Generic; 
    144using Platnosci.Models; 
    155using Platnosci.Core.Linq; 
     
    2919        public const string KOD_POLSKA = "616";         //kod kraju Akceptanta - Polska 
    3020        public const string KODOWANIE = "ISO-8859-2"; 
    31         private int ORDERNUMBER = 122; 
     21        public const string HASH_ERROR_INFO = "payment not exist"; 
    3222 
    33         private string merchantId; 
    34         private readonly PlatnosciDataContext _context; 
    35         private readonly IRepository<PlatnosciEcard> _rep; 
    36         private FunkcjePlatnosci _func; 
     23        private readonly IRepository<vPlatnosciEcard> _repVPayment; 
     24        private readonly IRepository<PlatnosciEcard> _repPayment;  
     25        private readonly FunkcjePlatnosci _funkcjePlatnosci; 
     26        private readonly ITranslateManager _translateManager; 
    3727 
    3828        public MerchantController() 
    39         {    
    40             _rep = new Repository<PlatnosciEcard>(new DataContext1()); 
    41             _context = new PlatnosciDataContext(); 
    42             _func = new FunkcjePlatnosci(); 
     29        { 
     30            _repVPayment = new Repository<vPlatnosciEcard>(new DataContext1()); 
     31            _repPayment = new Repository<PlatnosciEcard>(new DataContext1()); 
     32            _funkcjePlatnosci = new FunkcjePlatnosci(); 
     33            _translateManager = new Translation(); 
    4334        } 
     35 
    4436        public ActionResult Merchant(Payer payer, string language) 
    4537        { 
    4638            System.Diagnostics.Debug.WriteLine("MerchantController:Merchant:" + language); 
    47             language = _func.setLanguage(language); 
     39            language = _funkcjePlatnosci.setLanguage(language); 
    4840 
    49             int id1 = Convert.ToInt32(payer.Id_faktury); 
    50             vPlatnosciEcard platnosc = _rep.FindInvoiceById(id1).SingleOrDefault(); 
     41            var id1 = Convert.ToInt32(payer.Id_faktury); 
     42            var platnosc = _repVPayment.Find(p => p.ID_faktury == id1).SingleOrDefault(); 
    5143                  
    52             if (platnosc == null) 
    53             { 
    54                 ErrorViewData errorViewData = _func.InitErrorViewData(HttpContext.GetGlobalResourceObject("tlumaczenia", "brakdanych").ToString()); 
    55                 return View("Error1", errorViewData); 
    56             } 
    57             else if (!_func.UserIdentity(platnosc, ControllerContext.HttpContext.User.Identity.Name)) 
    58             { 
    59                 ErrorViewData errorViewData = _func.InitErrorViewData(HttpContext.GetGlobalResourceObject("tlumaczenia", "weryfikacja").ToString()); 
    60                 return View("Error1", errorViewData); 
    61             } 
     44            if (platnosc == null)  
     45                return View("Error1", IsError("brakdanych", 0)); 
    6246             
    63             Waluta waluta = _func.setAmount(platnosc); 
     47            if (!_funkcjePlatnosci.UserIdentity(platnosc, ControllerContext.HttpContext.User.Identity.Name)) 
     48                return View("Error1", IsError("weryfikacja", 0));            
     49 
     50            var waluta = _funkcjePlatnosci.setAmount(platnosc); 
    6451            var newPayment = InitNewPayment(id1, platnosc, waluta, payer );             
    6552 
    66             string systemKs = platnosc.SystemKsiegowyId.ToString(); 
     53            var systemKs = platnosc.SystemKsiegowyId.ToString(); 
    6754 
    68             bool createPayment = AddNewPayment(newPayment); 
    69             if (createPayment == false) return View("Error"); 
     55            var createPayment = AddNewPayment(newPayment); 
     56             
     57            if (createPayment == false) 
     58                return View("Error1", IsError("error_hash", payer.Id_faktury)); 
    7059 
    71             string hash = GetHash(newPayment, systemKs); 
     60            var merchant = getMerchantInfo(systemKs); 
     61            
     62            var hash = GetHash(newPayment, merchant); 
    7263            hash = hash.Replace("\n",""); 
    73             if (hash == BAD_HASH  || hash == "" ) return View("Error"); 
     64           
     65            if (hash == BAD_HASH || hash == "" || hash == HASH_ERROR_INFO) 
     66                return View("Error1", IsError("error_hash", payer.Id_faktury)); 
    7467 
    75             if (systemKs == "1") merchantId = "170906000"; 
    76                 else merchantId = "171485000"; 
     68            //przeslanie w linku ordernumber potrzebnego do wyswietlenia potwierdzenia 
     69            var orderek = _repPayment.GetOrdernumber(newPayment.ORDERDESCRIPTION, newPayment.IDFaktury, newPayment.Data); 
    7770 
    78             string LinkFail = ConfigurationManager.AppSettings["Strona"]; 
    79             LinkFail += "/" + language + ConfigurationManager.AppSettings["LinkFail"]; 
    80             LinkFail += "/" + newPayment.IDFaktury; 
     71            var linkFail = ConfigurationManager.AppSettings["Strona"]; 
     72            linkFail += "/" + language + ConfigurationManager.AppSettings["LinkFail"]; 
     73            linkFail += "/" + newPayment.IDFaktury + "?o=" + orderek; 
    8174 
    82             string LinkOk = ConfigurationManager.AppSettings["Strona"]; 
    83             LinkOk += "/" + language + ConfigurationManager.AppSettings["LinkOk"]; 
    84             LinkOk += "/" + newPayment.IDFaktury; ; 
     75            var linkOk = ConfigurationManager.AppSettings["Strona"]; 
     76            linkOk += "/" + language + ConfigurationManager.AppSettings["LinkOk"]; 
     77            linkOk += "/" + newPayment.IDFaktury + "?o=" + orderek; 
    8578 
    86             var merchantViewData = InitMerchantViewData(newPayment, hash, merchantId, LinkFail, LinkOk); 
    87             wyslij(merchantViewData, hash, merchantId); 
    88             return View(merchantViewData);             
    89         } 
     79            if (merchant != null && !String.IsNullOrEmpty(merchant.merchntId)) 
     80                SendRequest(newPayment, hash, merchant, linkFail, linkOk); 
     81            else  
     82                return View("Error1", IsError("error_hash", payer.Id_faktury)); 
     83 
     84            return new EmptyResult();           
     85        }         
    9086        private PlatnosciEcard InitNewPayment(int id, vPlatnosciEcard platnosc, Waluta waluta, Payer payer) 
    9187        { 
    92             PlatnosciEcard newPayment = new PlatnosciEcard(); 
     88            var newPayment = new PlatnosciEcard(); 
    9389            newPayment.IDFaktury = id; 
    9490            newPayment.ORDERDESCRIPTION = platnosc.Faktura_Numer; 
     
    111107            return newPayment; 
    112108        } 
     109         
    113110        private bool AddNewPayment(PlatnosciEcard platnosc) 
    114111        { 
    115112            if (platnosc != null) 
    116113            {                 
    117                // _rep.Insert(platnosc); 
     114                _repPayment.Insert(platnosc); 
    118115                return true; 
    119116            } 
    120117            return false; 
    121118        } 
    122         private MerchantViewData InitMerchantViewData(PlatnosciEcard newPayment, string hash, string Id, string LinkFail, string LinkOk) 
     119 
     120        private string GetHash(PlatnosciEcard p, Merchant merchant) 
    123121        { 
    124             MerchantViewData merchantViewData = new MerchantViewData(); 
    125             merchantViewData.nowaPlatnosc = newPayment; 
    126             merchantViewData.Hash = hash; 
    127             merchantViewData.merchantId = Id; 
    128             merchantViewData.LinkFail = LinkFail; 
    129             merchantViewData.LinkOk = LinkOk; 
    130              
    131             //wartosci testowe 
    132             merchantViewData.nowaPlatnosc.ORDERNUMBER = ORDERNUMBER; 
    133             merchantViewData.nowaPlatnosc.ORDERDESCRIPTION = "222"; 
    134             merchantViewData.nowaPlatnosc.AMOUNT = 300; 
    135             merchantViewData.nowaPlatnosc.CURRENCY = "985"; 
    136             merchantViewData.nowaPlatnosc.SESSIONID = "ff"; 
    137             merchantViewData.merchantId = "171485000"; 
    138             merchantViewData.LinkFail = ""; 
    139             merchantViewData.LinkOk = ""; 
    140             return merchantViewData; 
    141         } 
    142         private string GetHash(PlatnosciEcard p, string ks) 
    143         { 
    144             string strResponse; 
    145             /*PlatnosciEcard platnosc = _rep.FindOne(i => i.ORDERDESCRIPTION == p.ORDERDESCRIPTION && i.IDFaktury == p.IDFaktury && i.Data == p.Data); 
    146             string adres = "https://pay.ecard.pl/servlet/HS?orderNumber="+p.ORDERNUMBER; 
    147             HttpWebRequest req = (HttpWebRequest)WebRequest.Create(adres); 
    148             string dane = "&orderDescription=&amount=" + platnosc.AMOUNT; 
     122            var platnosc = _repPayment.Find(i => i.ORDERDESCRIPTION == p.ORDERDESCRIPTION && i.IDFaktury == p.IDFaktury && i.Data == p.Data).First(); 
     123 
     124            if (platnosc == null || merchant == null) return HASH_ERROR_INFO; 
     125 
     126            var adres = "https://pay.ecard.pl/servlet/HS?orderNumber=" + platnosc.ORDERNUMBER; 
     127            var req = (HttpWebRequest)WebRequest.Create(adres); 
     128            var dane = "&orderDescription=&amount=" + platnosc.AMOUNT; 
    149129            dane += "&currency=" + platnosc.CURRENCY; 
    150             if (ks == "1") dane += "&merchantId=171485000&password=ashSeth2"; 
    151                 else dane += "&merchantId=170906000&password=JaYpqfs0"; */ 
     130            dane += string.Format("&merchantId={0}&password={1}", merchant.merchntId, merchant.merchantPassword); 
    152131 
    153             //dane testowe 
    154             string adres = "https://pay.ecard.pl/servlet/HS?orderNumber="+ORDERNUMBER; 
    155             HttpWebRequest req = (HttpWebRequest)WebRequest.Create(adres); 
    156             string dane = "&orderDescription=&amount=300&currency=985&merchantId=171485000&password=ashSeth2";                 
    157              
    158             byte[] bdata = System.Text.ASCIIEncoding.ASCII.GetBytes(dane); 
     132            var bdata = System.Text.Encoding.ASCII.GetBytes(dane); 
    159133            req.Method = "POST"; 
    160134            req.ContentType = "application/x-www-form-urlencoded"; 
    161135            req.ContentLength = dane.Length; 
    162136 
    163             Stream reqStream = req.GetRequestStream(); 
     137            var reqStream = req.GetRequestStream(); 
    164138            reqStream.Write(bdata, 0, bdata.Length); 
    165139            reqStream.Close(); 
    166140 
    167             StreamReader streamResponse = new StreamReader(req.GetResponse().GetResponseStream()); 
    168             strResponse = streamResponse.ReadToEnd(); 
     141            var streamResponse = new StreamReader(req.GetResponse().GetResponseStream()); 
     142            string strResponse = streamResponse.ReadToEnd(); 
    169143            streamResponse.Close(); 
    170144                      
    171145            return strResponse; 
    172146        } 
    173         private void wyslij(MerchantViewData m, string hash, string id) 
     147 
     148        private void SendRequest(PlatnosciEcard m, string hash, Merchant merchant, string linkok, string linkfail) 
    174149        { 
    175             string adres = "https://pay.ecard.pl/servlet/PSTEST?ORDERDESCRIPTION="+m.nowaPlatnosc.ORDERDESCRIPTION; 
    176             HttpWebRequest req = (HttpWebRequest)WebRequest.Create(adres); 
    177             string dane = "&AMOUNT=300&CURRENCY=985&ORDERNUMBER="+ORDERNUMBER+"&NAME="+m.nowaPlatnosc.NAME+"&SURNAME="+m.nowaPlatnosc.SURNAME+"&LANGUAGE=PL&CHARSET=ISO-8859-2"; 
    178             dane += "&COUNTRY=616&PAYMENTTYPE=CARDS&JS=1&HASH=" + hash + "&MERCHANTID=171485000&AUTODEPOSIT=" + m.nowaPlatnosc.AUTODEPOSIT + "&LINKFAIL="; 
    179             dane += "&LINKOK=&SESSIONID="; 
     150            var adres = ConfigurationManager.AppSettings["eCard.Url"] + "?ORDERDESCRIPTION=" + m.ORDERDESCRIPTION; 
     151 
     152            var dane = "&AMOUNT=" + m.AMOUNT + "&CURRENCY=" + m.CURRENCY + "&ORDERNUMBER=" + m.ORDERNUMBER; 
     153            dane += "&NAME=" + m.NAME + "&SURNAME=" + m.SURNAME + "&LANGUAGE=" + m.LANGUAGE + "&CHARSET=ISO-8859-2"; 
     154            dane += "&COUNTRY=616&PAYMENTTYPE=CARDS&JS=1&HASH=" + hash + "&MERCHANTID=" + merchant.merchntId + "&AUTODEPOSIT=" + m.AUTODEPOSIT; 
     155            dane += "&LINKFAIL=" + linkfail + "&LINKOK=" + linkok + "&SESSIONID=" + m.SESSIONID; 
    180156            Response.Redirect(adres + dane); 
     157        } 
     158        public ErrorViewData IsError(string errortxt, int idFaktury) 
     159        { 
     160            if (errortxt == "brakdanych") 
     161                errortxt = _translateManager.Translate("tlumaczenia", "brakdanych"); 
     162            else if (errortxt == "weryfikacja") 
     163                errortxt = _translateManager.Translate("tlumaczenia", "weryfikacja"); 
     164            else if (errortxt == "error_hash") 
     165                errortxt = _translateManager.Translate("tlumaczenia", "error_hash"); 
     166 
     167            return _funkcjePlatnosci.InitErrorViewData(errortxt, idFaktury); 
     168        } 
     169        public Merchant getMerchantInfo( string systemKs) 
     170        { 
     171            var merchant = new Merchant(); 
     172            if (systemKs == "1") 
     173            { 
     174                merchant.merchntId = "171485000"; 
     175                merchant.merchantPassword = "ashSeth2"; 
     176            } 
     177            else 
     178            { 
     179                merchant.merchntId = "170906000"; 
     180                merchant.merchantPassword = "JaYpqfs0"; 
     181            }               
     182            return merchant; 
    181183        } 
    182184    }