За последние 24 часа нас посетил 22061 программист и 1100 роботов. Сейчас ищут 846 программистов ...

Unitpay - sha256

Тема в разделе "Сделайте за меня", создана пользователем TOPMMO, 23 ноя 2018.

  1. TOPMMO

    TOPMMO Активный пользователь

    С нами с:
    29 июн 2015
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте ! Помогите решить вопрос перехода с 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:
    1. <?php
    2. class DefaultController extends FrontendBaseController
    3. {
    4.     /**
    5.      * Обработка ответа от Unitpay
    6.      */
    7.     public function actionResult()
    8.     {
    9.         if(isset($_REQUEST['method']) && isset($_REQUEST['params']) && is_array($_REQUEST['params']))
    10.         {
    11.             $method = $_REQUEST['method'];
    12.             $params = $_REQUEST['params'];
    13.             if(!isset($params['sign']) || ($params['sign'] != $this->getMd5Sign($params)))
    14.             {
    15.                 $this->responseError('Bad sign');
    16.             }
    17.             if($method == 'check')
    18.             {
    19.                 // Проверяем что можем оказать услугу
    20.                 $this->responseSuccess('ok', $params['account']);
    21.             }
    22.             elseif($method == 'error')
    23.             {
    24.                 // Ошибка оплаты
    25.             }
    26.             elseif($method == 'pay')
    27.             {
    28.                 // Оплата
    29.                 $transactionModel = Transactions::model()->findByPk($params['account']);
    30.                 if($transactionModel === NULL)
    31.                 {
    32.                     $this->responseError('Transaction not found', $params['account']);
    33.                 }
    34.                 if($transactionModel->status == 1)
    35.                 {
    36.                     $this->responseError('The transaction has already processed', $params['account']);
    37.                 }
    38.                 $transactionModel->onAfterSave = array($this, 'orderComplete');
    39.                 $transactionModel->status = 1;
    40.                 $transactionModel->profit = $params['profit'];
    41.                 $transactionModel->params = $params;
    42.                 $transactionModel->save(FALSE, array('status', 'profit', 'params', 'updated_at'));
    43.             }
    44.         }
    45.         $this->redirect(array('/index/default/index'));
    46.     }
    47.     private function getMd5Sign(array $params)
    48.     {
    49.         ksort($params);
    50.         unset($params['sign']);
    51.         return md5(join(null, $params) . app()->params['unitpay']['secret_key']);
    52.     }
    53.     private function responseSuccess($str, $id = 1)
    54.     {
    55.         echo json_encode(array(
    56.             "jsonrpc" => "2.0",
    57.             "result" => array(
    58.                 "message" => $str
    59.             ),
    60.             'id' => $id
    61.         ));
    62.         app()->end();
    63.     }
    64.     private function responseError($str, $id = 1)
    65.     {
    66.         echo json_encode(array(
    67.             "jsonrpc" => "2.0",
    68.             "error" => array(
    69.                 "code" => -32000,
    70.                 "message" => $str
    71.             ),
    72.             'id' => $id
    73.         ));
    74.         app()->end();
    75.     }
    76.     public function actionError()
    77.     {
    78.         $this->render('//deposit/fail');
    79.     }
    80.     public function actionSuccess()
    81.     {
    82.         $this->render('//deposit/success');
    83.     }
    84.     /**
    85.      * Зачисление всяких бонусов после успешной оплаты
    86.      *
    87.      * @param CEvent $event
    88.      */
    89.     public function orderComplete(CEvent $event)
    90.     {
    91.         /**
    92.          * @var Transactions $transactionModel
    93.          * @var Servers $serverModel
    94.          */
    95.         $transactionModel = $event->sender;
    96.         $params           = unserialize($transactionModel->form_params);
    97.         $serverModel      = Servers::model()->findByPk($transactionModel->server_id);
    98.         if($serverModel === NULL)
    99.         {
    100.             Yii::log("Сервер на который надо было закинуть бонус не найден\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR);
    101.             $this->responseError('Transaction error', $transactionModel->getPrimaryKey());
    102.         }
    103.         // Покупка VIP
    104.         if($transactionModel->type == 'vip')
    105.         {
    106.             // Дата в БД есть и время VIP ещё не истекло, добавляю время
    107.             if($serverModel->vip_date_end && strtotime($serverModel->vip_date_end) > time())
    108.             {
    109.                 $dateEnd = strtotime('+' . $params['days'] . 'days', strtotime($serverModel->vip_date_end));
    110.             }
    111.             else
    112.             {
    113.                 $dateEnd = strtotime('+' . $params['days'] . 'days');
    114.             }
    115.             $serverModel->vip_date_end = date('Y-m-d H:i:s', $dateEnd);
    116.             if($serverModel->save(FALSE, array('vip_date_end', 'updated_at')))
    117.             {
    118.                 $this->responseSuccess('ok', $transactionModel->getPrimaryKey());
    119.             }
    120.             Yii::log("Не удалось обновить данные у сервере в БД\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR);
    121.             $this->responseError('Unable to create payment database', $transactionModel->getPrimaryKey());
    122.         }
    123.         // Покупка 1stVIP
    124.         elseif($transactionModel->type == '1stvip')
    125.         {
    126.             // Дата в БД есть и время VIP ещё не истекло, добавляю время
    127.             if($serverModel->first_place_date_end && strtotime($serverModel->first_place_date_end) > time())
    128.             {
    129.                 $dateEnd = strtotime('+' . $params['days'] . 'days', strtotime($serverModel->first_place_date_end));
    130.             }
    131.             else
    132.             {
    133.                 $dateEnd = strtotime('+' . $params['days'] . 'days');
    134.             }
    135.             $serverModel->first_place_date_end = date('Y-m-d H:i:s', $dateEnd);
    136.             $serverModel->first_place_color    = $params['color'];
    137.             if($serverModel->save(FALSE, array('first_place_date_end', 'first_place_color', 'updated_at')))
    138.             {
    139.                 $this->responseSuccess('ok', $transactionModel->getPrimaryKey());
    140.             }
    141.             Yii::log("Не удалось обновить данные у сервере в БД\nID транзакции: " . $transactionModel->getPrimaryKey(), CLogger::LEVEL_ERROR);
    142.             $this->responseError('Unable to create payment database', $transactionModel->getPrimaryKey());
    143.         }
    144.         // Поднятие сервере вверх
    145.         elseif($transactionModel->type == 'serverUp')
    146.         {
    147.             // Накидываю балы серверу
    148.             db()->createCommand("UPDATE {{servers}} SET server_up_score = server_up_score + :server_up_score WHERE id = :id LIMIT 1")
    149.                 ->execute(array(
    150.                     'server_up_score' => $transactionModel->sum,
    151.                     'id' => $transactionModel->server_id,
    152.                 ));
    153.             $this->responseSuccess('ok', $transactionModel->getPrimaryKey());
    154.         }
    155.         elseif($transactionModel->type == 'premium')
    156.         {
    157.             // Покупка premium
    158.         }
    159.     }
    160. }