@nagge101

Почему не происходит валидация при оплате через PM?

Привет, тостеры!
Нужна помощь, ибо уже сам сижу 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);
	}

}


Все в принципе работает, добавление в базу и т.д. Скрипт не может получить почему-то данные отправленные формой. Помогите пожалуйста)))))
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы