KiberGen 82 Опубликовано 6 марта, 2022 (изменено) Доброй ночи нужен человек который сделает модуль Unitpay естественно не за спасибо или у кого уже есть готовый и модуль и обработчик пишите свои контакты в теме или в ЛС Изменено 6 марта, 2022 пользователем JoeyTribbiani Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
JoeyTribbiani 822 Опубликовано 6 марта, 2022 У них всегда был готовый модуль для l2, его уже нет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 11 минут назад, JoeyTribbiani сказал: У них всегда был готовый модуль для l2, его уже нет? там устарела цифровая подпись и тд что то с этим связанное вот ишим человека для решения Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
4eKucT 108 Опубликовано 6 марта, 2022 34 минуты назад, KiberGen сказал: там устарела цифровая подпись и тд что то с этим связанное вот ишим человека для решения Это тебе надо? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 29 минут назад, 4eKucT сказал: Это тебе надо? к сожалению нет как уже понял сам обработчик и в нем с цифровой подписью что то Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matey 229 Опубликовано 6 марта, 2022 (изменено) 1 час назад, KiberGen сказал: Доброй ночи нужен человек который сделает модуль Unitpay естественно не за спасибо или у кого уже есть готовый и модуль и обработчик пишите свои контакты в теме или в ЛС банер выкладывал php скрипт и модуль для юнипея с цифровой подписью Изменено 6 марта, 2022 пользователем Matey Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 4 минуты назад, Matey сказал: банер выкладывал php скрипт и модуль для юнипея с цифровой подписью по мимо этого есть еще обработчик платежей а это отдельная история Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matey 229 Опубликовано 6 марта, 2022 (изменено) 4 минуты назад, KiberGen сказал: по мимо этого есть еще обработчик платежей а это отдельная история от старого докрути и все тип топ будет, от банера отправляешь запрос, и обработчик выставляешь на старый скрипт ютитпея и все норм Изменено 6 марта, 2022 пользователем Matey Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 (изменено) 12 минут назад, Matey сказал: от старого докрути и все тип топ будет, от банера отправляешь запрос, и обработчик выставляешь на старый скрипт ютитпея и все норм вот на старом ответ приходит что проблема цифровой подписи а она там в обработчике тоже есть но нет знаний там поправить метод обработки почему и создал тему это даже орет если делать запрос с кабинета юнитов и оно лезит в обработчик Изменено 6 марта, 2022 пользователем KiberGen Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matey 229 Опубликовано 6 марта, 2022 2 минуты назад, KiberGen сказал: вот на старом ответ приходит что проблема цифровой подписи а она там в обработчике тоже есть но нет знаний там поправить метод обработки почему и создал тему это даже орет если делать запрос с кабинета юнитов и оно лезит в обработчик через скрипт банера формируешь подпись, а в настрйках у юнитпея ссылку ставишь на обработчик юнитпея старого скрипта 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 3 минуты назад, Matey сказал: через скрипт банера формируешь подпись, а в настрйках у юнитпея ссылку ставишь на обработчик юнитпея старого скрипта все верно так и делал но обработчик и шлет мне текст что не та цифровая подпись (и она отличается в старом обработчике и новом который есть у них на сайте а вот ума переделать не хватает) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
JoeyTribbiani 822 Опубликовано 6 марта, 2022 1 минуту назад, KiberGen сказал: все верно так и делал но обработчик и шлет мне текст что не та цифровая подпись (и она отличается в старом обработчике и новом который есть у них на сайте а вот ума переделать не хватает) Принципиально именно unitpay? Есть альтернатива, и не одна. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matey 229 Опубликовано 6 марта, 2022 (изменено) 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(); Изменено 7 марта, 2022 пользователем Matey 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 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(); вот это от души огромное спасибо заработало Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
JoeyTribbiani 822 Опубликовано 6 марта, 2022 @Matey Код под спойлер бы.. А то нарушаем! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KiberGen 82 Опубликовано 6 марта, 2022 55 минут назад, JoeyTribbiani сказал: Принципиально именно unitpay? Есть альтернатива, и не одна. ну привычней + все документы оформлены да и всегда нравится Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты