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

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


asp.net

Различия

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

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

Следущая версия
Предыдущая версия
Следущая версия Both sides next revision
asp.net [2011/08/02 10:53]
admin создано
asp.net [2013/01/31 09:11]
admin
Строка 1: Строка 1:
 +**Пример настройки платежного модуля Onpay.ru, используя технологию ASP.net**
  
 +   ​Настройки в Личном Кабинете для магазина demo:
 +   URL http://​secure.onpay.ru/​user/​login
 +   ​логин demo1
 +   ​пароль demodemo
 +   ​Внимание! В демо-магазине технически возможно принимать деньги. Но вывести их нельзя. Просьба для коммерческой деятельности зарегистрироваться и использовать реальные учетные записи!
 +   
 +{{:​asp_net_onpay1.gif|}}
  
-КОШЕЛЕК +**Подготовительные данные для работы примера:​** 
- +Представим,​ что у нас имеется интернет магазин,​ который продаёт товары,​ в котором для каждого пользователя существует USER_ID. Пользователь имеет баланс виртуальных денег на сайте, с помощью которых оплачивает товары из интернет-магазина. Задача - пополнить баланс пользователя,​ используяя систему ​Onpay.ru. То есть пользователь платит деньги провайдеру,​ а за это ему начисляются виртуальные деньги интернет-магазина.\\ 
- +\\ 
-  +**Для начала создадим таблицу в базе данных:​ назовём её ONPAY_TRANSFER**\\ 
-Новости +  CREATE TABLE ONPAY_TRANSFER (
-Тарифы +
-Описание +
-Кабинет +
-Подключение +
-Формы +
-Документы +
-Битрикс +
-Joomla +
-Ubercart-Drupal +
-webAsyst +
-VaM Shop +
-OsCommerce +
-ShopOS +
-OpenCart +
-Django +
-ASP.net +
-Разработчикам +
-Программисты +
-Вопрос-ответ +
-Форум +
-Платежные системы +
-VISA&​MasterCard +
-Moybiz.ru +
-WIKI +
-Контакты +
-Пример использования платежной системы OnPay, используя технологию asp.net +
- +
- +
-Настройки в кабинете для магазина demo: +
-URL http://​secure.onpay.ru/​user/​login +
-логин demo +
-пароль demodemo +
- +
-Подготовительные данные для работы примера:​ +
-Представим,​ что у нас имеется интернет магазин,​ который продаёт товары,​ +
-в котором для каждого пользователя существует USER_ID. +
-Пользователь имеет баланс виртуальных денег на сайте, с помощью которых оплачивает товары из интернет-магазина. +
-Задача - пополнить баланс пользователя,​ используяя систему ​OnPay. +
-То есть пользователь платит деньги провайдеру,​ а за это ему начисляются виртуальные деньги интернет-магазина +
-Для начала создадим таблицу в базе данных:​ назовём её ONPAY_TRANSFER +
- +
-CREATE TABLE ONPAY_TRANSFER (+
   ID INTEGER identity,-- Уникальный автоинкрементный идентификатор   ID INTEGER identity,-- Уникальный автоинкрементный идентификатор
   USER_ID INTEGER,-- Пользователь интернет-магазина   USER_ID INTEGER,-- Пользователь интернет-магазина
Строка 58: Строка 24:
   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/​onpay?f=8";
-        ​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;
- 
         }         }
  
Строка 325: Строка 160:
 } }
  
-  +**Общая схема работы примера такова:​**\\ 
- +В интернет-магазине пользователь заходит на страницу пополнения счета, вводит сумму денег, на которую хочет пополнить свой баланс,​ нажимает на кнопку ​**Пополнить**.\\ 
-Общая схема работы примера такова:​ +Далее происходит запись в таблицу 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>​
Строка 358: Строка 186:
     </​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\\
 Разметка страницы\\ Разметка страницы\\
Строка 536: Строка 352:
         /// Фунция возвращает ответ в соответствующей кодировке         /// Фунция возвращает ответ в соответствующей кодировке
         ///</​summary>​         ///</​summary>​
-        ///<​param name="​strXmlResponse">​строкас xml файлом</​param>​+        ///<​param name="​strXmlResponse">​строка с xml файлом</​param>​
         private void WriteResponse(string strXmlResponse)         private void WriteResponse(string strXmlResponse)
         {         {