root/trunk/eCard/eCardMVC/Platnosci/Models/eCardData.cs @ 960

Wersja 960, 5.1 KB (wprowadzona przez marek, 16 years temu)

re #215

RevLine 
[951]1using System;
2using System.Net;
3using System.IO;
4using System.Linq;
[952]5using System.Configuration;
6using Platnosci.Core.Linq;
7using Platnosci.Core.Interface;
[951]8
9namespace Platnosci.Models
10{
11    public class eCardData
12    {
13        public const string HASH_ERROR_INFO = "payment not exist";
14        private readonly FunkcjePlatnosci _funkcjePlatnosci;
15        private IRepository<PlatnosciEcard> _repPayment;
[960]16
[951]17        public eCardData(IRepository<PlatnosciEcard> repPayment)
18        {
19            _repPayment = repPayment;
[952]20            _funkcjePlatnosci = new FunkcjePlatnosci(_repPayment);
[951]21        }
22
23        public String GetUrl(Merchant merchant)
24        {
[960]25            if (merchant == null)
26                throw new ArgumentNullException("merchant");
27
[951]28            var dane = ConfigurationManager.AppSettings["eCard.Url"] + "?ORDERDESCRIPTION=" + merchant.Payment.ORDERDESCRIPTION;
29            dane += "&AMOUNT=" + merchant.Payment.AMOUNT + "&CURRENCY=" + merchant.Payment.CURRENCY;
30            dane += "&ORDERNUMBER=" + merchant.Payment.ORDERNUMBER;
31            dane += "&NAME=" + merchant.Payment.NAME + "&SURNAME=" + merchant.Payment.SURNAME;
32            dane += "&LANGUAGE=" + merchant.Payment.LANGUAGE + "&CHARSET=ISO-8859-2";
33            dane += "&COUNTRY=616&PAYMENTTYPE=CARDS&JS=1&HASH=" + merchant.Hash;
34            dane += "&MERCHANTID=" + merchant.Id + "&AUTODEPOSIT=" + merchant.Payment.AUTODEPOSIT;
35            dane += "&LINKFAIL=" + merchant.LinkFail + "&LINKOK=" + merchant.LinkOk;
36            dane += "&SESSIONID=" + merchant.Payment.SESSIONID;
37            return dane;
38        }
39        public Merchant CreateMerchantData(vPlatnosciEcard invoice, Payer payer, string lang, string sessionId)
40        {
[952]41            var merchant = new Merchant();
[960]42
[951]43            var waluta = _funkcjePlatnosci.SetAmount(invoice);
[952]44            var newPayment = _funkcjePlatnosci.CreateAndAddNewPyment(invoice, waluta, payer, sessionId);
[951]45
46            merchant.SystemKsiegowy = invoice.SystemKsiegowyId.ToString();
47
[960]48#if DEBUG
49            //TODO: find better method to set SystemKsiegowy when testing or developing
50            merchant.SystemKsiegowy = "2";
51#endif
52
[951]53            merchant.Payment = newPayment;
[957]54            GetMerchantInfo(merchant);
[959]55            merchant.Hash = SetHash(merchant);
[951]56
57            //przeslanie w linku ordernumber potrzebnego do wyswietlenia potwierdzenia
58            var orderek = _repPayment.GetOrdernumber(newPayment.ORDERDESCRIPTION, newPayment.IDFaktury, newPayment.Data);
59
60            var linkFail = ConfigurationManager.AppSettings["Strona"];
61            linkFail += "/" + lang + ConfigurationManager.AppSettings["LinkFail"];
[960]62            linkFail += "/" + newPayment.IDFaktury + "?o=" + orderek;
[951]63
64            var linkOk = ConfigurationManager.AppSettings["Strona"];
65            linkOk += "/" + lang + ConfigurationManager.AppSettings["LinkOk"];
66            linkOk += "/" + newPayment.IDFaktury + "?o=" + orderek;
67
68            merchant.LinkOk = linkOk;
69            merchant.LinkFail = linkFail;
70
[960]71            merchant.IsValid();
[952]72
[951]73            return merchant;
74        }
[957]75        public void GetMerchantInfo(Merchant merchant)
[951]76        {
77            if (merchant.SystemKsiegowy == "2")
78            {
79                merchant.Id = "171485000";
80                merchant.Password = "ashSeth2";
81            }
82            else
83            {
84                merchant.Id = "170906000";
85                merchant.Password = "JaYpqfs0";
86            }
87        }
[959]88        public string SetHash(Merchant merchant)
[951]89        {
[959]90            if (merchant == null)
[960]91                throw new ArgumentNullException("merchant");
[959]92
[951]93            var platnosc = _repPayment.Find(i => i.ORDERDESCRIPTION == merchant.Payment.ORDERDESCRIPTION && i.IDFaktury == merchant.Payment.IDFaktury && i.Data == merchant.Payment.Data).SingleOrDefault();
94
[960]95            if (platnosc == null)
[951]96                merchant.Hash = HASH_ERROR_INFO;
97            else
98            {
99                var adres = "https://pay.ecard.pl/servlet/HS?orderNumber=" + platnosc.ORDERNUMBER;
100                var req = (HttpWebRequest)WebRequest.Create(adres);
101                var dane = "&orderDescription=&amount=" + platnosc.AMOUNT;
102                dane += "&currency=" + platnosc.CURRENCY;
103                dane += string.Format("&merchantId={0}&password={1}", merchant.Id, merchant.Password);
104
105                var bdata = System.Text.Encoding.ASCII.GetBytes(dane);
106                req.Method = "POST";
107                req.ContentType = "application/x-www-form-urlencoded";
108                req.ContentLength = dane.Length;
109
110                var reqStream = req.GetRequestStream();
111                reqStream.Write(bdata, 0, bdata.Length);
112                reqStream.Close();
113
114                var streamResponse = new StreamReader(req.GetResponse().GetResponseStream());
115                string strResponse = streamResponse.ReadToEnd();
116                streamResponse.Close();
117                strResponse = strResponse.Replace("\n", "");
118
119                merchant.Hash = strResponse;
120            }
[959]121            return merchant.Hash;
[951]122        }
123    }
[960]124}
Notatka: Zobacz TracBrowser aby uzyskać więcej informacji.