Файл: mg-core/controllers/payment.php
Строк: 143
<?php
class Controllers_Payment extends BaseController {
public $msg = " Наши менеджеры свяжутся с Вами!";
function __construct() {
$this->msg = " Наши менеджеры свяжутся с Вами!";
$paymentID = URL::getQueryParametr('id');
$paymentStatus = URL::getQueryParametr('pay');
$_POST['url'] = URL::getUrl();
$modelOrder = new Models_Order();
switch ($paymentID) {
case 1: //webmoney
$msg = $this->webmoney($paymentID, $paymentStatus);
break;
case 5: //robokassa
$msg = $this->robokassa($paymentID, $paymentStatus);
break;
case 6: //qiwi
$msg = $this->qiwi($paymentID, $paymentStatus);
break;
case 8: //interkassa
$msg = $this->interkassa($paymentID, $paymentStatus);
break;
case 2: //ЯндексДеньги
$msg = $this->yandex($paymentID, $paymentStatus);
break;
}
$this->data = array(
'payment' => $paymentID, //id способа оплаты
'status' => $paymentStatus, //статус ответа платежной системы (result, success, fail)
'message' => $msg, //статус ответа платежной системы (result, success, fail)
);
}
/**
* Действие при оплате заказа
* Обновляет статус заказа на Оплачен, отправляет письма оповещения, генерирует хук.
*/
public function actionWhenPayment($args) {
$result = true;
ob_start();
$order = new Models_Order();
if(method_exists($order,'updateOrder')){
$order->updateOrder(array('id' => $args['paymentOrderId'], 'status_id' => 2));
}
if(method_exists($order,'sendMailOfPayed')){
$order->sendMailOfPayed($args['paymentOrderId'], $args['paymentAmount'], $args['paymentID']);
}
if(method_exists($order,'sendLinkForElectro')){
$order->sendLinkForElectro($args['paymentOrderId']);
}
$content = ob_get_contents();
ob_end_clean();
// если в ходе работы метода допущен вывод контента, то записать в лог ошибку.
if(!empty($content)){
MG::loger('ERROR PAYMENT: '.$content);
}
return MG::createHook(__CLASS__."_".__FUNCTION__, $result, $args);
}
/**
* проверка платежа через WebMoney
*/
public function webmoney($paymentID, $paymentStatus) {
$msg = 'Оплата не удалась';
return $msg;
}
/**
* проверка платежа через ROBOKASSA
*/
public function robokassa($paymentID, $paymentStatus) {
$msg = 'Оплата не удалась';
}
/**
* проверка платежа через QIWI
*/
public function qiwi($paymentID, $paymentStatus) {
if ('success' == $paymentStatus) {
$msg = 'Вы успешно оплатили заказ №'.$_GET['order'];
$msg .= $this->msg;
} elseif ('result' == $paymentStatus && isset($_POST)) {
$i = file_get_contents('php://input');
$l = array('/<login>(.*)?</login>/', '/<password>(.*)?</password>/');
$s = array('/<txn>(.*)?</txn>/', '/<status>(.*)?</status>/');
preg_match($l[0], $i, $m1);
preg_match($l[1], $i, $m2);
preg_match($s[0], $i, $m3);
preg_match($s[1], $i, $m4);
$order = new Models_Order();
$paymentOrderId = $m3[1];
$statusQiwi = $m4[1];
if (!empty($paymentOrderId)) {
$orderInfo = $order->getOrder(" id = ".DB::quote($paymentOrderId, 1));
} else {
$orderInfo = NULL;
echo "Ошибка обработки";
exit();
}
$paymentInfo = $order->getParamArray($paymentID, $paymentOrderId, $orderInfo[$paymentOrderId]['summ']);
$password = $paymentInfo[1]['value'];
$parseLog .=
' status='.$statusQiwi.
' paymentOrderId='.$paymentOrderId.
' paymentID='.$paymentID.
' summ='.$orderInfo[$paymentOrderId]['summ'];
// если заказа не существует то отправляем код 150
if (empty($orderInfo)) {
$resultCode = 300;
} else {
$hash = strtoupper(md5($m3[1].strtoupper(md5($password))));
if ($hash !== $m2[1]) { //сравнение хешей
$resultCode = 150;
} else {
if ($statusQiwi == 60) {// заказ оплачен
$this->actionWhenPayment(
array(
'paymentOrderId' => $paymentOrderId,
'paymentAmount' => $orderInfo[$paymentOrderId]['summ'],
'paymentID' => $paymentID
)
);
}
$resultCode = 0; // все прошло успешно оправляем "0"
}
}
header('content-type: text/xml; charset=UTF-8');
echo '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://client.ishop.mw.ru/"><SOAP-ENV:Body><ns1:updateBillResponse><updateBillResult>'.$resultCode.'</updateBillResult></ns1:updateBillResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>';
exit;
}
return $msg;
}
/**
* проверка платежа через Interkassa
*/
public function interkassa($paymentID, $paymentStatus) {
$msg = 'Оплата не удалась';
return $msg;
}
/**
* проверка платежа через Yandex
*/
public function yandex($paymentID, $paymentStatus) {
$msg = 'Оплата не удалась';
return $msg;
}
}