Здравствуйте ! Помогите решить вопрос перехода с md5 на sha256. вот как было Спойлер: Было function getSignature($params, $secretKey) { ksort($params); unset($params['sign']); return md5(join(null, $params) . $secretKey); } стало Спойлер: Стало function getSignature($method, $params, $secretKey) { ksort($params); unset($params['sign']); unset($params['signature']); array_push($params, $secretKey); array_unshift($params, $method); return hash('sha256', join('{up}', $params)); } вот сам текст, что только не делал, не получается перейти на новый. Пожалуйста помогите. Спойлер: Что нужно переделать PHP: <?php class DefaultController extends FrontendBaseController { /** * Обработка ответа от Unitpay */ public function actionResult() { if(isset($_REQUEST['method']) && isset($_REQUEST['params']) && is_array($_REQUEST['params'])) { $method = $_REQUEST['method']; $params = $_REQUEST['params']; if(!isset($params['sign']) || ($params['sign'] != $this->getMd5Sign($params))) { $this->responseError('Bad sign'); } if($method == 'check') { // Проверяем что можем оказать услугу $this->responseSuccess('ok', $params['account']); } elseif($method == 'error') { // Ошибка оплаты } elseif($method == 'pay') { // Оплата $transactionModel = Transactions::model()->findByPk($params['account']); if($transactionModel === NULL) { $this->responseError('Transaction not found', $params['account']); } if($transactionModel->status == 1) { $this->responseError('The transaction has already processed', $params['account']); } $transactionModel->onAfterSave = array($this, 'orderComplete'); $transactionModel->status = 1; $transactionModel->profit = $params['profit']; $transactionModel->params = $params; $transactionModel->save(FALSE, array('status', 'profit', 'params', 'updated_at')); } } $this->redirect(array('/index/default/index')); } private function getMd5Sign(array $params) { ksort($params); unset($params['sign']); return md5(join(null, $params) . app()->params['unitpay']['secret_key']); } private function responseSuccess($str, $id = 1) { echo json_encode(array( "jsonrpc" => "2.0", "result" => array( "message" => $str ), 'id' => $id )); app()->end(); } private function responseError($str, $id = 1) { echo json_encode(array( "jsonrpc" => "2.0", "error" => array( "code" => -32000, "message" => $str ), 'id' => $id )); app()->end(); } public function actionError() { $this->render('//deposit/fail'); } public function actionSuccess() { $this->render('//deposit/success'); } /** * Зачисление всяких бонусов после успешной оплаты * * @param CEvent $event */ public function orderComplete(CEvent $event) { /** * @var Transactions $transactionModel * @var Servers $serverModel */ $transactionModel = $event->sender; $params = unserialize($transactionModel->form_params); $serverModel = Servers::model()->findByPk($transactionModel->server_id); if($serverModel === NULL) { Yii::log("Сервер на который надо было закинуть бонус не найден\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR); $this->responseError('Transaction error', $transactionModel->getPrimaryKey()); } // Покупка VIP if($transactionModel->type == 'vip') { // Дата в БД есть и время VIP ещё не истекло, добавляю время if($serverModel->vip_date_end && strtotime($serverModel->vip_date_end) > time()) { $dateEnd = strtotime('+' . $params['days'] . 'days', strtotime($serverModel->vip_date_end)); } else { $dateEnd = strtotime('+' . $params['days'] . 'days'); } $serverModel->vip_date_end = date('Y-m-d H:i:s', $dateEnd); if($serverModel->save(FALSE, array('vip_date_end', 'updated_at'))) { $this->responseSuccess('ok', $transactionModel->getPrimaryKey()); } Yii::log("Не удалось обновить данные у сервере в БД\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR); $this->responseError('Unable to create payment database', $transactionModel->getPrimaryKey()); } // Покупка 1stVIP elseif($transactionModel->type == '1stvip') { // Дата в БД есть и время VIP ещё не истекло, добавляю время if($serverModel->first_place_date_end && strtotime($serverModel->first_place_date_end) > time()) { $dateEnd = strtotime('+' . $params['days'] . 'days', strtotime($serverModel->first_place_date_end)); } else { $dateEnd = strtotime('+' . $params['days'] . 'days'); } $serverModel->first_place_date_end = date('Y-m-d H:i:s', $dateEnd); $serverModel->first_place_color = $params['color']; if($serverModel->save(FALSE, array('first_place_date_end', 'first_place_color', 'updated_at'))) { $this->responseSuccess('ok', $transactionModel->getPrimaryKey()); } Yii::log("Не удалось обновить данные у сервере в БД\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR); $this->responseError('Unable to create payment database', $transactionModel->getPrimaryKey()); } // Поднятие сервере вверх elseif($transactionModel->type == 'serverUp') { // Накидываю балы серверу db()->createCommand("UPDATE {{servers}} SET server_up_score = server_up_score + :server_up_score WHERE id = :id LIMIT 1") ->execute(array( 'server_up_score' => $transactionModel->sum, 'id' => $transactionModel->server_id, )); $this->responseSuccess('ok', $transactionModel->getPrimaryKey()); } elseif($transactionModel->type == 'premium') { // Покупка premium } } }