Индексиране на резултате от търсене в самия сайт

by mitkoka 9. Декември 2008 09:25

Някой динамични сайтове предоставят възможност за търсене в самия уеб сайт на базата на определени критерии. Например търсене на продукт по ключова дума в уеб магазин, търсене по дестинация в сайт на туроператорска фирма, търсене на автомобил в сайт за продажба на автомобили и др. Вътрешните търсачки естествено са предназначени за потребителите на сайта, а не за търсещите машини. Ето защо данните които излизат като ресултат от вътрешното търсене в сайта остават скрити за потребителите. Затова трябва да се измисли механизъм, който да ги показва на търсачките. Решенито на проблема е чрез линк в самия сайт, който води до каталог от всички резултати от вътрешното търсене.

Друго решение на проблема:В уеб сайта може да бъде добавен механизъм, който определя дали в сайта се влиза от търсачка, от рефериращ сайт или пряко(чрез въвеждане на уеб адрес в браузъра). Ако се влиза от търсачка, то може да се разбере коя е ключовата дума, по която е станало търсенето в търсачката и по нея да се направи вътрешно търсене. Така вътрешните резултати за сайта няма да останат скрити.Този вариант е особенно подходящ за уеб  мазагзини, които предлагат различни различни варианти от определен продукт.

Постване да данни към EPay и PayPall

by mitkoka 28. Октомври 2008 08:35

Здравейте

Опитвам се да направя електронен магазин, който позволява разплащане чрез EPay и PayPal. Докато в PayPal има доста добро описане за това как трябва да бъде изградена системата,  в сайта на EPay това изобщо не е така. Има доста кратко описане как информацията се изпраща до сървъра и дадените примери са написъни на PHP и Perl. Аз като .Net програмист се опитвам да намеря решение на проблема и съвсем скоро ще го дам. Междувременно събрах доста информаця за това как точно става изпращането на данни от страница към сървър. Оказва се, че в ASP.NET не може да се използва action атрибута на Form тага. Затова за да се пренасочи постването на данни към друг сървър трябва да се напише някаква сървърна логика.

Ето как го направих:

 

  protected void Page_Load(object sender, EventArgs e)
        {
            ctlEPayForm.Text = _GetPaypalForm();
            String strJS = _GetPayPalPostJS("_xclick");
            ctlPostScript.Text = strJS;
        }

 ctlEPayForm и  ctlPostScript са LiteralControl-и.

 

       private String _GetPayPalPostJS(String strFormId)
        {
            StringBuilder strScript = new StringBuilder();
            strScript.Append("<script language='javascript'>");
            strScript.Append("var ctlForm = document.forms.namedItem('{0}');");
            strScript.Append("ctlForm.submit();");
            strScript.Append("</script>");
            return String.Format(strScript.ToString(), strFormId);
        }

        private String _GetPaypalForm()
        {
            StringBuilder strForm = new StringBuilder();

            strForm.Append("<form id=\"_xclick\" name=\"_xclick\" target=\"_blank\" action=\"https://www.Epay.bg\" method=\"post\">");
            strForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", "PAGE", "paylogin");
            string encodedTo64 = EncodeTo64(GetPayRequest());
            strForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", "ENCODED", encodedTo64);
            string encodedToEncodeHMACSHA1 = EncodeHMACSHA1(encodedTo64, "aaa");
            strForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", "CHECKSUM", HttpUtility.UrlEncode("encodedToEncodeHMACSHA1"));
            strForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", "URL_CANCEL", "Адрес при отказ от плащане");
            strForm.Append("<input type=\"image\" src=\"път до бутон" border=\"0\" name=\"submit\" alt=\"Текст до бутон\">");
            strForm.Append("</form>");
            return strForm.ToString();
        }

 

Идеята е да се ремдира втори form елемент, който да направи постването на данните.Ето и функциите за кодиране на заявката към EPay:

        private string EncodeHMACSHA1(string message,string key)
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            byte[] keyByte = encoding.GetBytes(key);
            HMACSHA1 hmacsha1 = new HMACSHA1(keyByte);
            byte[] messageBytes = encoding.GetBytes(message); 
            byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
            string result = ByteToString(hashmessage);
            return result;
        }

        private string ByteToString(byte[] buff)
        {
            string sbinary = string.Empty;
            for (int i = 0; i < buff.Length; i++)
            {
                sbinary += buff[i].ToString("X2"); // hex format
            }
            return (sbinary);
        }

        private string EncodeTo64(string toEncode)
        {
            byte[] toEncodeAsBytes
            = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
            string returnValue
            = System.Convert.ToBase64String(toEncodeAsBytes);
            return returnValue;
        }

 Това е кодиране е изискванене EPay. Следва да се подготви заявката за плащане.

 Ето и самата заявка:

        private string GetPayRequest()
        {
            string min = "SET_THIS_CORRECT";
            string email = "a@merch.bg";   
            string invoice = "34534525";
            string sum = "22.80";
            string exp_date = "01.08.2020";
            string descr = "Test";
           
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("MIN={0}", min);
            sb.AppendLine();
            sb.AppendFormat("EMAIL={0}", email);
            sb.AppendLine();
            sb.AppendFormat("INVOICE={0}", invoice);
            sb.AppendLine();
            sb.AppendFormat("AMOUNT={0}", sum);
            sb.AppendLine();
            sb.AppendFormat("TIME={0}", exp_date);
            sb.AppendLine();
            sb.AppendFormat("DESCR={0}", descr);

            return sb.ToString(); ;
        }

 

При натискане на бутона потребителят бива препратен към сайта на EPay, където извършва плащането и след това бива върнат обратно към сайта на търговеца.

И това е. Ако имате въпроси не се колебайте да се свържете с мен.Кодът е работещ само трябва да се добави още един ред към _GetPaypalForm() указващ пътя до сайта на търговеца при приключване на плащането.Може да бъде видян от сайта на EPay.Наместете и адреса на картинката на бутона за плащане. Коригирайте го според вашите нужди и сте готови.

 

Система за плащане с кредитни карти в интернет магазин

by mitkoka 23. Септември 2008 20:13

 Статията не довършена. За повече информация ви препоръчвам следният сайт:

http://www.west-wind.com/presentations/aspnetecommerce/aspnetecommerce.asp

като и страниците на EPay и PayPal.

До сега не съм видял български уеб магазин, който да позволява плащане чрез кредитни карти.Причините са извесни - най - вече сигурниста. Все пак се среща разплащане чрез PayPal,но не и директно с кредитни карти. Целта на тази публикация е да разясни как става интегрирането на сигурна системa за разплащане, която не е базирана на paypal.com.

Вероятно малко уеб сайтове биха използвали такава система поне за сега. По голямата част от плащанията стават чрез наложен платеж, защото тук риска от кражба на данни не съществува. Така или иначе смятам, че скоро все повече клиенти ще са склонни да плащат по различен начин, а именно чрез сметките си в PayPal или EPay или директно чрез кредитната си карта.

Нека първо да разгледаме разплащането чрез системата PayPal.

При плащането чрез PayPal платецът не предоставя номер на кредитна карта на търговеца.