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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
104
13. Рейтинг систем управления базами данных (СУБД) 2016. Cоздание, ведение
и использование баз данных. URL:http://tagline.ru/database-management-
systems-rating/
14. Доменные службы Active Directory. URL:https://technet.microsoft.com/ru-
ru/windowsserver/dd448614.aspx
15. Модуль оплаты через Webmoney. Руднев. С.
URL:http://yiiframework.ru/forum/viewtopic.php?t=1023
16. Описание интерфейса сервиса Web Merchant Interface.
URL:https://merchant.webmoney.ru/conf/guide.asp
17. Требования к системе и информация об установке для Windows Server 2012
R2. URL:https://technet.microsoft.com/ru-ru/library/dn303418(v=ws.11).aspx
18. Что лучше: CMF, CMS или PHP Framework?
URL:http://bitte.net.ua/blog/chto-luchshe-cmf-cms-ili-php/
19. Microsoft SQL Server.
URL:https://ru.wikipedia.org/wiki/Microsoft_SQL_Server
20. MySQL. URL:https://ru.wikipedia.org/wiki/MySQL
21. PostgreSQL. URL:https://ru.wikipedia.org/wiki/PostgreSQL
22. Regular Expressions. URL:https://dev.mysql.com/doc/refman/5.7/en/regexp.html
23. Yii PHP Framework: Best for Web 2.0 Development.
URL:http://www.yiiframework.com/
105
ПРИЛОЖЕНИЕ А
Файл WmModule.php:
<?php
class WmModule extends CWebModule{
/**
* @autor Viacheslav Rudnev (RSol)
*/
public $orderClass;
public $basketClass;
public $productClass;
public $orderIdField;
public $orderSumField;
public $orderSuccessFunction;
public $orderSuccesUrl=false;
public $orderFailUrl=false;
public $orderMessage;
public $csrfToken=false;
public $defaultController="Wmoptions";
public function init(){
$this->setImport(array(
'wm.models.*',
'application.models.*',
'wm.components.*',
));
}
public function getOrderModel() {
return new $this->orderClass;
}
public function getBasketModel() {
return new $this->basketClass;
}
public function getProductModel() {
return new $this->productClass;
}
}
Файл WmoptionsController.php:
<?php
class WmoptionsController extends Controller{
public $defaultAction='update';
public function filters(){
return array(
'accessControl', // perform access control for CRUD operations
);
}
public function accessRules(){
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('result','success','fail','basket','toBasket','update','delete'),
'users'=>array('*'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('updateSettings'),
'roles'=>array(3),
),
array('deny', // deny all users
'users'=>array('*'),
),);
}
public function actionSuccess(){
$message=Yii::t('WmPayForm','Платеж успешно произведен');
$this->render('message',array(
'message'=>$message,
));
}
public function actionFail(){
$message=Yii::t('WmPayForm','Платеж не произведен');
$this->render('message',array(
'message'=>$message,
));
}
public function actionResult(){
if(isset($_POST['LMI_PREREQUEST']) && $_POST['LMI_PREREQUEST'] == 1){
$order=$this->module->getOrderModel()->findByPk(intval($_POST['LMI_PAYMENT_NO']));
106
if($order==NULL)
exit();
$options=Wmoptions::model()->findByPk(1);
if($_POST['LMI_PAYMENT_NO'] == $order->id&& $_POST['LMI_PAYEE_PURSE'] == $options-
>sum&& $_POST['LMI_PAYMENT_AMOUNT'] == $order->sum)
echo 'YES';
}else{
$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'];
$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'];
if($wmForm->validate()){
$order=$this->module->getOrderModel()->findByPk(intval($_POST['LMI_PAYMENT_NO']));
$order->updateByPk($order->id,array('status'=>2));
exit('OK');
}
}
}
public function loadModel($id){
$model=$this->module->getBasketModel()->findByPk($id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
public function actionBasket($id){
$model=$this->module->getBasketModel();
if(isset($_POST['delete'])&&isset($_POST['id']))
foreach ($_POST['id'] as $one)
$this->loadModel($one)->delete();
if(isset($_POST['delivery'])&&isset($_POST['id'])){
$this->buy(1);
Yii::app()->end();
}
if(isset($_POST['justBuy'])&&isset($_POST['id'])){
$this->buy(0);
Yii::app()->end();
}
$this->render('basket',array(
'model'=>$model,
));
}
public function buy($delivery){
$mes="";
$quantity=0;
$model=$this->module->getBasketModel();
$product=$this->module->getProductModel();
$sum=0.0;
foreach ($_POST['id'] as $one){
$bas=$model->findByPk($one);
$pr=$product->findByPk($bas->productID);
if($pr->quantity!=0){
if($pr->quantity<$bas->quantity){
$quantity=$pr->quantity;
$bas->updateByPk($bas-
>id,array('quantity'=>$quantity));
}else
if($pr->quantity!=0)
$quantity=$bas->quantity;
else{
$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,
107
)));
$c=0;
if ($b!=NULL)
foreach ($b as
$v){
$c+=$v-
>quantity;
$v-
>delete();
}
$quantity=$c;
}
$sum+=$pr->sum*$quantity;
$pr->updateByPk($pr->id,array('quantity'=>$pr-
>quantity-$quantity));
if($bas->orderID!=0){
$basket=new Basket;
$basket->orderID=$bas->orderID;
$basket->clientID=$bas->clientID;
$basket->productID=$bas->productID;
$basket->quantity=$bas->quantity;
$basket->save();
}
}
}
if($sum==0.0)
exit("Выбранных товаров на складе не осталось");
$ord=$this->module->getOrderModel();
if($delivery==1){
$options=Wmoptions::model()->findByPk(1);
$ord->sum=$sum+$options->deliveryCost;
$ord->delivery=1;
}else{
$ord->sum=$sum;
$ord->delivery=0;
}
$ord->created=time();
$ord->status=1;
$ord->save();
$connection=Yii::app()->db;
$sql='SELECT secret,purse,mode,deliveryCost FROM wmoptions WHERE
id=1';
$command=$connection->createCommand($sql);
$options=$command->queryRow();
$criteria=new CDbCriteria;
$criteria->compare('orderID',$ord->id);
$data=new CActiveDataProvider(Basket, array(
'criteria'=>$criteria,
));
$this->render('_wmPayForm',array(
'options'=>$options,
'order'=>$ord,
'model'=>$data,
'orderMessage'=>$this->module->orderMessage,
'csrfToken'=>$this->module->csrfToken,
));
}
public function actionDelete($id){
$basket=$this->loadModel($id);
if($basket->clientID==Yii::app()->user->getId())
$basket->delete();
}
public function actionUpdate($id){
if($basket->clientID==Yii::app()->user->getId())
exit("У Вас нет прав на выполнение данного запроса");
$model=$this->loadModel($id);
if($model->order->status!=2&&isset($_POST['Basket'])){
$model->attributes=$_POST['Basket'];
if($model->save()) $this-
>redirect(array('basket','id'=>Yii::app()->user->getId()));}
$this->render('update',array('model'=>$model,));}
public function actionToBasket($id){
$product=$this->module->getProductModel()->findByPk($id);
$model=new Basket;
if($product!=NULL)
$model->productID=$product->id;
else
throw new CHttpException(404,'Product not found');
$model->clientID=Yii::app()->user->getId();
108
$model->sum=$product->sum;
$model->quantity=1;
$model->save();
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] :
array('basket','id'=>Yii::app()->user->getId()));
}
public function actionUpdateSettings(){
$model=Wmoptions::model()->findByPk(1);
if(isset($_POST['Wmoptions'])){
$model->attributes=$_POST['Wmoptions'];
if($model->save()){
$message=Yii::t('WmPayForm','WM options successful
update');
$this->render('message',array(
'message'=>$message,
));
}
}else
$this->render('updateSettings',array(
'model'=>$model,
));
}
}
Файл _wmPayForm.php:
<h1>Внимание! Необходимо оплатить в течении 10-ти минут!</h1>
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'basket-grid',
'selectableRows'=>2,
'dataProvider'=>$model,
'columns'=>array(
'id'=>array(
'name'=>'id',
'headerHtmlOptions'=>array('width'=>30),
),
array(
'class'=>'CCheckBoxColumn',
'id'=>'id',
),
'productName'=>array(
'name'=>'productName',
'value'=>'$data->product->productName',
),
'quantity',
'sum'=>array(
'name'=>'sum',
'value'=>'$data->product->sum',
),
),
));
echo 'Оплата за заказ №'.$order->id.'<br/>'.
'На сумму '.$order->sum.'р<br/>';
if($order->delivery==1)
echo том числе доставка - '.$options['deliveryCost'].'р';
?>
<div class="form">
<?php
echo CHtml::beginForm('https://merchant.webmoney.ru/lmi/payment.asp'),
CHtml::hiddenField('LMI_PAYMENT_AMOUNT',floatval($order->sum)),
CHtml::hiddenField('LMI_PAYMENT_DESC_BASE64',($orderMessage)?
base64_encode($orderMessage):
base64_encode("оплата за заказ №".$order-
>id)),
CHtml::hiddenField('LMI_PAYMENT_NO',$order->id),
CHtml::hiddenField('LMI_PAYEE_PURSE',$options['purse']);
echo ($options['mode']==9)?'':CHtml::hiddenField('LMI_SIM_MODE',$options['mode']);
echo ($csrfToken)?CHtml::hiddenField('YII_CSRF_TOKEN',Yii::app()->request-
>csrfToken):'';
?>
<div class="row buttons">
<?php echo CHtml::submitButton(Yii::t('WmPayForm','Сформировать платеж'));
?>
</div>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->

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

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)