Диплом: Автоматизация приема платежей в электронном магазине через ПИС WEBMONEY в ЗАО "Артур-Фарм"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
65
2.3 Программное обеспечение задачи
2.3.1 Общие положения (дерево функций и сценарий диалога)
Дерево функций модуля приема платежей магазина приведено на рис. 2.5
Функции
Служебные
Основные
Проверка наличия
товаров в таблице
«Товары» и при
необходимости в
таблице «Корзины»
Проверка запросов от
Мерчант - сервиса
Перенаправление
на страницу оплаты
Формирование и
отправка страниц
пользователю
Изменение записей
таблиц «Товары» и
«Корзины»
Проверка ролей
пользователей
Создание и
изменение записей
в таблице «Заказы»
Формирование
сообщений о (не)
успешности
платежа для
отправки
пользователю
Выполнение реляционных запросов к базе
данных для построения страниц с
необходимой пользователю информацией
Изменение записей таблицы «Настройки
платежей» администратором сайта и выдача
уведомления о успешности сохранения настроек
Рисунок 2.5. Дерево функций модуля
Схема диалога модуля приема платежей интернет - магазина приведена на
рис. 2.6.
Главное меню
Выход
Операции
Настройки платежей
Корзина пользователя
Страницы
Помощь
Описание
Корзина
пользователя
Просмотр списка приобретенных
и не приобретенных товаров
Покупка выбранных
товаров с доставкой
Покупка выбранных
товаров без доставки
Изменение количества
выбранного товара
Удаление выбранных
товаров из корзины
Страницы
Перечня покупаемых
товаров с указанием
количества для
каждого товара,
номера и итоговой
цены заказа
Успешно проведенного
платежа
Не выполненного
платежа
Настройки
платежей
Просмотр и
изменение
кошелька
интернет –
магазина,
режима оплаты,
стоимости
доставки
Изменение секретного ключа интернет - магазина
Просмотр уведомления об успешно сохраненных настройках
Рис. 2.6. Схема диалога модуля приема платежей интернет - магазина
66
2.3.2 Характеристика базы данных
На рис. 2.7. представлена схема базы данных модуля приема платежей
интернет – магазина.
Рис. 2.7. Сема базы данных модуля приема платежей интернет – магазина
Структуры таблиц «Настройки», «Товары», «Пользователи», «Корзины»,
«Заказы» представлены в таблицах 2.3 – 2.7 соответственно.
Таблица 2.3
Структура таблицы настройки платежей «Настройки»
Наименование поля
Идентификатор
поля
Тип и длина
поля
Прочее
Идентификатор
id
int(1)
Первичный ключ. Необходим для
доступа к данным (id=1).
Кошелек продавца
purse
nvarchar(13)
Формат — буква и 12 цифр
Режим работы
платежа
mode
tinyint(1)
0 или отсутствует: для тестовых
платежей сервис будет имитировать
успешное выполнение; 1: сервис будет
имитировать выполнение с ошибкой
(платеж не выполнен); 2: Около 80%
запросов на платеж будут выполнены
успешно, а 20% — не выполнены.
Секретный ключ
продавца
secret
nvarchar(20)
Произвольная строка из 15 – 20
символов, для обеспечения
безопасности платежа
Стоимость доставки
deliveryCost
money(4,2)
Таблица 2.4
Структура таблицы «Товары»
Наименование поля
Идентификатор поля
Тип и длина
поля
Прочее
Идентификатор
id
int(7)
Код товара. Первичный ключ
Наименование
productName
nvarchar(60)
Статус отпуска по
рецепту
status
tinyint(1)
0 – без рецепта, 1 - по рецепту
Стоимость единицы
товара
sum
money(6,2)
Количество на складе
quantity
int(7)
Артикул
kode
nvarchar(20)
67
Таблица 2.5
Структура таблицы «Пользователи»
Наименование поля
Идентификатор поля
Тип и длина
поля
Прочее
Идентификатор
id
int(7)
Код клиента. Первичный
ключ
Логин
login
nvarchar(30)
Электронный адрес
email
nvarchar(30)
Телефон
phone
int(15)
Таблица 2.6
Структура таблицы «Корзины»
Наименование поля
Идентификатор
поля
Тип и длина
поля
Прочее
Идентификатор
id
int(7)
Код товара. Первичный ключ
Идентификатор заказа
orderID
int(7)
Индексируемое поле
Идентификатор клиента
clientID
int(7)
Индексируемое поле
Идентификатор товара
productID
int(7)
Индексируемое поле
Количество товара
quantity
int(7)
Таблица 2.7
Структура таблицы «Заказы»
Наименование поля
Идентификатор
поля
Тип и длина
поля
Прочее
Идентификатор
id
int(7)
Код товара. Первичный ключ
Сумма заказа
sum
money(6,2)
Время оплаты
created
int(11)
Отсутствует, если товар не
оплачен;
Статус заказа
status
tinyint(1)
0 – товар не выбран для оплаты, 1 –
платеж проверяется, 2 – оплачен
Доставки
delivery
tinyint(1)
0 – самовывоз, 1 - доставка
Источником данных для обеспечения работы модуля
автоматизированного приема платежей в интернет - магазине служит SQL-база
данных магазина, в которой происходит накапливание всей оперативной и
нормативно-справочной информации по работе магазина. Кроме того,
необходимо добавить в базу отдельную таблицу настроек, в которой будет
храниться специфическая для расчетов через платежную систему WebMoney
информация: номер кошелька и секретный ключ интернет - магазина, стоимость
доставки, режим работы платежа, режим тестирования.
Оператор интернет - магазина выполняет лишь оперативную поддержку
клиентов, консультирование и техническую поддержку – при необходимости.
68
2.3.3 Структурная схема пакета (дерево вызова процедур и
программ)
На рисунке 2.8 представлено дерево вызова программ разрабатываемого
модуля, а в таблице 2.8 – описание функций представленных модулей.
basket.php
Модуль «Корзина пользователя», представление контроллера
Wmoptions - показывает все заказы пользователя, содержит
кнопки для изменения и удаления заказов пользователя
WmModule.php
Главный модуль оплаты через Мерчант-сервис – загружает
необходимые модели, хранит переменные
main.php
Модуль настроек сайта – содержит настройки
для главного модуля оплаты
Wmoptions.php
Модель работы с таблицей
«wmoptions»
WmForm.php
Модель для проверки запросов
Мерчант-сервиса
WmoptionsController.php
Контроллер, содержащий методы для обработки
запросов пользователей и Мерчант-сервиса
update.php
Представление, содержащее форму
для внесения изменений в заказ
Basket.php
Подключаемая модель для работы
с таблицей «cms_basket»
_wmPayForm.php
Представление, формирующее форму
для отправки на Мерчант-сервис
updateSettings.php
Представление, содержащее форму для
изменения кошелька магазина, режима
тестирования и стоимости доставки
message.php
Представление для вывода сообщения об успешной
или неуспешной оплате пользователю
Order.php
Подключаемая модель для работы
с таблицей «cms_order»
Product.php
Подключаемая модель для работы
с таблицей «cms_product»
Рис. 2.8. Дерево вызова программ
Таблица 2.8
Описание функций модулей
п/п
Наименование
модуля
Функции модуля
1.
WmModule.php
Хранит в переменных наименования «моделей», «контроллера», вызываемого по
умолчанию, загружает необходимые модели на этапе инициализации, содержит
методы для обращения к этим моделям.
2. 2
main.php
Хранит настройки сайта, в том числе, и для модуля оплаты
3. 3
Wmoptions.php
Содержит переменные и методы для работы с таблицей «wmoptions», а также правила
для проверки соответствующей формы.
4.
WmForm.php
Содержит переменные, правила и методы для проверки запросов Мерчант - сервиса.
5.
Basket.php
Содержит переменные для хранения значений из таблиц «Товары» и «Заказы»,
методы для работы с таблицей «cms_basket», а также правила для проверки
соответствующей формы
6.
Order.php
Содержит методы для работы с таблицей «cms_order» и правила для сохранения
значений формы.
69
п/п
Наименование
модуля
Функции модуля
7.
Product.php
Содержит методы для работы с таблицей «cms_product» и правила для сохранения
значений формы.
8.
WmoptionsController.php
В соответствии с запросом выполняет тот или иной метод, называемый действием.
Содержит правила для доступа пользователей к определенным действиям, в
соответствии с их «ролями», также содержит вспомогательные функции, используемые
«действиями контроллера». В действии Basket выполняется запрос к таблице
«Корзина» посредством методов модели Basket, полученные данные передаются в
«представление» basket, в случае покупки товаров клиентом, вызывается
вспомогательный метод buy, для расчета стоимости покупки, изменения необходимых
значений в таблицах «Корзина», «Товары» и «Заказы», вызова представления
«_wmPayForm» с соответствующими параметрами. Оставшиеся «действия»
выполняют: формирование и выдачу сообщений о удачно или неудачно выполненном
платеже, проверку запросов от Мерчант - сервиса, изменение и удаление заказа по
запросу пользователя, добавление товара в корзину, изменение настроек оплаты, а
также вызов соответствующих им представлений.
9.
basket.php
Отображает все заказы пользователя, по 10 на страницу, в табличной форме,
содержит кнопки для изменения, удаления и покупки выбранных товаров.
10.
_wmPayForm.php
Формирует форму для отправки на Мерчант - сервис, поля которой скрыты от
пользователя, содержит также описание заказа для пользователя и кнопку
«сформировать платеж».
11.
update.php
Содержит форму для внесения изменений в заказ.
12.
message.php
Выводит сообщение об успешной или неуспешной оплате пользователю.
13.
updateSettings.php
Содержит форму для изменения кошелька магазина, режима тестирования и стоимости
доставки
70
2.3.4 Описание программных модулей
Блок – схема модуля «WmoptionsController.php», управляющего
соответствующими необходимыми модулями для оплаты платежа показана на
рисунке 2.9.
Начало
filters()
class WmoptionsController extends Controller
//action - вызываемое действие
//id - передаваемый числовой параметр
accessRules()
action
success
fail
result
basket
delete
update
toBasket
updateSettings
$_POST['LMI_PREREQUEST']
==1
$order=$this->module
->getOrderModel()->
findByPk(intval($_POST[
'LMI_PAYMENT_NO']));
$order==NULL
Конец
$options=Wmoptions::
model()->findByPk(1);
$order->id ==
$_POST['LMI_PAYMENT_NO']
и $_POST['LMI_PAYMENT_AMOUNT']
== $order->sum и
$_POST['LMI_PAYEE_PURSE']
== $options->sum
echo ‘YES’;
нет
да
да
нет
$wmForm=new WmForm;
$wmForm->LMI_PAYEE_PURSE=
$_POST['LMI_PAYEE_PURSE'];
$wmForm->LMI_PAYMENT_AMOUNT=
$_POST['LMI_PAYMENT_AMOUNT'];
$wmForm->LMI_PAYMENT_NO=
$_POST['LMI_PAYMENT_NO'];
$wmForm->LMI_MODE=
$_POST['LMI_MODE'];
$v=$wmForm-
>validate()
$v==true
$order=$this->module-
>getOrderModel()-
>findByPk(intval($_POST['
LMI_PAYMENT_NO']));
$order->updateByPk($order-
>id,array('status'=>2));
да
да
нет
нет
$wmForm->LMI_SYS_INVS_NO=
$_POST['LMI_SYS_INVS_NO'];
$wmForm->LMI_SYS_TRANS_NO=
$_POST['LMI_SYS_TRANS_NO'];
$wmForm->LMI_SYS_TRANS_DATE=
$_POST['LMI_SYS_TRANS_DATE'];
$wmForm->LMI_SECRET_KEY=
$_POST['LMI_SECRET_KEY'];
$wmForm->LMI_PAYER_PURSE=
$_POST['LMI_PAYER_PURSE'];
$wmForm->LMI_PAYER_WM=
$_POST['LMI_PAYER_WM'];
$message=
Yii::t('WmPayForm',
'Платеж успешно
произведен');
$this->
render('message',
array('message'
=>$message,));
$message=
Yii::t('WmPayForm',
'Платеж не
произведен');
$this->
render('message',
array('message'
=>$message,));
Конец
А
А
Е
Д
В
Г
Б
Б
$model=Wmoptions::
model()->findByPk(1);
$_POST['Wmoptions'
]!=NULL
$model->
attributes=
$_POST['Wmoptions'];
$t==true
$message=
Yii::t('WmPayForm',
'WM options successful
update');
$this->
render('message',
array('message'=>
$message,));
$this->render('
updateSettings',
array('model'=>
$model,));
да
да
Конец
нет
нет
$t=$model
->save();
Рис. 2.9. Блок – схема модуля «WmoptionsController.php»
71
В
$basket=$this->
loadModel($id);
$basket->
clientID==$p
$basket->delete();
да
нет
$p=Yii::app()->
user->getId();
Функция,
возвращающая
идентификатор
текущего
пользователя
Г
$model=$this-
>loadModel($id);
$basket->
clientID==$p
$s=$model
->save();
нет
Конец
да
$p=Yii::app()->
user->getId();
$model->order->
status!=2
exit("У Вас нет
прав на
выполнение
данного
запроса");
$model->
Attributes=
$_POST['Basket'];
$this->
redirect(array('
basket','id'=>Yii::
app()->
user->getId()));}
$s==True
Конец
да
нет
да
$this->
render('update',
array('model'=>
$model,));
нет
Д
$product=$this->
module->
getProductModel()
->findByPk($id);
$model=new
Basket;
$product!=NULL
$model->
productID=
$product->id;
throw new
CHttpException(
404,'Product not
found');
$model->
clientID=Yii::
app()->user
->getId();
$model->sum=
$product->sum;
$model->
quantity=1;
$model->
save();
$this->
redirect(isset(
$_POST['returnUrl']) ?
$_POST['returnUrl'] :
array('basket','id'=>
Yii::app()->user->
getId()));
да
нет
Конец
Продолжение Рис. 2.9.
Блок – схема «действия» «actionBasket($id)», являющегося частью модуля
«WmoptionsController.php» и выполняющего проверку количества товаров в
таблице «Товары» и при необходимости, в таблице «Корзины» представлена на
рис. 2.10. На рисунке показана блок – схема вспомогательной функции
buy($delivery), в которой и происходит проверка, основной расчет и изменение
значений соответствующих таблиц.
72
$_POST['delete'] !=
NULL
$this->
loadModel($one)
->delete()
Цикл foreach
($_POST['id'] as
$one)
Конец цикла
foreach
Конец
$_POST['delivery']!=
NULL
buy(1)
$_POST['justBuy']!=
NULL
buy(0)
Начало
buy ($delivery)
//$delivery = 1 для заказов с доставкой
//$delivery = 0 для заказов без доставки
$mes="";
$quantity=0;
$sum=0.0;
Цикл foreach
($_POST['id'] as
$one)
Конец цикла
foreach
$pr->quantity!=0
да
нет
да
нет
$pr->quantity<$bas
->quantity
$quantity=$pr
->quantity;
$pr->quantity!=0
$quantity=$bas
->quantity;
$c=0;
$b!=NULL
Цикл foreach
($b as $v)
$c+=$v->
quantity;
Конец цикла
foreach
$quantity
=$c;
$model=$this
->module->
getBasketModel();
$product=$this
->module->
getProductModel();
$bas=$model->
findByPk($one);
$pr=$product->
findByPk($bas
->productID);
да
$bas->
updateByPk($bas->
id,array('quantity'=>
$quantity));
$timestamp
= time();
$date_time_array =
getdate($timestamp);
$timestamp = mktime(
$date_time_array['hours'],
$date_time_array['minutes'] - 10,
$date_time_array['seconds'],
$date_time_array['mon'],
$date_time_array['mday'],
$date_time_array['year']);
$b=$model->
findAll(array('condition'=>
'order.created>=:created AND
product.id =:productID',
'params'=> array(
':created' => $timestamp,
':productID' =>
$bas->productID,)));
$v->
delete();
Ж
Ж
да
нет
да
нет
К
да
З
нет
И
И
И
З
И
$sum+=$pr->
sum*$quantity;
$pr->
updateByPk($pr->
id,array('quantity'
=>$pr->quantity -
$quantity));
$bas->orderID!
=0
$basket=new Basket;
$basket->orderID=$bas->orderID;
$basket->clientID=$bas->clientID;
$basket->productID=
$bas->productID;
$basket->quantity=
$bas->quantity;
$basket
->save();
К
К
$ord=$this->
module->
getOrderModel();
exit("Выбранных
товаров на
складе не
осталось");
$sum==0.0
$delivery==1
$ord-
>sum=$sum+$options-
>deliveryCost;
$ord->delivery=1;
$options=Wmopti
ons::model()-
>findByPk(1);
$ord->sum=$sum;
$ord->delivery=0;
да
К
нет
да
нет
нет
да
Л Л
Конец
Л
$options=$command->queryRow();
$criteria=new CDbCriteria;
$criteria->compare('orderID',
$ord->id);
$data=new CActiveDataProvider(
Basket,
array('criteria'=>$criteria,));
$ord->
created=time();
$ord->save();
$command=
$connection->
createCommand($sql);
$ord->status=1;
$connection=Yii::app()->db;
$sql='SELECT
secret,purse,mode,deliveryCost
FROM wmoptions WHERE id=1';
$this->render('_wmPayForm',
array('options'=>$options,
'order'=>$ord,
'model'=>$data,
'orderMessage'=>$this->
module->orderMessage,
'csrfToken'=>$this->
module->csrfToken,));
Конец
Конец цикла foreach
($_POST['id'] as $one)
$this->
render('basket',array
('model'=>$model,));
Е
Рис. 2.10. Блок – схема метода «actionBasket($id
Блок – схема модуля «WmForm.php» осуществляющего проверку
присланных Мерчант – сервисом в запросе данных представлена на рис. 2.11.
73
$this->
_options['purse']!=$this->
LMI_PAYEE_PURSE
да
$this->
_options['mode']!=$this->
LMI_MODE
да
floatval($order->
$orderSumField)!=floatval($this->
LMI_PAYMENT_AMOUNT)
да
$order=$this->module->
getOrderModel()->
findByPk(intval($this->
LMI_PAYMENT_NO));
$orderSumField=$this->
module->orderSumField;
Начало
init()
rules()
class WmForm extends CFormModel
$sign!=
$this->LMI_HASH
да
нет
$sign=$this->LMI_PAYEE_PURSE.
$this->LMI_PAYMENT_AMOUNT.
$this->LMI_PAYMENT_NO.
$this->LMI_MODE.
$this->LMI_SYS_INVS_NO.
$this->LMI_SYS_TRANS_NO.
$this->LMI_SYS_TRANS_DATE.
$this->_options['secret'].
$this->LMI_PAYER_PURSE.
$this->LMI_PAYER_WM;
нет
нет
нет
Конец
throw new
CHttpException(400,
Yii::t('WmPayForm',
'Error purse.'));
throw new
CHttpException(400,
Yii::t('WmPayForm',
'Error mode.'));
throw new
CHttpException(400,
Yii::t('WmPayForm',
'Error amount.'));
throw new
CHttpException(400,
Yii::t('WmPayForm',
'Error sign.'));
Рис. 2.11. Блок – схема модуля «WmForm.php»
Исходный код основных измененных и разработанных модулей приведен
в приложении А.
74
2.4 Контрольный пример реализации проекта и его описание
Перед осуществлением платежа зарегистрированным клиентом, клиенту
необходимо авторизоваться (рис. 2.12).
Рис. 2.12. Форма авторизации на сайте компании «Артур-Фарм»
Задача администратора сайта заключается в размещении ссылки с
идентификатором товара к описанию товара на сайте (рис. 2.13).
Рис. 2.13. Пример заполнения администратором сайта описания товара с
указанием ссылки для добавления в корзину пользователя

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")