Вход Регистрация
Файл: tankon.mobi/xowwsla01sosiJ/class.standart.php
Строк: 294
<?php

class XsollaStandartProtocol extends XsollaProtocol
{
    public function 
__construct($project, $billing = null)
    {
        try
        {
            if (!
is_subclass_of($project, "XsollaStandartProject"))
                throw new 
Exception("Incorrect object instance of XsollaStandartProject");

            
$this->project = $project;

            if (
$billing != null)
            {
                if (!
is_subclass_of($billing, "XsollaBilling"))
                    throw new 
Exception("Incorrect object instance of XsollaBilling");

                
$this->billing = $billing;
            }
        }
        catch (
Exception $e)
        {
          
$this->errorCheckResponse($e);
        }
    }

    protected function 
processCheckRequest()
    {
        try
        {
            
$this->project->setParams(
                    
$_GET["command"]
                ,   
null
                
,   urldecode($_GET["v1"])
                ,   
urldecode($_GET["v2"])
                ,   
urldecode($_GET["v3"])
                ,   
null
                
,   null
                
,   null
                
,   $_GET["md5"]
            );

            if (!
$this->project->checkStatusSignature())
                throw new 
Exception("Incorrect signature");

            if (!isset(
$_GET["v1"]))
                throw new 
Exception("User ID is undefined");

            
$responseArr = $this->project->check();

            if (!
is_array($responseArr) || !isset($responseArr["code"]) || !isset($responseArr["description"]))
                throw new 
Exception("Response code or description is undefined");

            
$response = $this->generateCheckResponse($responseArr["code"], $responseArr["description"]);
        }
        catch (
Exception $e)
        {
            
$this->errorCheckResponse($e);
        }
    }

    protected function 
processPayRequest()
    {
        try
        {         
            
$this->project->setParams(
                    
$_GET["command"]
                ,   
$_GET["id"]
                ,   
urldecode($_GET["v1"])
                ,   
urldecode($_GET["v2"])
                ,   
urldecode($_GET["v3"])
                ,   
$_GET["sum"]
                ,   
null
                
,   urldecode($_GET["date"])
                ,   
$_GET["md5"]
            );

            if (!
$this->project->checkPaySignature())
                throw new 
Exception("Incorrect signature");

            if (!isset(
$_GET["id"]))
                throw new 
Exception("Invoice is undefined");

            if (!isset(
$_GET["v1"]))
                throw new 
Exception("User ID is undefined");

            if (!isset(
$_GET["sum"]))
                throw new 
Exception("Amount is undefined");

            if (
$this->billing->getState($this->project->invoice) != XsollaStandartProtocolResponse::$codeSuccess)
            {
                
$this->billing->putTransaction($this->project->invoice, iconv("windows-1251", "utf-8", $this->project->v1), iconv("windows-1251", "utf-8", $this->project->v2), iconv("windows-1251", "utf-8", $this->project->v3), $this->project->amount, null, $this->project->date);
            
                
$responseArr = $this->project->sell();
                
                if (!
is_array($responseArr) || !isset($responseArr["code"]) || !isset($responseArr["description"]))
                    throw new 
Exception("Response code or description is undefined");

                
$order = $this->billing->getId($this->project->invoice);

                
$this->billing->updateState($this->project->invoice, $responseArr["code"], $responseArr["description"]);

                
$response = $this->generatePayResponse($responseArr["code"], $responseArr["description"], $this->project->invoice, $order, $this->project->amount);
            }
            else
            {
                
$response = $this->generatePayResponse(XsollaStandartProtocolResponse::$codeSuccess, "Success", $this->project->invoice, $this->billing->getId($this->project->invoice), $this->project->amount);
            }

        }
        catch (
Exception $e)
        {
            
$this->errorPayResponse($e);
        }
    }

    protected function 
processCancelRequest()
    {
        try
        {
            
$this->project->setParams($_GET["command"], $_GET["id"], null, null, null, null, null, null, $_GET["md5"]);

            if (!
$this->project->checkCancelSignature())
                throw new 
Exception("Incorrect signature");

            if (!isset(
$_GET["id"]))
                throw new 
Exception("Invoice is undefined");

            
$responseArr = $this->project->cancel();

            if (!
is_array($responseArr) || !isset($responseArr["code"]) || !isset($responseArr["description"]))
                throw new 
Exception("Response code or description is undefined");

            
$this->billing->cancelTransaction($this->project->invoice);

            
$response = $this->generateCancelResponse($responseArr["code"], $responseArr["description"]);
        }
        catch (
Exception $e)
        {
            
$this->errorCancelResponse($e);
        }
    }

    public function 
processRequest()
    {
        if (
$this->project == null || $this->billing == null)
            return;

        try
        {
            
//if (!$this->checkIP($_SERVER["REMOTE_ADDR"]))
            //    throw new Exception ("IP address is not allowed", 1);

            
if (!isset($_GET["command"]))
                throw new 
Exception("Command is undefined");

            
$command = $_GET["command"];

            if (
$command == "check")
            {
                
$this->processCheckRequest();
            }
            elseif (
$command == "pay")
            {
                
$this->processPayRequest();
            }
            elseif (
$command == "cancel")
            {
                
$this->processCancelRequest();
            }
            else
            {
                throw new 
Exception("Incorrect command");
            }
        }
        catch (
Exception $e)
        {
            
$this->errorCheckResponse($e);
        }
    }

    protected function 
generateCheckResponse($code, $description)
    {
        
$xml = new SimpleXMLElement("<response></response>");

        
$xml->addChild("result", $code);
        
$xml->addChild("comment", $description);
        
        
header("Content-Type: text/xml; charset=cp1251");
        echo 
html_entity_decode($xml->asXML(), ENT_COMPAT, 'windows-1251');
    }

    protected function 
generatePayResponse($code, $description, $invoice = 0, $order = 0, $sum = 0)
    { 
        
$xml = new SimpleXMLElement("<response></response>");

        
$xml->addChild("id", $invoice);
        
$xml->addChild("id_shop", $order);
        
$xml->addChild("sum", $sum);
        
$xml->addChild("result", $code);
        
$xml->addChild("comment", $description);

        
header("Content-Type: text/xml; charset=cp1251");
        echo 
html_entity_decode($xml->asXML(), ENT_COMPAT, 'windows-1251');
    }

    protected function 
generateCancelResponse($code, $description)
    {
        
$xml = new SimpleXMLElement("<response></response>");

        
$xml->addChild("result", $code);
        
$xml->addChild("comment", $description);

        
header("Content-Type: text/xml; charset=cp1251");
        echo 
html_entity_decode($xml->asXML(), ENT_COMPAT, 'windows-1251');
    }

    protected function 
errorCheckResponse($e)
    {
        
$this->generateCheckResponse(XsollaStandartProtocolResponse::$codePaymentCannotBeProcessed, $e->getMessage());
    }

    protected function 
errorPayResponse($e)
    {
        
$this->generatePayResponse(XsollaStandartProtocolResponse::$codePaymentCannotBeProcessed, $e->getMessage());
    }

    protected function 
errorCancelResponse($e)
    {
        
$this->generateCancelResponse(XsollaStandartProtocolResponse::$codeCancelFailed, $e->getMessage());
    }
}
Онлайн: 0
Реклама