Привет, тостеры!
Нужна помощь, ибо уже сам сижу 3-й день и не могу понять, почему не происходит валидация данных после оплаты PM(PerfectMoney).
Движок написал на PHP OOP, движок MVC
Проект инвестиционный и при покупке тарифа есть форма при отправке перенаправляет на оплату и после подтверждения перенаправляет на страницу ошибки, то есть в профиль.
Вот код формы
<form action="https://perfectmoney.is/api/step1.asp" method="POST" target="_blank" id="no_ajax">
<div class="control-group form-group">
<div class="controls">
<label>Название тарифа:</label>
<input type="text" class="form-control" value="<?php echo $tariff['title']; ?>" disabled>
</div>
</div>
<div class="control-group form-group">
<div class="controls">
<label>Период инвестиции:</label>
<input type="text" class="form-control" value="<?php echo $tariff['hour']; ?> ч." disabled>
</div>
</div>
<div class="control-group form-group">
<div class="controls">
<label>Процентная ставка:</label>
<input type="text" class="form-control" value="<?php echo $tariff['percent']; ?> %" disabled>
</div>
</div>
<input type="hidden" name="PAYEE_ACCOUNT" value="КОШЕЛЕК">
<input type="hidden" name="PAYEE_NAME" value="Оплата тарифа # <?php echo $this->route['id']; ?>">
<div class="control-group form-group">
<div class="controls">
<label>Сумма:</label>
<input type="number" min="<?php echo $tariff['min']; ?>" class="form-control" value="<?php echo $tariff['min']; ?>" name="PAYMENT_AMOUNT" readonly>
</div>
</div>
<input type="hidden" name="PAYMENT_UNITS" value="USD">
<input type="hidden" name="PAYMENT_ID" value="<?php echo $this->route['id'].','.$_SESSION['account']['id']; ?>">
<input type="hidden" name="STATUS_URL" value="<?php echo $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST']; ?>/merchant/perfectmoney/">
<input type="hidden" name="PAYMENT_URL" value="<?php echo $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST']; ?>/account/profile">
<input type="hidden" name="PAYMENT_URL_METHOD" value="LINK">
<input type="hidden" name="NOPAYMENT_URL" value="<?php echo $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST']; ?>/account/profile">
<input type="hidden" name="NOPAYMENT_URL_METHOD" value="LINK">
<button type="sumbit" name="submit" class="btn btn-primary">Перейти к оплате</button>
</form>
Есть страница статуса, при заходе на пустую выдает 404 и это понятно...
Код мерчант котроллера:
<?php
namespace application\controllers;
use application\core\Controller;
class MerchantController extends Controller {
public function perfectmoneyAction() {
if (empty($_POST)) {
$this->view->errorCode(404);
}
$data = $this->model->validatePerfectMoney($_POST, $this->tariffs);
if (!$data) {
$this->view->errorCode(403);
}
$this->model->createTariff($data, $this->tariffs[$data['tid']]);
}
}
Отправляет нас в модели и смотрит функции обработки на модель контроллера:
<?php
namespace application\models;
use application\core\Model;
class Merchant extends Model {
public function validatePerfectMoney($post, $tariff) {
$seccode = strtoupper(md5('секретный код'));
$params = $_POST['PAYMENT_ID'].':'.
$_POST['PAYEE_ACCOUNT'].':'.
$_POST['PAYMENT_AMOUNT'].':'.
$_POST['PAYMENT_UNITS'].':'.
$_POST['PAYMENT_BATCH_NUM'].':'.
$_POST['PAYER_ACCOUNT'].':'.
$seccode.':'.
$_POST['TIMESTAMPGMT'];
list($tid, $uid) = explode(',', $_POST['PAYMENT_ID']);
$tid += 0;
$uid += 0;
$amount = $_POST['PAYMENT_AMOUNT'] + 0;
if (strtoupper(md5($seccode)) != $_POST['V2_HASH']) {
return false;
}
if ($_POST['PAYMENT_UNITS'] != 'USD') {
return false;
}
elseif (!isset($tariff[$tid])) {
return false;
}
elseif ($amount > $tariff[$tid]['max'] or $amount < $tariff[$tid]['min']) {
return false;
}
return [
'tid' => $tid,
'uid' => $uid,
'amount' => $amount,
];
}
public function createTariff($data, $tarif) {
$params = [
'id' => '',
'uid' => $data['uid'],
'sumIn' => round($data['amount'], 2),
'sumOut' => round($data['amount'] + (($data['amount'] * $tarif['percent']) / 100), 2),
'percent' => $tarif['percent'],
'unixTimeStart' => time(),
'unixTimeFinish' => strtotime('+ '.$tarif['hour'].' hours'),
];
$this->db->query('INSERT INTO tariffs VALUES (:id, :uid, :sumIn, :sumOut, :percent, :unixTimeStart, :unixTimeFinish)', $params);
$params = [
'id' => '',
'uid' => $data['uid'],
'unixTime' => time(),
'description' => 'Инвестиция, номер вклада # '.$this->db->lastInsertId(),
];
$this->db->query('INSERT INTO history VALUES (:id, :uid, :unixTime, :description)', $params);
}
}
Все в принципе работает, добавление в базу и т.д. Скрипт не может получить почему-то данные отправленные формой. Помогите пожалуйста)))))