Инструменты пользователя

Инструменты сайта


asp.net

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
Следущая версия Both sides next revision
asp.net [2011/08/02 10:54]
admin
asp.net [2011/09/04 08:36]
admin
Строка 1: Строка 1:
-Пример ​использования платежного модуля ​Onay, используя технологию ​asp.net+**Пример ​настройки платежного модуля ​Onpay.ru, используя технологию ​ASP.net**
  
 +   ​Настройки в Личном Кабинете для магазина demo:
 +   URL http://​secure.onpay.ru/​user/​login
 +   ​логин demo
 +   ​пароль demodemo
 +   
 +{{:​asp_net_onpay1.gif|}}
  
-Настройки в кабинете для магазина demo: +**Подготовительные данные для работы примера:​** 
-URL http://​secure.onpay.ru/​user/​login +Представим,​ что у нас имеется интернет магазин,​ который продаёт товары,​ в котором для каждого пользователя существует USER_ID. Пользователь имеет баланс виртуальных денег на сайте, с помощью которых оплачивает товары из интернет-магазина. Задача - пополнить баланс пользователя,​ используяя систему ​Onpay.ru. То есть пользователь платит деньги провайдеру,​ а за это ему начисляются виртуальные деньги интернет-магазина.\\ 
-логин demo +\\ 
-пароль demodemo +**Для начала создадим таблицу в базе данных:​ назовём её ONPAY_TRANSFER**\\ 
- +  CREATE TABLE ONPAY_TRANSFER (
-Подготовительные данные для работы примера:​ +
-Представим,​ что у нас имеется интернет магазин,​ который продаёт товары,​ +
-в котором для каждого пользователя существует USER_ID. +
-Пользователь имеет баланс виртуальных денег на сайте, с помощью которых оплачивает товары из интернет-магазина. +
-Задача - пополнить баланс пользователя,​ используяя систему ​OnPay. +
-То есть пользователь платит деньги провайдеру,​ а за это ему начисляются виртуальные деньги интернет-магазина +
-Для начала создадим таблицу в базе данных:​ назовём её ONPAY_TRANSFER +
- +
-CREATE TABLE ONPAY_TRANSFER (+
   ID INTEGER identity,-- Уникальный автоинкрементный идентификатор   ID INTEGER identity,-- Уникальный автоинкрементный идентификатор
   USER_ID INTEGER,-- Пользователь интернет-магазина   USER_ID INTEGER,-- Пользователь интернет-магазина
Строка 26: Строка 23:
   ONPAY_ID nvarchar(100),​-- Уникальный идентификатор платежа в системе OnPay   ONPAY_ID nvarchar(100),​-- Уникальный идентификатор платежа в системе OnPay
   constraint PK_ONPAY_TRANSFER primary key (ID)   constraint PK_ONPAY_TRANSFER primary key (ID)
-+  ​
-Введём несколько дополнительных классов,​ для облегчения работы:​+   
 +**Введём несколько дополнительных классов,​ для облегчения работы:​**
 Класс OnPayEngine Класс OnPayEngine
 using System; using System;
- 
 using System.Collections.Generic;​ using System.Collections.Generic;​
- 
 using System.Globalization;​ using System.Globalization;​
- 
 using System.Security.Cryptography;​ using System.Security.Cryptography;​
- 
 using System.Text;​ using System.Text;​
- 
-  
- 
 namespace Utils namespace Utils
- 
 { {
- 
     public class OnPayEngine     public class OnPayEngine
- 
     {     {
- 
         // Секретный пароль (Пароль для API IN)         // Секретный пароль (Пароль для API IN)
- 
         public static string strSecureApiIn = "​a2su3ig8y";​         public static string strSecureApiIn = "​a2su3ig8y";​
- 
         // Ссылка,​ на которую пользователь будет перенаправлен для совершения платежа         // Ссылка,​ на которую пользователь будет перенаправлен для совершения платежа
- 
         public static string strRedirectLink = "​http://​secure.onpay.ru/​pay/​demo";​         public static string strRedirectLink = "​http://​secure.onpay.ru/​pay/​demo";​
- 
         // Ссылка,​ по которой будет перенаправлен пользователь,​ после того как платеж успешно проведён         // Ссылка,​ по которой будет перенаправлен пользователь,​ после того как платеж успешно проведён
- 
         public static string strUrlSuccess = "​http://​www.domen.com/​Success.aspx";​         public static string strUrlSuccess = "​http://​www.domen.com/​Success.aspx";​
- 
         // Ссылка,​ по которой будет перенаправлен пользователь,​ если платеж прошёл неудачно         // Ссылка,​ по которой будет перенаправлен пользователь,​ если платеж прошёл неудачно
- 
         public static string strUrlFail = "​http://​www.domen.com/​Fail.aspx";​         public static string strUrlFail = "​http://​www.domen.com/​Fail.aspx";​
- 
         // Идентификатор пользователя системы         // Идентификатор пользователя системы
- 
         public static int iUSER_ID = 123456;         public static int iUSER_ID = 123456;
- 
         // Идентификатор пользователя системы         // Идентификатор пользователя системы
- 
         public static string strUSER_EMAIL = "​demouser@demodomen.ru";​         public static string strUSER_EMAIL = "​demouser@demodomen.ru";​
- 
         /// <​summary>​         /// <​summary>​
- 
         /// Функция кодирует исхоную строку алгоритмом md5         /// Функция кодирует исхоную строку алгоритмом md5
- 
         /// </​summary>​         /// </​summary>​
- 
         /// <param name="​sCrcBase"></​param>​         /// <param name="​sCrcBase"></​param>​
- 
         /// <​returns></​returns>​         /// <​returns></​returns>​
- 
         public static string BuildCRCString(string sCrcBase)         public static string BuildCRCString(string sCrcBase)
- 
         {         {
- 
             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();​             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();​
- 
             byte[] bSignature = md5.ComputeHash(Encoding.UTF8.GetBytes(sCrcBase));​             byte[] bSignature = md5.ComputeHash(Encoding.UTF8.GetBytes(sCrcBase));​
- 
             StringBuilder sbSignature = new StringBuilder();​             StringBuilder sbSignature = new StringBuilder();​
- 
             foreach (byte b in bSignature)             foreach (byte b in bSignature)
- +            ​sbSignature.AppendFormat("​{0:​x2}",​ b);
-                ​sbSignature.AppendFormat("​{0:​x2}",​ b); +
             return sbSignature.ToString().ToUpper();​             return sbSignature.ToString().ToUpper();​
- +         }
-  +
- +
-        ​} +
         /// <​summary>​         /// <​summary>​
- 
         /// Сгенерировать пользователю ссылки на платёжную систему         /// Сгенерировать пользователю ссылки на платёжную систему
- 
         /// </​summary>​         /// </​summary>​
- 
         /// <param name="​fOutSum">​сумма</​param>​         /// <param name="​fOutSum">​сумма</​param>​
- 
         /// <​returns>​сформированная ссылка на платёжную систему,​ по которой будет происходить запрос</​returns>​         /// <​returns>​сформированная ссылка на платёжную систему,​ по которой будет происходить запрос</​returns>​
- 
         public static string GenerateUserPaymentLink(float fOutSum)         public static string GenerateUserPaymentLink(float fOutSum)
- 
         {         {
- 
             string sCrcBase;             string sCrcBase;
- 
             // OnPayTransfer - ORM объект представляющий запись в таблице ONPAY_TRANSFER             // OnPayTransfer - ORM объект представляющий запись в таблице ONPAY_TRANSFER
- 
             OnPayTransfernew OnPayTransfer();//​ Создать объект перевода средств             OnPayTransfernew OnPayTransfer();//​ Создать объект перевода средств
- 
             onpayTransfer.USER_ID = iUSER_ID;// Перевод для пользователя с USER_ID = iUSER_ID             onpayTransfer.USER_ID = iUSER_ID;// Перевод для пользователя с USER_ID = iUSER_ID
- 
             onpayTransfer.CHECK_PAID = 0;// Установить флаг, что check запрос от системы onpay не был произведён             onpayTransfer.CHECK_PAID = 0;// Установить флаг, что check запрос от системы onpay не был произведён
- 
             onpayTransfer.REDIRECT_DTE = DateTime.Now;​ // Дата отсылки пользователя на форму оплаты             onpayTransfer.REDIRECT_DTE = DateTime.Now;​ // Дата отсылки пользователя на форму оплаты
- 
             onpayTransfer.PAY_PAID = 0;// Установить флаг, что pay запрос от системы onpay не был произведён             onpayTransfer.PAY_PAID = 0;// Установить флаг, что pay запрос от системы onpay не был произведён
- 
             onpayTransfer.TRANSFER_SUM = fOutSum; // Сумма перевода             onpayTransfer.TRANSFER_SUM = fOutSum; // Сумма перевода
- 
             onpayTransfer.Create();//​ Создать запись в таблице ONPAY_TRANSFER             onpayTransfer.Create();//​ Создать запись в таблице ONPAY_TRANSFER
- 
             //​pay_mode;​price;​currency;​pay_for;​convert;​ secret_key             //​pay_mode;​price;​currency;​pay_for;​convert;​ secret_key
- 
             // Сформировать ссылку для кодирования её алгоритмом md5             // Сформировать ссылку для кодирования её алгоритмом md5
- 
             sCrcBase = string.Format("​fix;​{0};​{1};​{2};​yes;​{3}",​ fOutSum, "​RUR",​ onpayTransfer.ID,​             sCrcBase = string.Format("​fix;​{0};​{1};​{2};​yes;​{3}",​ fOutSum, "​RUR",​ onpayTransfer.ID,​
- +            ​strSecureApiIn);​
-                                 strSecureApiIn);​ +
             string strMD5String = BuildCRCString(sCrcBase);//​ Закодировать строку             string strMD5String = BuildCRCString(sCrcBase);//​ Закодировать строку
- 
             onpayTransfer.Update();​             onpayTransfer.Update();​
- 
             // Возвратить ссылку на платёжную систему             // Возвратить ссылку на платёжную систему
             // в переменную pay_for записывается уникальный идентификатор             // в переменную pay_for записывается уникальный идентификатор
             // перевода в системе провайдера(поле ID записи из таблицы ONPAY_TRANSFER)             // перевода в системе провайдера(поле ID записи из таблицы ONPAY_TRANSFER)
- 
             //             //
- 
             return strRedirectLink + "?"​ +             return strRedirectLink + "?"​ +
- 
                    "​pay_mode=fix"​ +                    "​pay_mode=fix"​ +
- 
                    "&​price="​ + fOutSum +                    "&​price="​ + fOutSum +
- 
                    "&​pay_for="​ + onpayTransfer.ID +                    "&​pay_for="​ + onpayTransfer.ID +
- 
                    "&​md5="​ + strMD5String +                    "&​md5="​ + strMD5String +
- 
                    "&​convert=yes"​ +                    "&​convert=yes"​ +
- 
                    "&​url_success="​ + strUrlSuccess +                    "&​url_success="​ + strUrlSuccess +
- 
                    "&​url_fail="​ + strUrlFail +                    "&​url_fail="​ + strUrlFail +
- 
                    "&​note="​ + "​Пополнение_счёта"​ +                    "&​note="​ + "​Пополнение_счёта"​ +
- 
                    "&​user_email="​ + strUSER_EMAIL;​                    "&​user_email="​ + strUSER_EMAIL;​
- +         }
-        ​} +
         /// <​summary>​         /// <​summary>​
- 
         /// Функция формирует md5 строку для ответа на check запрос платёжной системы         /// Функция формирует md5 строку для ответа на check запрос платёжной системы
- 
         /// </​summary>​         /// </​summary>​
- 
         /// <param name="​pay_for">​параметр pay_for</​param>​         /// <param name="​pay_for">​параметр pay_for</​param>​
- 
         /// <param name="​strCurrency">​параметр order_currency</​param>​         /// <param name="​strCurrency">​параметр order_currency</​param>​
- 
         /// <param name="​order_amount">​параметр order_amount </​param>​         /// <param name="​order_amount">​параметр order_amount </​param>​
- 
         /// <param name="​code">​параметр code</​param>​         /// <param name="​code">​параметр code</​param>​
- 
         /// <​returns>​закодированная строка методом md5</​returns>​         /// <​returns>​закодированная строка методом md5</​returns>​
- 
         public static string GenerateCheckCRC(int pay_for, string strCurrency,​ string order_amount,​ int code)         public static string GenerateCheckCRC(int pay_for, string strCurrency,​ string order_amount,​ int code)
- 
         {         {
- 
             //​type;​pay_for;​order_amount;​order_currency;​code;​secret_key_api_in”             //​type;​pay_for;​order_amount;​order_currency;​code;​secret_key_api_in”
- 
             // Сформировать строчку по заданному шаблону             // Сформировать строчку по заданному шаблону
- 
             string sCrcBase = string.Format("​check;​{0};​{1};​{2};​{3};​{4}",​ pay_for, order_amount,​ strCurrency,​ code, strSecureApiIn);​             string sCrcBase = string.Format("​check;​{0};​{1};​{2};​{3};​{4}",​ pay_for, order_amount,​ strCurrency,​ code, strSecureApiIn);​
- 
             // Вычислить и вернуть закодированную строку             // Вычислить и вернуть закодированную строку
- 
             return BuildCRCString(sCrcBase);​             return BuildCRCString(sCrcBase);​
- 
         }         }
- 
         /// <​summary>​         /// <​summary>​
- +        ​/// Функция формирует md5 строку для ответа на pay запрос системы ​Onpay.ru
-        ​/// Функция формирует md5 строку для ответа на pay запрос ​платёжной ​системы +
         /// </​summary>​         /// </​summary>​
- 
         /// <param name="​pay_for">​параметр pay_for</​param>​         /// <param name="​pay_for">​параметр pay_for</​param>​
- 
         /// <param name="​onpay_id">​параметр onpay_id</​param>​         /// <param name="​onpay_id">​параметр onpay_id</​param>​
- 
         /// <param name="​order_amount">​параметр order_amount</​param>​         /// <param name="​order_amount">​параметр order_amount</​param>​
- 
         /// <param name="​code">​параметр code</​param>​         /// <param name="​code">​параметр code</​param>​
- 
         /// <​returns>​закодированная строка методом md5</​returns>​         /// <​returns>​закодированная строка методом md5</​returns>​
- 
         public static string GeneratePayCRC(int pay_for, string onpay_id, string order_amount,​ int code)         public static string GeneratePayCRC(int pay_for, string onpay_id, string order_amount,​ int code)
- 
         {         {
- 
             //​type;​pay_for;​onpay_id;​order_id;​order_amount;​order_currency;​code;​secret_key_api_in             //​type;​pay_for;​onpay_id;​order_id;​order_amount;​order_currency;​code;​secret_key_api_in
- 
             // Сформировать строчку по заданному шаблону             // Сформировать строчку по заданному шаблону
- 
             string sCrcBase = string.Format("​pay;​{0};​{1};​{2};​{3};​RUR;​{4};​{5}",​ pay_for, onpay_id, pay_for, order_amount,​ code, strSecureApiIn);​             string sCrcBase = string.Format("​pay;​{0};​{1};​{2};​{3};​RUR;​{4};​{5}",​ pay_for, onpay_id, pay_for, order_amount,​ code, strSecureApiIn);​
- 
             // Вычислить и вернуть закодированную строку             // Вычислить и вернуть закодированную строку
- 
             return BuildCRCString(sCrcBase);​             return BuildCRCString(sCrcBase);​
- 
         }         }
- 
     }     }
- 
 } }
- 
    
- 
-  
- 
- 
 Класс SiteHelper Класс SiteHelper
 using System; using System;
- 
 using System.Collections.Generic;​ using System.Collections.Generic;​
- 
 using System.Text;​ using System.Text;​
- 
 using System.Web; using System.Web;
- 
 using System.Web.UI;​ using System.Web.UI;​
- 
-  
- 
 namespace Helpers namespace Helpers
- 
 { {
- 
     public class SiteHelper     public class SiteHelper
- 
     {     {
- 
         public static string GetPrm(string sName)         public static string GetPrm(string sName)
- 
         {         {
- 
             string sValue;             string sValue;
- 
             sValue = HttpContext.Current.Request.Form[sName] as string;             sValue = HttpContext.Current.Request.Form[sName] as string;
- 
             if (string.IsNullOrEmpty(sValue))             if (string.IsNullOrEmpty(sValue))
- 
                 sValue = HttpContext.Current.Request.QueryString[sName] as string;                 sValue = HttpContext.Current.Request.QueryString[sName] as string;
- 
             if (string.IsNullOrEmpty(sValue))             if (string.IsNullOrEmpty(sValue))
- 
                 sValue = String.Empty;​                 sValue = String.Empty;​
- 
             return sValue;             return sValue;
- 
         }         }
  
Строка 293: Строка 159:
 } }
  
-  +**Общая схема работы примера такова:​**\\ 
- +В интернет-магазине пользователь заходит на страницу пополнения счета, вводит сумму денег, на которую хочет пополнить свой баланс,​ нажимает на кнопку ​**Пополнить**.\\ 
-Общая схема работы примера такова:​ +Далее происходит запись в таблицу ONPAY_TRANSFER:​\\ 
- +Заполняются следующие поля:\\ 
-В интернет-магазине пользователь заходит на страницу пополнения счета, +1) USER_ID - пользователь интернет-магазина\\ 
-вводит сумму денег, на которую хочет пополнить свой баланс,​ +2) REDIRECT_DTE - текущее время(DateTime.Now)\\ 
-нажимает на кнопку Пополнить. +3) CHECK_PAID = 0, флаг того, что check запрос не был произведен\\ 
-Далее происходит запись в таблицу ONPAY_TRANSFER:​ +3) PAY_PAID = 0, флаг того, что pay запрос не был произведен\\ 
-Заполняются следующие поля: +3) TRANSFER_SUM , сумма перевода\\ 
-1) USER_ID - пользователь интернет-магазина +Далее происходит генерация ссылки на платёжную систему(Функция GenerateUserPaymentLink в классе OnPayEngine).\\
-2) REDIRECT_DTE - текущее время(DateTime.Now) +
-3) CHECK_PAID = 0, флаг того, что check запрос не был произведен +
-3) PAY_PAID = 0, флаг того, что pay запрос не был произведен +
-3) TRANSFER_SUM , сумма перевода +
-Далее происходит генерация ссылки на платёжную систему(Функция GenerateUserPaymentLink в классе OnPayEngine).+
  
    ​Код приведён ниже:    ​Код приведён ниже:
    ​Разметка формы    ​Разметка формы
- 
     <form id="​form1"​ runat="​server">​     <form id="​form1"​ runat="​server">​
     <​table>​     <​table>​
-        +               <tr>
-        ​<tr>+
             <td>             <td>
                 <​asp:​TextBox ID="​txtAddSumm"​ runat="​server"></​asp:​TextBox>​                 <​asp:​TextBox ID="​txtAddSumm"​ runat="​server"></​asp:​TextBox>​
Строка 326: Строка 185:
     </​table>​     </​table>​
     </​form>​     </​form>​
- 
- 
  
       Обработчик нажатия кнопки       Обработчик нажатия кнопки
         protected void btnAddSumm_Click(object sender, EventArgs e)         protected void btnAddSumm_Click(object sender, EventArgs e)
- 
         {         {
- 
                 float fOutSumm;                 float fOutSumm;
- 
                 float.TryParse(txtAddSumm.Text,​ out fOutSumm);                 float.TryParse(txtAddSumm.Text,​ out fOutSumm);
- 
                 if (fOutSumm>​ 0)                 if (fOutSumm>​ 0)
- 
                 {                 {
- 
                     if (SiteConfiguration.OnlinePaymentEnabled)                     if (SiteConfiguration.OnlinePaymentEnabled)
- 
                         Response.Redirect(OnPayEngine.GenerateUserPaymentLink(fOutSumm));​                         Response.Redirect(OnPayEngine.GenerateUserPaymentLink(fOutSumm));​
- 
                 }                 }
- 
         }         }
- 
  
 Далее у пользователя должна появится такая форма:​\\ Далее у пользователя должна появится такая форма:​\\
- +{{:​asp_net_onpay2.gif|}}\\ 
-После начала оплаты на страницу провайдера от системы ​OnPay приходит запрос check, страница обрабатывает его, выдает серверу ответ. Если ответ от сервера положительный,​ система OnPay посылает странице провайдера запрос pay. Провайдер обрабатывает его и если результат обработки - удачный,​ то зачисляет пользователю сумму баллов,​ которые он указал при переходе на страницу оплаты.\\+После начала оплаты на страницу провайдера от системы ​Onpay.ru ​приходит запрос check, страница обрабатывает его, выдает серверу ответ. Если ответ от сервера положительный,​ система OnPay посылает странице провайдера запрос pay. Провайдер обрабатывает его и если результат обработки - удачный,​ то зачисляет пользователю сумму баллов,​ которые он указал при переходе на страницу оплаты.\\
 Приведём полный код страницы api.aspx\\ Приведём полный код страницы api.aspx\\
 Разметка страницы\\ Разметка страницы\\