Вход Регистрация
Файл: public_html/core/payment/lib/UnitPay.php
Строк: 116
<?php

class UnitPay
{
    private 
$event;

    public function 
__construct(UnitPayEvent $event)
    {
        
$this->event $event;
    }

    public function 
getResult()
    {
        
$request $_GET;

        if (empty(
$request['method'])
            || empty(
$request['params'])
            || !
is_array($request['params'])
        )
        {
            return 
$this->getResponseError('Invalid request');
        }

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

        if (
$params['signature'] != $this->getSha256SignatureByMethodAndParams($method$paramsConfig::SECRET_KEY))
        {
            return 
$this->getResponseError('Incorrect digital signature');
        }

        
$unitPayModel UnitPayModel::getInstance();

        if (
$method == 'check')
        {
            if (
$unitPayModel->getPaymentByUnitpayId($params['unitpayId']))
            {
                
// Платеж уже существует
                
return $this->getResponseSuccess('Payment already exists');
            }

            
$itemsCount floor($params['sum'] / Config::ITEM_PRICE);

            if (
$itemsCount <= 0)
            {
                return 
$this->getResponseError('Суммы ' $params['sum'] . ' руб. не достаточно для оплаты товара ' .
                    
'стоимостью ' Config::ITEM_PRICE ' руб.');
            }

            if (!
$unitPayModel->createPayment(
                
$params['unitpayId'],
                
$params['account'],
                
$params['sum'],
                
$itemsCount
            
))
            {
                return 
$this->getResponseError('Unable to create payment database');
            }

            
$checkResult $this->event->check($params);
            if (
$checkResult !== true)
            {
                return 
$this->getResponseError($checkResult);
            }

            return 
$this->getResponseSuccess('CHECK is successful');
        }

        if (
$method == 'pay')
        {
            
$payment $unitPayModel->getPaymentByUnitpayId(
                
$params['unitpayId']
            );

            if (
$payment && $payment->status == 1)
            {
                return 
$this->getResponseSuccess('Payment has already been paid');
            }

            if (!
$unitPayModel->confirmPaymentByUnitpayId($params['unitpayId']))
            {
                return 
$this->getResponseError('Unable to confirm payment database');
            }

            
$this->event
                
->pay($params);

            return 
$this->getResponseSuccess('PAY is successful');
        }

    return 
$this->getResponseError($method.' not supported');
    }

    private function 
getResponseSuccess($message)
    {
        return 
json_encode(array(
            
"jsonrpc" => "2.0",
            
"result" => array(
                
"message" => $message
            
),
            
'id' => 1,
        ));
    }

    private function 
getResponseError($message)
    {
        return 
json_encode(array(
            
"jsonrpc" => "2.0",
            
"error" => array(
                
"code" => -32000,
                
"message" => $message
            
),
            
'id' => 1
        
));
    }

    private function 
getMd5Sign($params$secretKey)
    {
        
ksort($params);
        unset(
$params['sign']);
        return 
md5(join(null$params).$secretKey);
    }

    
/**
     * @param $method
     * @param array $params
     * @param $secretKey
     * @return string
     */
    
private 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);
    }
}
Онлайн: 2
Реклама