Перейти к содержанию
Авторизация  
KiberGen

модуль Unitpay

Рекомендуемые сообщения

Доброй ночи   нужен человек который сделает модуль Unitpay  естественно не за спасибо или у кого уже есть готовый и модуль и обработчик

пишите свои контакты в теме или в ЛС

Изменено пользователем JoeyTribbiani

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, JoeyTribbiani сказал:

У них всегда был готовый модуль для l2, его уже нет?

там устарела цифровая подпись и тд что то с этим связанное вот ишим человека для решения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, KiberGen сказал:

там устарела цифровая подпись и тд что то с этим связанное вот ишим человека для решения

Это тебе надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
29 минут назад, 4eKucT сказал:

к сожалению нет  как уже понял сам обработчик и в нем с цифровой подписью что то

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, KiberGen сказал:

Доброй ночи   нужен человек который сделает модуль Unitpay  естественно не за спасибо или у кого уже есть готовый и модуль и обработчик

пишите свои контакты в теме или в ЛС

банер выкладывал php скрипт и модуль для юнипея с цифровой подписью

 

Изменено пользователем Matey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, Matey сказал:

банер выкладывал php скрипт и модуль для юнипея с цифровой подписью

 

по мимо этого есть еще обработчик платежей а это отдельная история

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, KiberGen сказал:

по мимо этого есть еще обработчик платежей а это отдельная история

от старого докрути и все тип топ будет, от банера отправляешь запрос, и обработчик выставляешь на старый скрипт ютитпея и все норм 

Изменено пользователем Matey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, Matey сказал:

от старого докрути и все тип топ будет, от банера отправляешь запрос, и обработчик выставляешь на старый скрипт ютитпея и все норм 

вот на старом ответ приходит что проблема цифровой подписи  а она там в обработчике тоже есть но нет знаний там поправить  метод обработки почему и создал тему

это даже орет если делать запрос с кабинета юнитов и оно лезит в обработчик

Изменено пользователем KiberGen

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, KiberGen сказал:

вот на старом ответ приходит что проблема цифровой подписи  а она там в обработчике тоже есть но нет знаний там поправить  метод обработки почему и создал тему

это даже орет если делать запрос с кабинета юнитов и оно лезит в обработчик

через скрипт банера формируешь подпись, а в настрйках у юнитпея ссылку ставишь на обработчик юнитпея старого скрипта

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, Matey сказал:

через скрипт банера формируешь подпись, а в настрйках у юнитпея ссылку ставишь на обработчик юнитпея старого скрипта

все верно так и делал  но обработчик и шлет мне текст что не та цифровая подпись (и она отличается в старом обработчике и новом который есть у них на сайте а вот ума переделать не хватает)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, KiberGen сказал:

все верно так и делал  но обработчик и шлет мне текст что не та цифровая подпись (и она отличается в старом обработчике и новом который есть у них на сайте а вот ума переделать не хватает)

Принципиально именно unitpay?
Есть альтернатива, и не одна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, KiberGen сказал:

все верно так и делал  но обработчик и шлет мне текст что не та цифровая подпись (и она отличается в старом обработчике и новом который есть у них на сайте а вот ума переделать не хватает)

Спойлер

<?php
error_reporting(0);
include_once 'lib/ConfigWritter.php';
include_once 'lib/Model.php';


class Handler
{
    function process()
    {
        try {
            if (empty($_GET)) {
                header('Content-Type: text/html; charset=utf-8');
                die ('Адрес данного скрипта нужно прописать в поле "URL скрипта обработчика" в настройках вашего проекта');
            }
            if (file_exists('install.php')) {
                throw new Exception('Удалите файл install.php для корректной работы скрипта.');
            }
            $request = $_GET;
            if (empty($request['method']) || empty($request['params']) || !is_array($request['params'])) {
                throw new Exception("Некорректный запрос");
            }

            $method = $request['method'];
            $params = $request['params'];

            if ($params['signature'] != $this->getSha256SignatureByMethodAndParams(
                    $method,
                    $params,
                    ConfigWritter::getInstance()->getParameter('SECRET_KEY'))) {
                throw new Exception("Некорректная цифровая подпись");
            }
            if (!isset($params['unitpayId']) || !isset($params['sum']) || !isset($params['account'])) {
                throw new Exception('Отсутствуют обязательные параметры платежа');
            }

            switch ($method) {
                // Проверяем что можем оказать абоненту услугу
                case 'check':
                    $this->check($params);
                    $this->responseSuccess("Успех");
                    break;
                // Оказываем услугу абоненту
                case 'pay':
                    $message = $this->pay($params);
                    $this->responseSuccess($message);
                    break;
                // Отменяем платеж
                case 'error':
                    $message = $this->error($params);
                    $this->responseSuccess($message);
                    break;
                default:
                    $this->responseError("Некорректный метод, поддерживаются методы: check, pay и error");
            }

        } catch (Exception $e) {
            $this->responseError($e->getMessage());
        }
    }
    function check($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        if ($model->getPaymentByUnitpayId($params['unitpayId'])) {
            // Платеж уже создан в БД
            return true;
        }
        $char = $model->getChar($params['account']);
        if (!$char) {
            throw new Exception('Персонаж ' . $params['account'] . ' не найден');
        }
        $itemsCount = floor($params['sum'] / $config->getParameter('ITEM_PRICE'));
        if ($itemsCount <= 0) {
            throw new Exception('Суммы ' . $params['sum'] . ' руб. не достаточно для оплаты товара ' .
                'стоимостью ' . $config->getParameter('ITEM_PRICE') . ' руб.');
        }
        if (!empty($char->charId)) {
            $charId = $char->charId;
        } elseif (!empty($char->obj_Id)) {
            $charId = $char->obj_Id;
        } else {
            throw new Exception('Персонаж найден, однако не удается получить его ID');
        }

        if (!$model->createPayment(
            $params['unitpayId'], $charId, $params['sum'], $itemsCount)
        ) {
            throw new Exception('Не удается создать платеж в БД. Проверьте права на запись');
        }

        return true;
    }

    function pay($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment) {
            $this->check($params);
        }

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment) {
            throw new Exception('Не удается найти платеж');
        }

        if ($payment->status == 1) {
            return 'Платеж уже проведен';
        }

        if (!$model->confirmPaymentByUnitpayId($params['unitpayId'])) {
            throw new Exception('Не удается подтвердить платеж в БД. Проверьте права на запись');
        }

        if (!$model->addItemToChar($payment->account, $config->getParameter('ITEM_ID'), $payment->itemsCount)) {
            throw new Exception('Не удалось начислить персонажу требуемые вещи');
        }

        return 'Платеж успешно выполнен';
    }

    function error($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment)
        {
            throw new Exception('Не удается найти платеж');
        }

        if ($payment->status == 2)
        {
            throw new Exception('Платеж уже отменен');
        }

        if (!$model->cancelPaymentByUnitpayId($params['unitpayId']))
        {
            throw new Exception('Не удалось отменить платеж в БД. Проверьте права на запись');
        }

        if ($payment->status == 1)
        {
            $model->removeItemFromChar($payment->account, $config->getParameter('ITEM_ID'), $payment->itemsCount);
        }

        return 'Платеж успешно отменен';
    }

    /**
     * Формирование цифровой подписи для массива параметров
     *
     * @param array $params
     * @param string $secretKey
     * @return string
     */
    function md5sign($params, $secretKey) {
        ksort($params);
        if (isset($params['sign'])) {
            unset($params['sign']);
        }

        return md5(join(null, $params).$secretKey);
    }

    /**
     * @param $method
     * @param array $params
     * @param $secretKey
     * @return string
     */
    function getSha256SignatureByMethodAndParams($method, array $params, $secretKey)
    {
        $delimiter = '{up}';
        ksort($params);
        unset($params['sign']);
        unset($params['signature']);

        return hash('sha256', $method.$delimiter.join($delimiter, $params).$delimiter.$secretKey);
    }

    /**
     * Ошибочный ответ партнера
     *
     * @param $message
     */
    function responseError($message) {
        $error = array(
            "jsonrpc" => "2.0",
            "error" => array(
                "code" => -32000,
                "message" => $message
            ),
            'id' => 1
        );
        echo json_encode($error); exit();
    }

    /**
     * Успешный ответ партнера
     *
     * @param $message
     */
    function responseSuccess($message) {
        $success = array(
            "jsonrpc" => "2.0",
            "result" => array(
                "message" => $message
            ),
            'id' => 1
        );
        echo json_encode($success); exit();
    }
}

$handler = new Handler();
// запускаем обработчик
$handler->process();

 

Изменено пользователем Matey
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, Matey сказал:

<?php
error_reporting(0);
include_once 'lib/ConfigWritter.php';
include_once 'lib/Model.php';


class Handler
{
    function process()
    {
        try {
            if (empty($_GET)) {
                header('Content-Type: text/html; charset=utf-8');
                die ('Адрес данного скрипта нужно прописать в поле "URL скрипта обработчика" в настройках вашего проекта');
            }
            if (file_exists('install.php')) {
                throw new Exception('Удалите файл install.php для корректной работы скрипта.');
            }
            $request = $_GET;
            if (empty($request['method']) || empty($request['params']) || !is_array($request['params'])) {
                throw new Exception("Некорректный запрос");
            }

            $method = $request['method'];
            $params = $request['params'];

            if ($params['signature'] != $this->getSha256SignatureByMethodAndParams(
                    $method,
                    $params,
                    ConfigWritter::getInstance()->getParameter('SECRET_KEY'))) {
                throw new Exception("Некорректная цифровая подпись");
            }
            if (!isset($params['unitpayId']) || !isset($params['sum']) || !isset($params['account'])) {
                throw new Exception('Отсутствуют обязательные параметры платежа');
            }

            switch ($method) {
                // Проверяем что можем оказать абоненту услугу
                case 'check':
                    $this->check($params);
                    $this->responseSuccess("Успех");
                    break;
                // Оказываем услугу абоненту
                case 'pay':
                    $message = $this->pay($params);
                    $this->responseSuccess($message);
                    break;
                // Отменяем платеж
                case 'error':
                    $message = $this->error($params);
                    $this->responseSuccess($message);
                    break;
                default:
                    $this->responseError("Некорректный метод, поддерживаются методы: check, pay и error");
            }

        } catch (Exception $e) {
            $this->responseError($e->getMessage());
        }
    }
    function check($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        if ($model->getPaymentByUnitpayId($params['unitpayId'])) {
            // Платеж уже создан в БД
            return true;
        }
        $char = $model->getChar($params['account']);
        if (!$char) {
            throw new Exception('Персонаж ' . $params['account'] . ' не найден');
        }
        $itemsCount = floor($params['sum'] / $config->getParameter('ITEM_PRICE'));
        if ($itemsCount <= 0) {
            throw new Exception('Суммы ' . $params['sum'] . ' руб. не достаточно для оплаты товара ' .
                'стоимостью ' . $config->getParameter('ITEM_PRICE') . ' руб.');
        }
        if (!empty($char->charId)) {
            $charId = $char->charId;
        } elseif (!empty($char->obj_Id)) {
            $charId = $char->obj_Id;
        } else {
            throw new Exception('Персонаж найден, однако не удается получить его ID');
        }

        if (!$model->createPayment(
            $params['unitpayId'], $charId, $params['sum'], $itemsCount)
        ) {
            throw new Exception('Не удается создать платеж в БД. Проверьте права на запись');
        }

        return true;
    }

    function pay($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment) {
            $this->check($params);
        }

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment) {
            throw new Exception('Не удается найти платеж');
        }

        if ($payment->status == 1) {
            return 'Платеж уже проведен';
        }

        if (!$model->confirmPaymentByUnitpayId($params['unitpayId'])) {
            throw new Exception('Не удается подтвердить платеж в БД. Проверьте права на запись');
        }

        if (!$model->addItemToChar($payment->account, $config->getParameter('ITEM_ID'), $payment->itemsCount)) {
            throw new Exception('Не удалось начислить персонажу требуемые вещи');
        }

        return 'Платеж успешно выполнен';
    }

    function error($params)
    {
        $model = Model::getInstance();
        $config = ConfigWritter::getInstance();

        $payment = $model->getPaymentByUnitpayId($params['unitpayId']);
        if (!$payment)
        {
            throw new Exception('Не удается найти платеж');
        }

        if ($payment->status == 2)
        {
            throw new Exception('Платеж уже отменен');
        }

        if (!$model->cancelPaymentByUnitpayId($params['unitpayId']))
        {
            throw new Exception('Не удалось отменить платеж в БД. Проверьте права на запись');
        }

        if ($payment->status == 1)
        {
            $model->removeItemFromChar($payment->account, $config->getParameter('ITEM_ID'), $payment->itemsCount);
        }

        return 'Платеж успешно отменен';
    }

    /**
     * Формирование цифровой подписи для массива параметров
     *
     * @param array $params
     * @param string $secretKey
     * @return string
     */
    function md5sign($params, $secretKey) {
        ksort($params);
        if (isset($params['sign'])) {
            unset($params['sign']);
        }

        return md5(join(null, $params).$secretKey);
    }

    /**
     * @param $method
     * @param array $params
     * @param $secretKey
     * @return string
     */
    function getSha256SignatureByMethodAndParams($method, array $params, $secretKey)
    {
        $delimiter = '{up}';
        ksort($params);
        unset($params['sign']);
        unset($params['signature']);

        return hash('sha256', $method.$delimiter.join($delimiter, $params).$delimiter.$secretKey);
    }

    /**
     * Ошибочный ответ партнера
     *
     * @param $message
     */
    function responseError($message) {
        $error = array(
            "jsonrpc" => "2.0",
            "error" => array(
                "code" => -32000,
                "message" => $message
            ),
            'id' => 1
        );
        echo json_encode($error); exit();
    }

    /**
     * Успешный ответ партнера
     *
     * @param $message
     */
    function responseSuccess($message) {
        $success = array(
            "jsonrpc" => "2.0",
            "result" => array(
                "message" => $message
            ),
            'id' => 1
        );
        echo json_encode($success); exit();
    }
}

$handler = new Handler();
// запускаем обработчик
$handler->process();

 

вот  это от души огромное спасибо  заработало

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
55 минут назад, JoeyTribbiani сказал:

Принципиально именно unitpay?
Есть альтернатива, и не одна.

ну привычней + все документы оформлены да и всегда нравится

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...