Skip to content

Commit

Permalink
ورژن اولیه قابل تست برای بانک ملت ایجاد گردید
Browse files Browse the repository at this point in the history
  • Loading branch information
hpakdaman committed May 4, 2016
1 parent 10db686 commit a876207
Show file tree
Hide file tree
Showing 32 changed files with 2,291 additions and 4 deletions.
8 changes: 4 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
}
],
"autoload": {
"psr-4": { "Larabookir\\Gateway\\": "src/" }
},
"require": {
"PoolPort/PoolPort" : "3.0.*"
"psr-4": {
"Larabookir\\Gateway\\": "src/",
"Larabookir\\Gateway\\Tests\\": "tests/"
}
},
"minimum-stability": "dev"
}
5 changes: 5 additions & 0 deletions src/Exceptions/ConfigFileNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Larabookir\Gateway\Exceptions;

class ConfigFileNotFoundException extends \Exception {}
5 changes: 5 additions & 0 deletions src/Exceptions/InvalidRequestException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Larabookir\Gateway\Exceptions;

class InvalidRequestException extends \Exception {}
5 changes: 5 additions & 0 deletions src/Exceptions/NotFoundTransactionException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Larabookir\Gateway\Exceptions;

class NotFoundTransactionException extends \Exception {}
5 changes: 5 additions & 0 deletions src/Exceptions/PortNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace Larabookir\Gateway\Exceptions;

class PortNotFoundException extends \Exception {}
7 changes: 7 additions & 0 deletions src/Exceptions/RetryException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Larabookir\Gateway\Exceptions;
/**
* This exception when throws, user try to submit a payment request who submitted before
*/
class RetryException extends \Exception {}
160 changes: 160 additions & 0 deletions src/Gateway.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<?php

namespace Larabookir\Gateway;

use Larabookir\Gateway\Parsian\Parsian;
use Larabookir\Gateway\Sadad\Sadad;
use Larabookir\Gateway\Mellat\Mellat;
use Larabookir\Gateway\Payline\Payline;
use Larabookir\Gateway\Zarinpal\Zarinpal;
use Larabookir\Gateway\JahanPay\JahanPay;
use Larabookir\Gateway\Exceptions\RetryException;
use Larabookir\Gateway\Exceptions\PortNotFoundException;
use Larabookir\Gateway\Exceptions\InvalidRequestException;
use Larabookir\Gateway\Exceptions\NotFoundTransactionException;

class Gateway
{
const MELLAT = 'MELLAT';

const SADAD = 'SADAD';

const ZARINPAL = 'ZARINPAL';

const PAYLINE = 'PAYLINE';

const JAHANPAY = 'JAHANPAY';

const PARSIAN = 'PARSIAN';

protected $request;

/**
* @var Config
*/
public $config;

/**
* Keep current port driver
*
* @var Mellat|Sadad|Zarinpal|Payline|JahanPay
*/
protected $port;

/**
* Gateway constructor.
* @param null $config
* @param null $port
*/
public function __construct($config = null,$port = null)
{
$this->config = app('config');
$this->request = app('request');

if ($this->config->has('gateway.timezone'))
date_default_timezone_set($this->config->get('gateway.timezone'));

if (!is_null($port)) $this->make($port);
}

/**
* Get supported ports
*
* @return array
*/
public function getSupportedPorts()
{
return [self::MELLAT, self::SADAD, self::ZARINPAL, self::PAYLINE, self::JAHANPAY];
}

/**
* Call methods of current driver
*
* @return mixed
*/
public function __call($name, $arguments)
{
return call_user_func_array([$this->port, $name], $arguments);
}

/**
* Gets query builder from you transactions table
* @return mixed
*/
function getTable()
{
return DB::table($this->config->get('gateway.db_tables.transactions'));
}

/**
* Callback
*
* @return $this->port
*
* @throws InvalidRequestException
* @throws NotFoundTransactionException
* @throws PortNotFoundException
* @throws RetryException
*/
public function verify()
{
if (!$this->request->has('transaction_id'))
throw new InvalidRequestException;

$id = intval($this->request('transaction_id'));

$transaction = $this->getTable()->whereId($id)->first();

if (!$transaction)
throw new NotFoundTransactionException;

if (in_array($transaction->status, [PortAbstract::TRANSACTION_SUCCEE, PortAbstract::TRANSACTION_FAILED]))
throw new RetryException;

$this->make($transaction->port);

return $this->port->verify($transaction);
}


/**
* Create new object from port class
*
* @param int $port
* @throws PortNotFoundException
*/
function make($port)
{
switch ($port) {
case self::MELLAT:
$this->port = new Mellat($this->config, self::MELLAT);
break;

case self::SADAD:
$this->port = new Sadad($this->config, self::SADAD);
break;

case self::ZARINPAL:
$this->port = new Zarinpal($this->config, self::ZARINPAL);
break;

case self::PAYLINE:
$this->port = new Payline($this->config, self::PAYLINE);
break;

case self::JAHANPAY:
$this->port = new JahanPay($this->config, self::JAHANPAY);
break;

case self::PARSIAN:
$this->port = new Parsian($this->config, self::PARSIAN);
break;

default:
throw new PortNotFoundException;
break;
}

return $this;
}
}
18 changes: 18 additions & 0 deletions src/GatewayFacade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Larabookir\Gateway;

use Illuminate\Support\Facades\Facade;

class GatewayFacade extends Facade
{
/**
* The name of the binding in the IoC container.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'gateway';
}
}
40 changes: 40 additions & 0 deletions src/GatewayServiceProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace Larabookir\Gateway;

use Illuminate\Support\ServiceProvider;

class GatewayServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider --tag=config
$this->publishes([
__DIR__ . '/config/gateway.php' => config_path('gateway.php'),
],'config');

// php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider --tag=migrations
$this->publishes([
__DIR__.'/migrations/' => database_path('/migrations')
],'migrations');

}

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('gateway',function() {
return new Gateway();
});

}
}
Loading

0 comments on commit a876207

Please sign in to comment.