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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
69
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»
70
В
$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), в которой и происходит проверка, основной расчет и изменение
значений соответствующих таблиц.
71
$_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.
72
$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»
Исходный код основных измененных и разработанных модулей приведен
в приложении А.
73
2.4 Контрольный пример реализации проекта и его описание
Перед осуществлением платежа зарегистрированным клиентом, клиенту
необходимо авторизоваться (рис. 2.12).
Рис. 2.12. Форма авторизации на сайте компании «Артур-Фарм»
Задача администратора сайта заключается в размещении ссылки с
идентификатором товара к описанию товара на сайте (рис. 2.13).
Рис. 2.13. Пример заполнения администратором сайта описания товара с
указанием ссылки для добавления в корзину пользователя
Источник: https://baza.diplomsite.ru/previewfile/1998