root/trunk/eCard/eCardMVC/Platnosci/Controllers/MerchantController.cs @ 949

Wersja 949, 8.2 KB (wprowadzona przez marek, 16 years temu)

re #215 - drobny refactoring

Line 
1using System;
2using System.Linq;
3using System.Web.Mvc;
4using Platnosci.Models;
5using Platnosci.Core.Linq;
6using Platnosci.Core.Interface;
7using System.Configuration;
8using System.Net;
9using System.IO;
10using System.Threading;
11
12namespace Platnosci.Controllers
13{
14    [Authorize]
15    public class MerchantController : Controller
16    {
17        public const string BAD_HASH = "zlyHash";       //b³êdne has³o - odpowiedŸ z eCard
18        public const string CARDS = "CARDS";            //obs³uga tylko kart p³atniczych
19        public const string KOD_POLSKA = "616";         //kod kraju Akceptanta - Polska
20        public const string KODOWANIE = "ISO-8859-2";
21        public const string HASH_ERROR_INFO = "payment not exist";
22
23        private readonly IRepository<vPlatnosciEcard> _repVPayment;
24        private readonly IRepository<PlatnosciEcard> _repPayment;
25        private readonly FunkcjePlatnosci _funkcjePlatnosci;
26        private readonly ITranslateManager _translateManager;
27
28        public MerchantController()
29        {
30            _repVPayment = new Repository<vPlatnosciEcard>(new DataContext());
31            _repPayment = new Repository<PlatnosciEcard>(new DataContext());
32            _funkcjePlatnosci = new FunkcjePlatnosci();
33            _translateManager = new Translation();
34        }
35
36        public ActionResult Merchant(Payer payer, string language)
37        {
38            System.Diagnostics.Debug.WriteLine("MerchantController:Merchant:" + language);
39            language = _funkcjePlatnosci.setLanguage(language);
40
41            var id1 = Convert.ToInt32(payer.Id_faktury);
42            var platnosc = _repVPayment.Find(p => p.ID_faktury == id1).SingleOrDefault();
43                 
44            if (platnosc == null)
45                return View("Error1", IsError("brakdanych", 0));
46           
47            if (!_funkcjePlatnosci.UserIdentity(platnosc, ControllerContext.HttpContext.User.Identity.Name))
48                return View("Error1", IsError("weryfikacja", 0));           
49
50            var waluta = _funkcjePlatnosci.setAmount(platnosc);
51            var newPayment = InitNewPayment(id1, platnosc, waluta, payer );           
52
53            var systemKs = platnosc.SystemKsiegowyId.ToString();
54            if (ConfigurationManager.AppSettings["wersja"] == "TEST")
55                systemKs = "2";
56
57            var createPayment = AddNewPayment(newPayment);
58           
59            if (createPayment == false)
60                return View("Error1", IsError("error_hash", payer.Id_faktury));
61
62            var merchant = getMerchantInfo(systemKs);
63           
64            var hash = GetHash(newPayment, merchant);
65            hash = hash.Replace("\n","");
66         
67            if (hash == BAD_HASH || hash == "" || hash == HASH_ERROR_INFO)
68                return View("Error1", IsError("error_hash", payer.Id_faktury));
69
70            //przeslanie w linku ordernumber potrzebnego do wyswietlenia potwierdzenia
71            var orderek = _repPayment.GetOrdernumber(newPayment.ORDERDESCRIPTION, newPayment.IDFaktury, newPayment.Data);
72
73            var linkFail = ConfigurationManager.AppSettings["Strona"];
74            linkFail += "/" + language + ConfigurationManager.AppSettings["LinkFail"];
75            linkFail += "/" + newPayment.IDFaktury + "?o=" + orderek;
76
77            var linkOk = ConfigurationManager.AppSettings["Strona"];
78            linkOk += "/" + language + ConfigurationManager.AppSettings["LinkOk"];
79            linkOk += "/" + newPayment.IDFaktury + "?o=" + orderek;
80
81            if (merchant != null && !String.IsNullOrEmpty(merchant.Id))
82                SendRequest(newPayment, hash, merchant, linkFail, linkOk);
83            else
84                return View("Error1", IsError("error_hash", payer.Id_faktury));
85
86            return new EmptyResult();         
87        }       
88        private PlatnosciEcard InitNewPayment(int id, vPlatnosciEcard platnosc, Waluta waluta, Payer payer)
89        {
90            var newPayment = new PlatnosciEcard();
91            newPayment.IDFaktury = id;
92            newPayment.ORDERDESCRIPTION = platnosc.Faktura_Numer;
93            newPayment.nip = platnosc.nip;
94            newPayment.nrZlecenia = "";
95            newPayment.AMOUNT = waluta.Amount;
96            newPayment.CURRENCY = waluta.Currency;
97            newPayment.SESSIONID = Session.SessionID;
98            newPayment.NAME = payer.FirstName;
99            newPayment.SURNAME = payer.LastName;
100            newPayment.AUTODEPOSIT = true;
101            newPayment.LANGUAGE = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName.ToUpper();
102            newPayment.CHARSET = KODOWANIE;
103            newPayment.COUNTRY = KOD_POLSKA;
104            newPayment.JS = true;
105            newPayment.PAYMENTTYPE = CARDS;
106            newPayment.Data = DateTime.Now;
107            newPayment.Status = null;
108            newPayment.Status_data = null;
109            return newPayment;
110        }
111       
112        private bool AddNewPayment(PlatnosciEcard platnosc)
113        {
114            if (platnosc != null)
115            {               
116                _repPayment.Insert(platnosc);
117                return true;
118            }
119            return false;
120        }
121
122        private string GetHash(PlatnosciEcard p, Merchant merchant)
123        {
124            var platnosc = _repPayment.Find(i => i.ORDERDESCRIPTION == p.ORDERDESCRIPTION && i.IDFaktury == p.IDFaktury && i.Data == p.Data).First();
125
126            if (platnosc == null || merchant == null) return HASH_ERROR_INFO;
127
128            var adres = "https://pay.ecard.pl/servlet/HS?orderNumber=" + platnosc.ORDERNUMBER;
129            var req = (HttpWebRequest)WebRequest.Create(adres);
130            var dane = "&orderDescription=&amount=" + platnosc.AMOUNT;
131            dane += "&currency=" + platnosc.CURRENCY;
132            dane += string.Format("&merchantId={0}&password={1}", merchant.Id, merchant.Password);
133
134            var bdata = System.Text.Encoding.ASCII.GetBytes(dane);
135            req.Method = "POST";
136            req.ContentType = "application/x-www-form-urlencoded";
137            req.ContentLength = dane.Length;
138
139            var reqStream = req.GetRequestStream();
140            reqStream.Write(bdata, 0, bdata.Length);
141            reqStream.Close();
142
143            var streamResponse = new StreamReader(req.GetResponse().GetResponseStream());
144            string strResponse = streamResponse.ReadToEnd();
145            streamResponse.Close();
146                     
147            return strResponse;
148        }
149
150        private void SendRequest(PlatnosciEcard m, string hash, Merchant merchant, string linkok, string linkfail)
151        {
152            var adres = ConfigurationManager.AppSettings["eCard.Url"] + "?ORDERDESCRIPTION=" + m.ORDERDESCRIPTION;
153
154            var dane = "&AMOUNT=" + m.AMOUNT + "&CURRENCY=" + m.CURRENCY + "&ORDERNUMBER=" + m.ORDERNUMBER;
155            dane += "&NAME=" + m.NAME + "&SURNAME=" + m.SURNAME + "&LANGUAGE=" + m.LANGUAGE + "&CHARSET=ISO-8859-2";
156            dane += "&COUNTRY=616&PAYMENTTYPE=CARDS&JS=1&HASH=" + hash + "&MERCHANTID=" + merchant.Id + "&AUTODEPOSIT=" + m.AUTODEPOSIT;
157            dane += "&LINKFAIL=" + linkfail + "&LINKOK=" + linkok + "&SESSIONID=" + m.SESSIONID;
158            Response.Redirect(adres + dane);
159        }
160        public ErrorViewData IsError(string errortxt, int idFaktury)
161        {
162            if (errortxt == "brakdanych")
163                errortxt = _translateManager.Translate("tlumaczenia", "brakdanych");
164            else if (errortxt == "weryfikacja")
165                errortxt = _translateManager.Translate("tlumaczenia", "weryfikacja");
166            else if (errortxt == "error_hash")
167                errortxt = _translateManager.Translate("tlumaczenia", "error_hash");
168
169            return _funkcjePlatnosci.InitErrorViewData(errortxt, idFaktury);
170        }
171        public Merchant getMerchantInfo( string systemKs)
172        {
173            var merchant = new Merchant();
174            if (systemKs == "2")
175            {
176                merchant.Id = "171485000";
177                merchant.Password = "ashSeth2";
178            }
179            else
180            {
181                merchant.Id = "170906000";
182                merchant.Password = "JaYpqfs0";
183            }             
184            return merchant;
185        }
186    }
187}
Notatka: Zobacz TracBrowser aby uzyskać więcej informacji.