diff --git a/README.md b/README.md
index b1c78643..7d019108 100644
--- a/README.md
+++ b/README.md
@@ -1,128 +1,189 @@
+
+سایت مرجع پکیج: [larabook.ir](http://larabook.ir/اتصال-درگاه-بانک-لاراول/)
+پکیج اتصال به تمامی IPG ها و بانک های ایرانی.
+این پکیج با ورژن های
+( ۴ و ۵ و ۶ لاراول )
+ لاراول سازگار می باشد
-package's home : [larabook.ir](http://larabook.ir/اتصال-درگاه-بانک-لاراول/)
-by this package we are able to connect to all Iranian bank with one unique API.
-
-( This Package is now compatible with both **4.\* and 5.\* versions of Laravel** )
-
-Please inform us once you've encountered [bug](https://github.com/larabook/gateway/issues) or [issue](https://github.com/larabook/gateway/issues) .
-
-Available Banks:
+پشتیبانی تنها از درگاهای زیر می باشد:
1. MELLAT
2. SADAD (MELLI)
3. SAMAN
4. PARSIAN
5. PASARGAD
6. ZARINPAL
- 7. PAYPAL (**New**)
- 8. ASAN PARDAKHT (**New**)
- 9. PAY.IR (**New**) (to use : new \Payir())
+ 7. PAYPAL
+ 8. ASAN PARDAKHT
+ 9. PAY.IR ( برای فراخوانی از 'payir' استفاده نمایید)
+ 10. Irankish (**جدید** - برای فراخوانی از 'irankish' استفاده نمایید)
----------
-**Installation**:
+**نصب**:
-Run below statements on your terminal :
+دستورات زیر را جهت نصب دنبال کنید :
-STEP 1 :
+**مرحله ۱)**
composer require larabook/gateway
-STEP 2 : Add `provider` and `facade` in config/app.php
- 'providers' => [
- ...
- Larabookir\Gateway\GatewayServiceProvider::class, // <-- add this line at the end of provider array
- ],
+**مرحله ۲)**
+
+ تغییرات زیر را در فایل config/app.php اعمال نمایید:
+
+**توجه برای نسخه های لاراول ۶ به بعد این مرحله نیاز به انجام نمی باشد**
+
+
+
+```php
+
+'providers' => [
+ ...
+ Larabookir\Gateway\GatewayServiceProvider::class, // <-- add this line at the end of provider array
+],
+
+
+'aliases' => [
+ ...
+ 'Gateway' => Larabookir\Gateway\Gateway::class, // <-- add this line at the end of aliases array
+]
+
+```
+
+
+
+
+
+**مرحله ۳) - انتقال فایل های مورد نیاز**
+برای لاراول ۵ :
+
- 'aliases' => [
- ...
- 'Gateway' => Larabookir\Gateway\Gateway::class, // <-- add this line at the end of aliases array
- ]
+ php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProviderLaravel5
-Step 3:
- php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider
+
+برای لاراول ۶ به بعد :
+
-Step 4:
+ php artisan vendor:publish
+
+
+
+سپس این گزینه را انتخاب کنید : "Larabookir\Gateway\GatewayServiceProviderLaravel6"
+
+
+
+**مرحله ۴) - ایجاد جداول**
php artisan migrate
-Configuration file is placed in config/gateway.php , open it and enter your banks credential:
-
-You can make connection to bank by several way (Facade , Service container):
-
- try {
-
- $gateway = \Gateway::make(new \Mellat());
-
- // $gateway->setCallback(url('/path/to/callback/route')); You can also change the callback
- $gateway
- ->price(1000)
- // setShipmentPrice(10) // optional - just for paypal
- // setProductName("My Product") // optional - just for paypal
- ->ready();
-
- $refId = $gateway->refId(); // شماره ارجاع بانک
- $transID = $gateway->transactionId(); // شماره تراکنش
-
- // در اینجا
- // شماره تراکنش بانک را با توجه به نوع ساختار دیتابیس تان
- // در جداول مورد نیاز و بسته به نیاز سیستم تان
- // ذخیره کنید .
-
- return $gateway->redirect();
-
- } catch (\Exception $e) {
-
- echo $e->getMessage();
- }
-
-you can call the gateway by these ways :
- 1. Gateway::make(new Mellat());
- 1. Gateway::mellat()
- 2. app('gateway')->make(new Mellat());
- 3. app('gateway')->mellat();
-
-Instead of MELLAT you can enter other banks Name as we introduced above .
-
-In `price` method you should enter the price in IRR (RIAL)
-
-and in your callback :
-
- try {
-
- $gateway = \Gateway::verify();
- $trackingCode = $gateway->trackingCode();
- $refId = $gateway->refId();
- $cardNumber = $gateway->cardNumber();
-
- // تراکنش با موفقیت سمت بانک تایید گردید
- // در این مرحله عملیات خرید کاربر را تکمیل میکنیم
-
- } catch (\Larabookir\Gateway\Exceptions\RetryException $e) {
-
- // تراکنش قبلا سمت بانک تاییده شده است و
- // کاربر احتمالا صفحه را مجددا رفرش کرده است
- // لذا تنها فاکتور خرید قبل را مجدد به کاربر نمایش میدهیم
-
- echo $e->getMessage() . "
";
-
- } catch (\Exception $e) {
-
- // نمایش خطای بانک
- echo $e->getMessage();
- }
-
-If you are intrested to developing this package you can help us by these ways :
-
- 1. Improving documents.
- 2. Reporting issue or bugs.
- 3. Collaboration in writing codes and other banks modules.
-
-This package is extended from PoolPort but we've changed some functionality and improved it .
+
+**مرحله ۵)**
+
+عملیات نصب پایان یافته است حال فایل gateway.php را در مسیر app/ را باز نموده و تنظیمات مربوط به درگاه بانکی مورد نظر خود را در آن وارد نمایید .
+
+حال میتوایند برای اتصال به api بانک از یکی از روش های زیر به انتخاب خودتان استفاده نمایید . (Facade , Service container):
+
+
+ 1. Gateway::make(new Mellat())
+ 2. Gateway::make('mellat')
+ 3. Gateway::mellat()
+ 4. app('gateway')->make(new Mellat());
+ 5. app('gateway')->mellat();
+
+
+
+ مثال :اتصال به بانک ملت (درخواست توکن و انتقال کاربر به درگاه بانک)
+توجه : مقدار متد price به ریال وارد شده است و معادل یکصد تومان می باشد
+
+یک روت از نوع GET با آدرس /bank/request ایجاد نمایید و کد های زیر را در آن قرار دهید .
+
+
+
+
+```php
+
+try {
+
+ $gateway = \Gateway::make('mellat');
+
+ $gateway->setCallback(url('/bank/response')); // You can also change the callback
+ $gateway->price(1000)
+ // setShipmentPrice(10) // optional - just for paypal
+ // setProductName("My Product") // optional - just for paypal
+ ->ready();
+
+ $refId = $gateway->refId(); // شماره ارجاع بانک
+ $transID = $gateway->transactionId(); // شماره تراکنش
+
+ // در اینجا
+ // شماره تراکنش بانک را با توجه به نوع ساختار دیتابیس تان
+ // در جداول مورد نیاز و بسته به نیاز سیستم تان
+ // ذخیره کنید .
+
+ return $gateway->redirect();
+
+} catch (\Exception $e) {
+
+ echo $e->getMessage();
+}
+
+```
+
+
+
+ و سپس روت با مسیر /bank/response و از نوع post ایجاد نمایید و کد های زیر را در آن قرار دهید :
+
+
+
+
+```php
+
+try {
+
+ $gateway = \Gateway::verify();
+ $trackingCode = $gateway->trackingCode();
+ $refId = $gateway->refId();
+ $cardNumber = $gateway->cardNumber();
+
+ // تراکنش با موفقیت سمت بانک تایید گردید
+ // در این مرحله عملیات خرید کاربر را تکمیل میکنیم
+
+} catch (\Larabookir\Gateway\Exceptions\RetryException $e) {
+
+ // تراکنش قبلا سمت بانک تاییده شده است و
+ // کاربر احتمالا صفحه را مجددا رفرش کرده است
+ // لذا تنها فاکتور خرید قبل را مجدد به کاربر نمایش میدهیم
+
+ echo $e->getMessage() . "
";
+
+} catch (\Exception $e) {
+
+ // نمایش خطای بانک
+ echo $e->getMessage();
+}
+
+```
+
+
+
+در صورت تمایل جهت همکاری در توسعه :
+
+ 1. توسعه مستندات پکیج.
+ 2. گزارش باگ و خطا.
+ 3. همکاری در نوشتن ماژول دیگر بانک ها برای این پکیج .
+
+
+درصورت بروز هر گونه
+ [باگ](https://github.com/larabook/gateway/issues) یا [خطا](https://github.com/larabook/gateway/issues) .
+ ما را آگاه سازید .
+
+این پکیج از پکیج دیگری بنام poolport مشتق شده است اما برخی از عملیات آن متناسب با فریموورک لارول تغییر کرده است
+
diff --git a/config/gateway.php b/config/gateway.php
index ed135c7c..fffe3d7e 100644
--- a/config/gateway.php
+++ b/config/gateway.php
@@ -48,6 +48,15 @@
'callback-url' => '/'
],
+ //--------------------------------
+ // IranKish gateway
+ //--------------------------------
+ 'irankish' => [
+ 'merchantId' => 'xxxxxxxxxxxxxxxxxxxx',
+ 'sha1key' => 'xxxxxxxxxxxxxxxxxxxx',
+ 'callback-url' => '/'
+ ],
+
//--------------------------------
// Sadad gateway
//--------------------------------
@@ -57,7 +66,7 @@
'terminalId' => 000000000,
'callback-url' => '/'
],
-
+
//--------------------------------
// Parsian gateway
//--------------------------------
diff --git a/migrations/2016_05_02_193213_create_gateway_transactions_table.php b/migrations/2016_05_02_193213_create_gateway_transactions_table.php
index 16464561..f87a50d6 100644
--- a/migrations/2016_05_02_193213_create_gateway_transactions_table.php
+++ b/migrations/2016_05_02_193213_create_gateway_transactions_table.php
@@ -20,22 +20,12 @@ function getTable()
*/
public function up()
{
+
+
Schema::create($this->getTable(), function (Blueprint $table) {
$table->engine = "innoDB";
$table->unsignedBigInteger('id', true);
- $table->enum('port', [
- Enum::MELLAT,
- Enum::SADAD,
- Enum::ZARINPAL,
- Enum::PAYLINE,
- Enum::JAHANPAY,
- Enum::PARSIAN,
- Enum::PASARGAD,
- Enum::SAMAN,
- Enum::ASANPARDAKHT,
- Enum::PAYPAL,
- Enum::PAYIR
- ]);
+ $table->enum('port', (array) Enum::getIPGs());
$table->decimal('price', 15, 2);
$table->string('ref_id', 100)->nullable();
$table->string('tracking_code', 50)->nullable();
diff --git a/src/Asanpardakht/Asanpardakht.php b/src/Asanpardakht/Asanpardakht.php
index 52c5a161..89363b0b 100644
--- a/src/Asanpardakht/Asanpardakht.php
+++ b/src/Asanpardakht/Asanpardakht.php
@@ -2,7 +2,7 @@
namespace Larabookir\Gateway\Asanpardakht;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
use Larabookir\Gateway\PortInterface;
@@ -141,7 +141,7 @@ protected function sendPayRequest()
*/
protected function userPayment()
{
- $ReturningParams = Input::get('ReturningParams');
+ $ReturningParams = Request::input('ReturningParams');
$ReturningParams = $this->decrypt($ReturningParams);
$paramsArray = explode(",", $ReturningParams);
diff --git a/src/Asanpardakht/AsanpardakhtException.php b/src/Asanpardakht/AsanpardakhtException.php
index 42af6af8..1a8c55b4 100644
--- a/src/Asanpardakht/AsanpardakhtException.php
+++ b/src/Asanpardakht/AsanpardakhtException.php
@@ -145,8 +145,7 @@ class AsanpardakhtException extends BankException
1101 => "هویت درخواست کننده نامعتبر است",
1102 => "خطا در پردازش",
1103 => "تراکنشی یافت نشد"
-
-
+
);
public function __construct($errorRef)
diff --git a/src/Enum.php b/src/Enum.php
index cf431e7e..266f0a6e 100644
--- a/src/Enum.php
+++ b/src/Enum.php
@@ -1,37 +1,58 @@
-getConstants(),$excepts));
+ else
+ return array_values(\Illuminate\Support\Arr::except($reflect->getConstants(),$excepts));
+ }
+
+ /**
+ * Status code for status field in poolport_transactions table
+ */
+ const TRANSACTION_INIT = 'INIT';
+ const TRANSACTION_INIT_TEXT = 'تراکنش ایجاد شد.';
+
+ /**
+ * Status code for status field in poolport_transactions table
+ */
+ const TRANSACTION_SUCCEED = 'SUCCEED';
+ const TRANSACTION_SUCCEED_TEXT = 'پرداخت با موفقیت انجام شد.';
+
+ /**
+ * Status code for status field in poolport_transactions table
+ */
+ const TRANSACTION_FAILED = 'FAILED';
+ const TRANSACTION_FAILED_TEXT = 'عملیات پرداخت با خطا مواجه شد.';
+
+}
diff --git a/src/GatewayResolver.php b/src/GatewayResolver.php
index c7d7184b..53071630 100644
--- a/src/GatewayResolver.php
+++ b/src/GatewayResolver.php
@@ -2,6 +2,7 @@
namespace Larabookir\Gateway;
+use Larabookir\Gateway\Irankish\Irankish;
use Larabookir\Gateway\Parsian\Parsian;
use Larabookir\Gateway\Paypal\Paypal;
use Larabookir\Gateway\Sadad\Sadad;
@@ -57,17 +58,7 @@ public function __construct($config = null, $port = null)
*/
public function getSupportedPorts()
{
- return [
- Enum::MELLAT,
- Enum::SADAD,
- Enum::ZARINPAL,
- Enum::PARSIAN,
- Enum::PASARGAD,
- Enum::SAMAN,
- Enum::PAYPAL,
- Enum::ASANPARDAKHT,
- Enum::PAYIR
- ];
+ return (array) Enum::getIPGs();
}
/**
@@ -136,36 +127,40 @@ public function verify()
* @throws PortNotFoundException
*/
function make($port)
- {
- if ($port InstanceOf Mellat) {
- $name = Enum::MELLAT;
- } elseif ($port InstanceOf Parsian) {
- $name = Enum::PARSIAN;
- } elseif ($port InstanceOf Saman) {
- $name = Enum::SAMAN;
- } elseif ($port InstanceOf Zarinpal) {
- $name = Enum::ZARINPAL;
- } elseif ($port InstanceOf Sadad) {
- $name = Enum::SADAD;
- } elseif ($port InstanceOf Asanpardakht) {
- $name = Enum::ASANPARDAKHT;
- } elseif ($port InstanceOf Paypal) {
- $name = Enum::PAYPAL;
- } elseif ($port InstanceOf Payir) {
- $name = Enum::PAYIR;
- } elseif(in_array(strtoupper($port),$this->getSupportedPorts())){
- $port=ucfirst(strtolower($port));
- $name=strtoupper($port);
- $class=__NAMESPACE__.'\\'.$port.'\\'.$port;
- $port=new $class;
- } else
- throw new PortNotFoundException;
-
- $this->port = $port;
- $this->port->setConfig($this->config); // injects config
- $this->port->setPortName($name); // injects config
- $this->port->boot();
-
- return $this;
- }
+ {
+ if ($port InstanceOf Mellat) {
+ $name = Enum::MELLAT;
+ } elseif ($port InstanceOf Parsian) {
+ $name = Enum::PARSIAN;
+ } elseif ($port InstanceOf Saman) {
+ $name = Enum::SAMAN;
+ } elseif ($port InstanceOf Zarinpal) {
+ $name = Enum::ZARINPAL;
+ } elseif ($port InstanceOf Sadad) {
+ $name = Enum::SADAD;
+ } elseif ($port InstanceOf Asanpardakht) {
+ $name = Enum::ASANPARDAKHT;
+ } elseif ($port InstanceOf Paypal) {
+ $name = Enum::PAYPAL;
+ } elseif ($port InstanceOf Payir) {
+ $name = Enum::PAYIR;
+ } elseif ($port InstanceOf Pasargad) {
+ $name = Enum::PASARGAD;
+ } elseif ($port InstanceOf Irankish) {
+ $name = Enum::IRANKISH;
+ } elseif (in_array(strtoupper($port), $this->getSupportedPorts())) {
+ $port = ucfirst(strtolower($port));
+ $name = strtoupper($port);
+ $class = __NAMESPACE__ . '\\' . $port . '\\' . $port;
+ $port = new $class;
+ } else
+ throw new PortNotFoundException;
+
+ $this->port = $port;
+ $this->port->setConfig($this->config); // injects config
+ $this->port->setPortName($name); // injects config
+ $this->port->boot();
+
+ return $this;
+ }
}
diff --git a/src/GatewayServiceProvider.php b/src/GatewayServiceProvider.php
index b8c2e236..f51e4ae5 100644
--- a/src/GatewayServiceProvider.php
+++ b/src/GatewayServiceProvider.php
@@ -55,8 +55,10 @@ private function getProvider()
{
if (version_compare(\Illuminate\Foundation\Application::VERSION, '5.0', '<')) {
$provider = 'Larabookir\Gateway\GatewayServiceProviderLaravel4';
- } else {
+ }elseif (version_compare(\Illuminate\Foundation\Application::VERSION, '5.0', '>=') && version_compare(\Illuminate\Foundation\Application::VERSION, '6.0', '<')) {
$provider = 'Larabookir\Gateway\GatewayServiceProviderLaravel5';
+ }else {
+ $provider = 'Larabookir\Gateway\GatewayServiceProviderLaravel6';
}
return new $provider($this->app);
diff --git a/src/GatewayServiceProviderLaravel5.php b/src/GatewayServiceProviderLaravel5.php
index 26f593aa..a075b3f1 100644
--- a/src/GatewayServiceProviderLaravel5.php
+++ b/src/GatewayServiceProviderLaravel5.php
@@ -36,15 +36,6 @@ public function boot()
], 'migrations');
-
- if (
- File::glob(base_path('/database/migrations/*create_gateway_status_log_table\.php'))
- && !File::exists(base_path('/database/migrations/2017_04_05_103357_alter_id_in_transactions_table.php'))
- ) {
- @File::copy($migrations.'/2017_04_05_103357_alter_id_in_transactions_table.php',base_path('database/migrations/2017_04_05_103357_alter_id_in_transactions_table.php'));
- }
-
-
$this->loadViewsFrom($views, 'gateway');
// php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider --tag=views
diff --git a/src/GatewayServiceProviderLaravel6.php b/src/GatewayServiceProviderLaravel6.php
new file mode 100644
index 00000000..b3df8082
--- /dev/null
+++ b/src/GatewayServiceProviderLaravel6.php
@@ -0,0 +1,62 @@
+publishes([
+ $config => config_path('gateway.php'),
+ ], 'config')
+ ;
+
+ // php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider --tag=migrations
+ $this->publishes([
+ $migrations => base_path('database/migrations')
+ ], 'migrations');
+
+
+ $this->loadViewsFrom($views, 'gateway');
+
+ // php artisan vendor:publish --provider=Larabookir\Gateway\GatewayServiceProvider --tag=views
+ $this->publishes([
+ $views => base_path('resources/views/vendor/gateway'),
+ ], 'views');
+
+ //$this->mergeConfigFrom( $config,'gateway')
+ }
+
+ /**
+ * Register the application services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ $this->app->singleton('gateway', function () {
+ return new GatewayResolver();
+ });
+
+ }
+}
diff --git a/src/Irankish/Irankish.php b/src/Irankish/Irankish.php
new file mode 100644
index 00000000..e6a61be6
--- /dev/null
+++ b/src/Irankish/Irankish.php
@@ -0,0 +1,202 @@
+amount = $amount;
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function ready()
+ {
+ $this->sendPayRequest();
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function redirect()
+ {
+ $gateUrl = $this->gateUrl;
+ $token = $this->refId;
+ $merchantId = $this->config->get('gateway.irankish.merchantId');
+
+ return view('gateway::irankish-redirector')->with(compact('token', 'merchantId','gateUrl'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function verify($transaction)
+ {
+ parent::verify($transaction);
+
+ $this->userPayment();
+ $this->verifyPayment();
+ return $this;
+ }
+
+ /**
+ * Sets callback url
+ *
+ * @param $url
+ */
+ function setCallback($url)
+ {
+ $this->callbackUrl = $url;
+
+ return $this;
+ }
+
+ /**
+ * Gets callback url
+ * @return string
+ */
+ function getCallback()
+ {
+ if (!$this->callbackUrl) {
+ $this->callbackUrl = $this->config->get('gateway.irankish.callback-url');
+ }
+
+ return $this->makeCallback($this->callbackUrl, ['transaction_id' => $this->transactionId()]);
+ }
+
+ /**
+ * Send pay request to server
+ *
+ * @return void
+ *
+ * @throws IranKishException
+ */
+ protected function sendPayRequest()
+ {
+ $dateTime = new DateTime();
+
+ $this->newTransaction();
+
+ $fields = [
+ 'amount' => $this->amount,
+ 'merchantId' => $this->config->get('gateway.irankish.merchantId'),
+ 'invoiceNo' => $this->transactionId(),
+ 'paymentId' => $this->getCustomInvoiceNo(),
+ 'revertURL' => $this->getCallback(),
+ 'description' => $this->getCustomDesc(),
+ ];
+
+ try {
+ $soap = new SoapClient($this->serverUrl, ['soap_version' => SOAP_1_1]);
+ $response = $soap->MakeToken($fields);
+
+ } catch (\SoapFault $e) {
+ $this->transactionFailed();
+ $this->newLog('SoapFault', $e->getMessage());
+ throw $e;
+ }
+
+ if ($response->MakeTokenResult->result != true) {
+ $this->transactionFailed();
+ $this->newLog($response->MakeTokenResult->message, IrankishException::$errors[$response[0]]);
+ throw new IranKishException($response[0]);
+ }
+ $this->refId = $response->MakeTokenResult->token;
+ $this->transactionSetRefId();
+ }
+
+ /**
+ * Check user payment
+ *
+ * @return bool
+ *
+ * @throws IranKishException
+ */
+ protected function userPayment()
+ {
+
+ $this->refId = Request::input('token');
+ $this->trackingCode = Request::input('referenceId');
+ if(Request::has('cardNo'))
+ $this->cardNumber = Request::input('cardNo');
+ $payRequestResCode = Request::input('resultCode');
+
+ if ($payRequestResCode == '100') {
+ return true;
+ }
+
+ $this->transactionFailed();
+ $this->newLog($payRequestResCode, @IrankishException::$errors[$payRequestResCode]);
+ throw new IrankishException($payRequestResCode);
+ }
+
+ /**
+ * Verify user payment from bank server
+ *
+ * @return bool
+ *
+ * @throws IranKishException
+ * @throws SoapFault
+ */
+ protected function verifyPayment()
+ {
+ $fields = [
+ 'token' => $this->refId(),
+ 'merchantId' => $this->config->get('gateway.irankish.merchantId'),
+ 'referenceNumber' => $this->trackingCode(),
+ 'sha1key' => $this->config->get('gateway.irankish.sha1key')
+ ];
+
+ try {
+ $soap = new SoapClient($this->serverVerifyUrl);
+ $response = $soap->KicccPaymentsVerification($fields);
+
+ } catch (\SoapFault $e) {
+ $this->transactionFailed();
+ $this->newLog('SoapFault', $e->getMessage());
+ throw $e;
+ }
+
+ if ($response->KicccPaymentsVerificationResult != $this->amount) {
+ $this->transactionFailed();
+ $this->newLog($response->KicccPaymentsVerificationResult, IrankishException::$errors[$response->KicccPaymentsVerificationResult]);
+ throw new IrankishException($response->KicccPaymentsVerificationResult);
+ }
+
+ $this->transactionSucceed();
+ $this->newLog($response->KicccPaymentsVerificationResult, Enum::TRANSACTION_SUCCEED_TEXT);
+
+
+ return true;
+ }
+
+}
diff --git a/src/Irankish/IrankishException.php b/src/Irankish/IrankishException.php
new file mode 100644
index 00000000..449778f2
--- /dev/null
+++ b/src/Irankish/IrankishException.php
@@ -0,0 +1,41 @@
+ 'انصراف دارنده کارت.',
+ 120 => 'موجودی کافی نیست. ',
+ 130 => 'اطلاعات کارت اشتباه است.',
+ 131 => 'رمز کارت اشتباه است.',
+ 132 => 'کارت مسدود شده است.',
+ 133 => 'کارت منقضی شده است.',
+ 140 => 'زمان مورد نظر به پایان رسیده است.',
+ 150 => 'خطای داخل بانکی.',
+ 160 => 'خطای CVV2 یا EXPDATE.',
+ 166 => 'بانک صادر کننده شما مجوز تراکنش را صادر نکرده است.',
+ 200 => 'مبلغ تراکنش بیش حد از مجاز برای هر تراکنش می باشد.',
+ 201 => 'مبلغ تراکنش بیش حد از مجاز برای تراکنش در روز می باشد.',
+ 202 => 'مبلغ تراکنش بیش حد از مجاز برای تراکنش در ماه می باشد.',
+ -20 => 'وجود کاراکتر های غیر مجاز در درخواست.',
+ -30 => 'تراکنش قبلا برگشت خورده است.',
+ -50 => 'طول رشته درخواست غیر مجاز است.',
+ -51 => 'خطا در درخواست.',
+ -80 => 'تراکنش مورد نظر یافت نشد.',
+ -81 => 'خطای داخل بانکی.',
+ -90 => 'تراکنش قبلا تایید شده.',
+
+
+ ];
+
+ public function __construct($errorId)
+ {
+ $this->errorId = intval($errorId);
+
+ parent::__construct(@self::$errors[$this->errorId] . ' #' . $this->errorId, $this->errorId);
+ }
+}
diff --git a/src/JahanPay/JahanPay.php b/src/JahanPay/JahanPay.php
index 0f641463..200c19b0 100644
--- a/src/JahanPay/JahanPay.php
+++ b/src/JahanPay/JahanPay.php
@@ -2,7 +2,7 @@
namespace Larabookir\Gateway\JahanPay;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\Enum;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
@@ -134,7 +134,7 @@ protected function sendPayRequest()
*/
protected function userPayment()
{
- $refId = Input::get('au');
+ $refId = Request::input('au');
if ($this->refId() != $refId) {
$this->transactionFailed();
diff --git a/src/Maskan/Maskan.php b/src/Maskan/Maskan.php
new file mode 100644
index 00000000..4821797a
--- /dev/null
+++ b/src/Maskan/Maskan.php
@@ -0,0 +1,233 @@
+amount = $amount ;
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function ready()
+ {
+ $this->sendPayRequest();
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function redirect()
+ {
+ $url = $this->bankGateUrl;
+
+ return view('gateway::maskan-redirector', compact('url'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function verify($transaction)
+ {
+ parent::verify($transaction);
+ $this->verifyPayment();
+
+ return $this;
+ }
+
+ /**
+ * Sets callback url
+ *
+ * @param $url
+ */
+ function setCallback($url)
+ {
+ $this->callbackUrl = $url;
+
+ return $this;
+ }
+
+ /**
+ * Gets callback url
+ * @return string
+ */
+ function getCallback()
+ {
+ return $this->makeCallback($this->callbackUrl, ['transaction_id' => $this->transactionId()]);
+ }
+
+ /**
+ * Send pay request to server
+ *
+ * @return void
+ *
+ * @throws MaskanException
+ */
+ protected function sendPayRequest()
+ {
+ $this->newTransaction();
+ $terminalId = $this->config->get("gateway.maskan.terminal_id"); // Terminal ID
+ $userName = $this->config->get("gateway.maskan.USERNAME"); // Username
+ $userPassword = $this->config->get("gateway.maskan.USERPASSWORD"); // Password
+ $orderId = $this->transactionId(); // Order ID
+ $amount = $this->getPrice(); // Price / Rial
+ $callBackUrl = $this->getCallback(); // Callback URL
+
+ $parameters = [
+ "PAYMENTID" => $orderId,
+ "CALLBACKURL" => $callBackUrl,
+ "AMOUNT" => $amount,
+ "USERNAME" => $userName,
+ "USERPASSWORD" => $userPassword,
+ "CARDACCEPTORCODE" => $terminalId,
+ ];
+
+ $curl = curl_init();
+
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters));
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_URL, $this->serverUrl);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
+ $result = curl_exec($curl);
+ curl_close($curl);
+
+ if ($result == null || $result == "" || !isset($result)) {
+ $is_error = 'yes';
+ $error_code = 505;
+ $this->transactionFailed();
+ $this->newLog($error_code, MaskanException::$errors[$error_code]);
+
+ } else {
+ $confirm = json_decode($result, false);
+ $ActionCode = strval($confirm->ActionCode);
+ $RedirectUrl = strval($confirm->RedirectUrl);
+ $RefCode = strval($confirm->RedirectUrl);
+ if ($ActionCode == "0") {
+ $this->refId = $RefCode;
+ $this->transactionSetRefId();
+ $this->bankGateUrl = $RedirectUrl;
+
+ return true;
+ }
+ $this->transactionFailed();
+ $this->newLog($ActionCode, MaskanException::$errors[$ActionCode]);
+ throw new MaskanException($ActionCode);
+ }
+ }
+
+ /**
+ * Check user payment with GET data
+ *
+ * @return bool
+ *
+ * @throws MaskanException
+ */
+
+ /**
+ * Verify user payment from zarinpal server
+ *
+ * @return bool
+ *
+ * @throws MaskanException
+ */
+ protected function verifyPayment()
+ {
+ $json = stripslashes($_POST['Data']);
+ $Res = json_decode($json);
+ $transaction_id = strval($Res->RRN);
+ $orderId = strval($Res->PaymentID);
+ $fault = strval($Res->ActionCode);
+
+ $terminalId = $this->config->get("gateway.maskan.terminal_id"); // Terminal ID
+ $userName = $this->config->get("gateway.maskan.USERNAME"); // Username
+ $userPassword = $this->config->get("gateway.maskan.USERPASSWORD"); // Password
+
+ if ($fault == 511 || $fault == 519) {
+ $this->transactionFailed();
+ $this->newLog($fault, MaskanException::$errors[$fault]);
+ throw new MaskanException($fault);
+ } else {
+ if ($fault != 0) {
+ $this->transactionFailed();
+ $this->newLog($fault, MaskanException::$errors[$fault]);
+ throw new MaskanException($fault);
+ } else {
+ $parameters = [
+ "PAYMENTID" => $orderId,
+ "CARDACCEPTORCODE" => $terminalId,
+ "RRN" => $transaction_id,
+ "USERNAME" => $userName,
+ "USERPASSWORD" => $userPassword,
+ ];
+
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters));
+ curl_setopt($curl, CURLOPT_URL, "https://fcp.shaparak.ir/NvcService/Api/v2/Confirm");
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
+ $result = curl_exec($curl);
+ curl_close($curl);
+ $result = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($result));
+ $confirm = json_decode($result, false);
+ $ActionCode = strval($confirm->ActionCode);
+ if (json_last_error() != 0 || $confirm == null || $ActionCode == null) {
+ $error_code = 505;
+ $this->transactionFailed();
+ $this->newLog($error_code, MaskanException::$errors[$error_code]);
+ throw new MaskanException($ActionCode);
+ } else {
+ if ($ActionCode == "511" || $ActionCode == "519") {
+ $this->transactionFailed();
+ $this->newLog($ActionCode, MaskanException::$errors[$ActionCode]);
+ throw new MaskanException($ActionCode);
+ } else {
+ if ($ActionCode != "0") {
+ $this->transactionFailed();
+ $this->newLog($ActionCode, MaskanException::$errors[$ActionCode]);
+ throw new MaskanException($ActionCode);
+ } else {
+ $this->trackingCode = $confirm->RRN;
+ $this->transactionSucceed();
+ $this->newLog(1, Enum::TRANSACTION_SUCCEED_TEXT);
+
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/Maskan/MaskanException.php b/src/Maskan/MaskanException.php
new file mode 100644
index 00000000..c339358e
--- /dev/null
+++ b/src/Maskan/MaskanException.php
@@ -0,0 +1,107 @@
+errorId = $errorId;
+
+ parent::__construct(@self::$errors[$errorId] . ' #' . $errorId, $errorId);
+ }
+
+ public static $errors = [
+ '505' => 'خطای نامشخص',
+ '-1' => 'کلید نامعتبر است',
+ '0' => 'Success موفقیت ',
+ '1' => 'صادرکننده ی کارت از انجام تراکنش صرف نظر کرد.',
+ '2' => 'عملیات تاییدیه این تراکنش قبلا با موفقیت صورت پذیرفته است.',
+ '3' => 'پذیرنده ی فروشگاهی نامعتبر است.',
+ '5' => 'از انجام تراکنش صرف نظر شد.',
+ '6' => 'بروز خطا',
+ '7' => 'به دلیل شرایط خاص کارت توسط دستگاه ضبط شود.',
+ '8' => 'باتشخیص هویت دارنده ی کارت، تراکنش موفق می باشد.',
+ '9' => 'در حال حاضر امکان پاسخ دهی وجود ندارد',
+ '12' => 'تراکنش نامعتبر است.',
+ '13' => 'مبلغ تراکنش اصلاحیه نادرست است.',
+ '14' => 'شماره کارت ارسالی نامعتبر است. (وجود ندارد)',
+ '15' => 'صادرکننده ی کارت نامعتبراست.(وجود ندارد)',
+ '16' => 'تراکنش مورد تایید است و اطلاعات شیار سوم کارت به روز رسانی شود.',
+ '19' => 'تراکنش مجدداً ارسال شود.',
+ '20' => 'خطای ناشناخته از سامانه مقصد',
+ '23' => 'کارمزد ارسالی پذیرنده غیر قابل قبول است.',
+ '25' => 'شماره شناسایی صادرکننده غیر معتبر',
+ '30' => 'قالب پیام دارای اشکال است.',
+ '31' => 'پذیرنده توسط سوئیچ پشتیبانی نمی شود.',
+ '33' => 'تاریخ انقضای کارت سپری شده است.',
+ '34' => 'دارنده کارت مظنون به تقلب است.',
+ '36' => 'کارت محدود شده است.کارت توسط دستگاه ضبط شود. ',
+ '38' => 'تعداد دفعات ورود رمز غلط بیش از حدمجاز است. ',
+ '39' => 'کارت حساب اعتباری ندارد. ',
+ '40' => ' عملیات درخواستی پشتیبانی نمی گردد. ',
+ '41' => 'کارت مفقودی می باشد. ',
+ '42' => 'کارت حساب عمومی ندارد. ',
+ '43' => 'کارت مسروقه می باشد. ',
+ '44' => ' کارت حساب سرمایه گذاری ندارد. ',
+ '48' => 'تراکنش پرداخت قبض قبلا انجام پذیرفته',
+ '51' => ' موجودی کافی نیست. ',
+ '52' => ' کارت حساب جاری ندارد. ',
+ '53' => ' کارت حساب قرض الحسنه ندارد. ',
+ '56' => ' تاریخ انقضای کارت سپری شده است. 54 55 Pin -Error کارت نا معتبر است.',
+ '57' => 'انجام تراکنش مربوطه توسط دارنده ی کارت مجاز نمی باشد. ',
+ '58' => 'انجام تراکنش مربوطه توسط پایانه ی انجام دهنده مجاز نمی باشد. ',
+ '59' => 'کارت مظنون به تقلب است. ',
+ '61' => 'مبلغ تراکنش بیش از حد مجاز است. ',
+ '62' => ' کارت محدود شده است. ',
+ '63' => ' تمهیدات امنیتی نقض گردیده است. ',
+ '64' => 'مبلغ تراکنش اصلی نامعتبر است.(تراکنش مالی اصلی با این مبلغ نمی باشد) ',
+ '65' => 'تعداد درخواست تراکنش بیش از حد مجاز است. ',
+ '67' => 'کارت توسط دستگاه ضبط شود. ',
+ '75' => ' تعداد دفعات ورود رمزغلط بیش از حد مجاز است.',
+ '77' => 'روز مالی تراکنش نا معتبر است.',
+ '78' => 'کارت فعال نیست. ',
+ '79' => ' حساب متصل به کارت نامعتبر است یا دارای اشکال است. ',
+ '80' => ' خطای داخلی سوییچ رخ داده است ',
+ '81' => 'خطای پردازش سوییچ ',
+ '83' => ' نموده است.Sign Offارائه دهنده خدمات پرداخت یا سامانه شاپرک اعلام ',
+ '84' => ' Host -Down ',
+ '86' => 'Sign offموسسه ارسال کننده، شاپرک یا مقصد تراکنش در حالت ',
+ '90' => 'سامانه مقصد تراکنش درحال انجام عملیات پایان روز می باشد. ',
+ '91' => 'پاسخی از سامانه مقصد دریافت نشد ',
+ '92' => 'مسیری برای ارسال تراکنش به مقصد یافت نشد. (موسسه های اعلامی معتبر نیستند) ',
+ '93' => 'پیام دوباره ارسال گردد. (درپیام های تاییدیه) ',
+ '94' => ' پیام تکراری است ',
+ '96' => ' بروز خطای سیستمی در انجام تراکنش ',
+ '97' => ' مبلغ تراکنش غیر معتبر است ',
+ '98' => ' شارژ وجود ندارد. ',
+ '99' => ' تراکنش غیر معتبر است یا کلید ها هماهنگ نیستند ',
+ '100' => 'خطای نامشخص',
+ '500' => ' کدپذیرندگی معتبر نمی باشد ',
+ '501' => 'مبلغ بیشتر از حد مجاز است ',
+ '502' => ' نام کاربری و یا رمز ورود اشتباه است ',
+ '503' => ' آی پی دامنه کار بر نا معتبر است ',
+ '504' => ' آدرس صفحه برگشت نا معتبر است ',
+ '506' => 'شماره سفارش تکراری است - و یا مشکلی دیگر در درج اطلاعات ',
+ '507' => 'خطای اعتبارسنجی مقادیر ',
+ '508' => 'فرمت درخواست ارسالی نا معتبر است',
+ '509' => 'قطع سرویس های شاپرک',
+ '510' => 'لغو درخواست توسط خود کاربر',
+ '511' => 'طولانی شدن زمان تراکنش و عدم انجام در زمان مقرر توسط کاربر',
+ '512' => ' کارتCvv2خطا اطلاعات',
+ '513' => 'خطای اطلاعات تاریخ انقضاء کارت',
+ '514' => ' خطا در رایانامه درج شده',
+ '515' => ' خطا در کاراکترهای کپچا',
+ '516' => ' اطلاعات درخواست نامعتبر میباشد',
+ '517' => 'خطا در شماره کارت',
+ '518' => 'تراکنش مورد نظر وجود ندارد.',
+ '519' => 'مشتری از پرداخت منصرف شده است',
+ '520' => 'مشتری در زمان مقرر پرداخت را انجام نداده است',
+ '521' => 'قبلا درخواست تائید با موفقیت ثبت شده است',
+ '522' => ' قبلا درخواست اصلاح تراکنش با موفقیت ثبت شده است',
+ '600' => 'لغو تراکنش',
+
+ ];
+}
diff --git a/src/Mellat/Mellat.php b/src/Mellat/Mellat.php
index 8b2d3a3f..341c534b 100644
--- a/src/Mellat/Mellat.php
+++ b/src/Mellat/Mellat.php
@@ -3,7 +3,7 @@
namespace Larabookir\Gateway\Mellat;
use DateTime;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\Enum;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
@@ -140,10 +140,10 @@ protected function sendPayRequest()
*/
protected function userPayment()
{
- $this->refId = Input::get('RefId');
- $this->trackingCode = Input::get('SaleReferenceId');
- $this->cardNumber = Input::get('CardHolderPan');
- $payRequestResCode = Input::get('ResCode');
+ $this->refId = Request::input('RefId');
+ $this->trackingCode = Request::input('SaleReferenceId');
+ $this->cardNumber = Request::input('CardHolderPan');
+ $payRequestResCode = Request::input('ResCode');
if ($payRequestResCode == '0') {
return true;
diff --git a/src/Parsian/Parsian.php b/src/Parsian/Parsian.php
index 7fa337bd..cd2e93fb 100644
--- a/src/Parsian/Parsian.php
+++ b/src/Parsian/Parsian.php
@@ -2,7 +2,8 @@
namespace Larabookir\Gateway\Parsian;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
+use Illuminate\Validation\Rules\In;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
use Larabookir\Gateway\PortInterface;
@@ -14,10 +15,11 @@ class Parsian extends PortAbstract implements PortInterface
*
* @var string
*/
- protected $serverUrl = 'https://pec.shaparak.ir/NewIPGServices/Sale/SaleService.asmx?wsdl';
- protected $serverUrlConfirm = 'https://pec.shaparak.ir/NewIPGServices/Confirm/ConfirmService.asmx?wsdl';
+ protected $serverUrl = 'https://pec.shaparak.ir/NewIPGServices/Sale/SaleService.asmx?wsdl';
+ protected $serverUrlConfirm = "https://pec.shaparak.ir/NewIPGServices/Confirm/ConfirmService.asmx?WSDL";
- /**
+
+ /**
* Address of gate for redirect
*
* @var string
@@ -89,7 +91,7 @@ function getCallback()
/**
* Send pay request to parsian gateway
- *
+ *
* authority === Token
* @return bool
*
@@ -100,20 +102,16 @@ protected function sendPayRequest()
$this->newTransaction();
$params = array(
- "requestData" => array(
- 'LoginAccount' => $this->config->get('gateway.parsian.pin'),
- 'Amount' => $this->amount,
- 'OrderId' => $this->transactionId(),
- 'CallBackUrl' => $this->getCallback(),
- 'AdditionalData' => '',
- // 'authority' => 0,
- // 'status' => 1
- )
+ 'LoginAccount' => $this->config->get('gateway.parsian.pin'),
+ 'Amount' => $this->amount . "",
+ 'OrderId' => $this->transactionId(),
+ 'CallBackUrl' => $this->getCallback(),
+ 'AdditionalData' => ""
);
try {
$soap = new SoapClient($this->serverUrl);
- $response = $soap->SalePaymentRequest($params);
+ $response = $soap->SalePaymentRequest(["requestData" => $params]);
} catch (\SoapFault $e) {
$this->transactionFailed();
@@ -154,18 +152,15 @@ protected function sendPayRequest()
/**
* Verify payment
- * @authority == Token
* @throws ParsianErrorException
*/
protected function verifyPayment()
{
- if (!Input::has('status') && !Input::has('Token')
- || Input::has('status') && Input::get('status') == 0
- || Input::has('Token') && Input::get('Token') == "")
- throw new ParsianErrorException('درخواست غیر معتبر', -1);
+ if (!Request::has('Token') && !Request::has('status'))
+ throw new ParsianErrorException('درخواست غیر معتبر', -1);
- $authority = Input::get('Token');
- $status = Input::get('status');
+ $authority = Request::input('Token');
+ $status = Request::input('status');
if ($status != 0) {
$errorMessage = ParsianResult::errorMessage($status);
@@ -177,38 +172,34 @@ protected function verifyPayment()
throw new ParsianErrorException('تراکنشی یافت نشد', -1);
$params = array(
- "requestData" => array(
- 'LoginAccount' => $this->config->get('gateway.parsian.pin'),
- 'Token' => $authority,
- // 'status' => 1
- )
+ 'LoginAccount' => $this->config->get('gateway.parsian.pin'),
+ 'Token' => $authority,
);
try {
- $soap = new SoapClient($this->serverUrlConfirm);
- $result = $soap->ConfirmPayment($params);
+ $soap = new SoapClient($this->serverUrlConfirm);
+ $result = $soap->ConfirmPayment([
+ "requestData" => $params
+ ]);
} catch (\SoapFault $e) {
throw new ParsianErrorException($e->getMessage(), -1);
}
- if ($result === false || !isset($result->ConfirmPaymentResult) || $result->ConfirmPaymentResult == "")
+ if ($result === false || !isset($result->ConfirmPaymentResult->Status))
throw new ParsianErrorException('پاسخ دریافتی از بانک نامعتبر است.', -1);
- if (!isset($result->ConfirmPaymentResult->status)
- || isset($result->ConfirmPaymentResult->status)
- && $result->ConfirmPaymentResult->status != 0
- || !isset($result->ConfirmPaymentResult->RRN)
- || $result->ConfirmPaymentResult->RRN == 0) {
- $errorMessage = ParsianResult::errorMessage($result->ConfirmPaymentResult->status);
+
+ if ($result->ConfirmPaymentResult->Status != 0) {
+ $errorMessage = ParsianResult::errorMessage($result->ConfirmPaymentResult->Status);
$this->transactionFailed();
- $this->newLog($result->status, $errorMessage);
- throw new ParsianErrorException($errorMessage, $result->ConfirmPaymentResult->status);
+ $this->newLog($result->ConfirmPaymentResult->Status, $errorMessage);
+ throw new ParsianErrorException($errorMessage, $result->ConfirmPaymentResult->Status);
}
$this->trackingCode = $result->ConfirmPaymentResult->RRN;
$this->cardNumber = $result->ConfirmPaymentResult->CardNumberMasked;
$this->transactionSucceed();
- $this->newLog($result->status, ParsianResult::errorMessage($result->status));
+ $this->newLog($result->ConfirmPaymentResult->Status, ParsianResult::errorMessage($result->ConfirmPaymentResult->Status));
}
}
diff --git a/src/Parsian/ParsianResult.php b/src/Parsian/ParsianResult.php
index 58bd7b40..0ea4b38c 100644
--- a/src/Parsian/ParsianResult.php
+++ b/src/Parsian/ParsianResult.php
@@ -5,41 +5,29 @@
class ParsianResult
{
-
- public static $errors = array(
- 0 => 'تراکنش با موفقیت انجام شد.',
- 1 => 'خطا در انجام تراکنش',
- 2 => 'بین عملیات وقفه افتاده است.',
- 10 => 'شماره کارت نامعتبر است.',
- 11 => 'کارت شما منقضی شده است',
- 12 => 'رمز کارت وارد شده اشتباه است',
- 13 => 'موجودی کارت شما کافی نیست',
- 14 => 'مبلغ تراکنش بیش از سقف مجاز پذیرنده است.',
- 15 => 'سقف مجاز روزانه شما کامل شده است.',
- 18 => 'این تراکنش قبلا تایید شده است',
- 20 => 'اطلاعات پذیرنده صحیح نیست.',
- 21 => 'invalid authority',
- 22 => 'اطلاعات پذیرنده صحیح نیست.',
- 30 => 'عملیات قبلا با موفقیت انجام شده است.',
- 34 => 'شماره تراکنش فروشنده درست نمی باشد.',
- -113 => 'پارامتر ورودی و یا برخی از خصوصیات آن خالی است و یا مقداردهی نشده است',
- -127 => 'آدرس IP معتبر نمی باشد',
- -32768 => 'خطای ناشناخته رخ داده است.',
- -1552 => 'برگشت تراکنش مجاز نمی باشد',
- -1551 => 'برگشت تراکنش قبلا انجام شده است.',
- -1550 => 'برگشت تراکنش در وضعیت جاری امکان پذیر نمی باشد.',
- -1549 => 'زمان مجاز برای درخواست برگشت تراکنش به تمام رسیده است.',
- -1540 => 'تایید تراکنش ناموفق می باشد.',
- -1533 => 'تراکنش قبلا تایید شده است.',
- -1532 => 'تراکنش از سوی پذیرنده تایید شد.',
- -1531 => 'تایید تراکنش ناموفق امکان پذیر نمی باشد.',
- -1530 => 'پذیرنده مجاز به تایید این تراکنش نمی باشد.',
- -1528 => 'اطلاعات پرداخت یافت نشد.',
- -1527 => 'انجام عملیات درخواست پرداخت تراکنش.',
- -138 => 'عملیات پرداخت توسط کاربر لغو شد.',
- -131 => 'توکن نامعتبر می باشد.',
- -130 => 'زمان توکن منقضی شده است',
- );
+ public static $errors
+ = [
+ -32768 => "خطاي ناشناخته رخ داده است",
+ -32768 => "خطاي ناشناخته رخ داده است",
+ -1552 => "برگشت تراکنش مجاز نمی باشد",
+ -1551 => "برگشت تراکنش قب ًلا انجام شده است",
+ -138 => "عملیات پرداخت توسط کاربر لغو شد",
+ 0 => 'تراکنش با موفقیت انجام شد.',
+ 1 => 'خطا در انجام تراکنش',
+ 2 => 'بین عملیات وقفه افتاده است.',
+ 10 => 'شماره کارت نامعتبر است.',
+ 11 => 'کارت شما منقضی شده است',
+ 12 => 'رمز کارت وارد شده اشتباه است',
+ 13 => 'موجودی کارت شما کافی نیست',
+ 14 => 'مبلغ تراکنش بیش از سقف مجاز پذیرنده است.',
+ 15 => 'سقف مجاز روزانه شما کامل شده است.',
+ 18 => 'این تراکنش قبلا تایید شده است',
+ 20 => 'اطلاعات پذیرنده صحیح نیست.',
+ 21 => 'invalid authority',
+ 22 => 'اطلاعات پذیرنده صحیح نیست.',
+ 30 => 'عملیات قبلا با موفقیت انجام شده است.',
+ 34 => 'شماره تراکنش فروشنده درست نمی باشد.',
+ ];
public static function errorMessage($errorId)
{
diff --git a/src/Pasargad/Parser.php b/src/Pasargad/Parser.php
index fc8b2021..3e944720 100644
--- a/src/Pasargad/Parser.php
+++ b/src/Pasargad/Parser.php
@@ -1,7 +1,7 @@
Input::get('iN'),
- "invoiceDate" => Input::get('iD')
+ "invoiceNumber" => Request::input('iN'),
+ "invoiceDate" => Request::input('iD')
];
foreach ($values as $key => $val) {
diff --git a/src/Pasargad/Pasargad.php b/src/Pasargad/Pasargad.php
index c6c9a861..792c2160 100644
--- a/src/Pasargad/Pasargad.php
+++ b/src/Pasargad/Pasargad.php
@@ -2,7 +2,7 @@
namespace Larabookir\Gateway\Pasargad;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\Enum;
use Larabookir\Gateway\Parsian\ParsianErrorException;
use Larabookir\Gateway\PortAbstract;
@@ -126,7 +126,7 @@ protected function sendPayRequest($payment_id, $callback_url)
protected function verifyPayment()
{
$fields = array(
- 'invoiceUID' => Input::get('tref'),
+ 'invoiceUID' => Request::input('tref'),
);
$result = Parser::post2https($fields, $this->checkTransactionUrl);
diff --git a/src/Payir/Payir.php b/src/Payir/Payir.php
index 1f8e1d31..66328230 100644
--- a/src/Payir/Payir.php
+++ b/src/Payir/Payir.php
@@ -1,7 +1,7 @@
cardNumber = Input::get('cardNumber');
- $message = Input::get('message');
+ $status = Request::input('status');
+ $transId = Request::input('transId');
+ $this->cardNumber = Request::input('cardNumber');
+ $message = Request::input('message');
if (is_numeric($status) && $status > 0) {
$this->trackingCode = $transId;
return true;
diff --git a/src/Payline/Payline.php b/src/Payline/Payline.php
index b10f4fa0..7ea98146 100644
--- a/src/Payline/Payline.php
+++ b/src/Payline/Payline.php
@@ -2,7 +2,7 @@
namespace Larabookir\Gateway\Payline;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\Enum;
use Larabookir\Gateway\PortAbstract;
use Larabookir\Gateway\PortInterface;
@@ -141,8 +141,8 @@ protected function sendPayRequest()
*/
protected function userPayment()
{
- $this->refIf = Input::get('id_get');
- $trackingCode = Input::get('trans_id');
+ $this->refIf = Request::input('id_get');
+ $trackingCode = Request::input('trans_id');
if (is_numeric($trackingCode) && $trackingCode > 0) {
$this->trackingCode = $trackingCode;
diff --git a/src/Paypal/Paypal.php b/src/Paypal/Paypal.php
index d5d46391..fbf3bc5f 100644
--- a/src/Paypal/Paypal.php
+++ b/src/Paypal/Paypal.php
@@ -5,7 +5,7 @@
use Larabookir\Gateway\Mellat\MellatException;
use Larabookir\Gateway\Enum;
use Larabookir\Gateway\Paypal\PaypalException;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\PortAbstract;
use Larabookir\Gateway\PortInterface;
use PayPal\Api\Amount;
@@ -186,9 +186,9 @@ public function sendPayRequest()
*/
protected function userPayment()
{
- $this->refId = Input::get('PayerID');
+ $this->refId = Request::input('PayerID');
$this->transactionSetRefId();
- $this->trackingCode = Input::get('token');
+ $this->trackingCode = Request::input('token');
}
/**
diff --git a/src/PortAbstract.php b/src/PortAbstract.php
index e5d42e44..bccbf060 100644
--- a/src/PortAbstract.php
+++ b/src/PortAbstract.php
@@ -59,6 +59,13 @@ abstract class PortAbstract
*/
protected $description;
+ /**
+ * Custom Invoice Number of transaction
+ *
+ * @var string
+ */
+ protected $customInvoiceNo;
+
/**
* callback URL
*
@@ -98,7 +105,7 @@ function setConfig($config)
/**
* @return mixed
*/
- function getTable()
+ function getTable()
{
return $this->db->table($this->config->get('gateway.table'));
}
@@ -153,6 +160,28 @@ function getCustomDesc ()
return $this->description;
}
+ /**
+ * Set custom Invoice number on current transaction
+ *
+ * @param string $description
+ *
+ * @return void
+ */
+ function setCustomInvoiceNo ($invoiceNo)
+ {
+ $this->customInvoiceNo = $invoiceNo;
+ }
+
+ /**
+ * Get custom Invoice number of current transaction
+ *
+ * @return string | null
+ */
+ function getCustomInvoiceNo ()
+ {
+ return $this->customInvoiceNo;
+ }
+
/**
* Return card number
*
@@ -362,6 +391,7 @@ protected function url_modify($changes, $url)
return (!empty($url_array['scheme']) ? $url_array['scheme'] . '://' : null) .
(!empty($url_array['host']) ? $url_array['host'] : null) .
(!empty($url_array['port']) ? ':' . $url_array['port'] : null) .
- $url_array['path'] . '?' . http_build_query($query_array);
+ (!empty($url_array['path']) ? $url_array['path'] : null) .
+ '?' . http_build_query($query_array);
}
}
diff --git a/src/Saman/Saman.php b/src/Saman/Saman.php
index 0a9ec02f..5fa9ccdf 100644
--- a/src/Saman/Saman.php
+++ b/src/Saman/Saman.php
@@ -2,7 +2,8 @@
namespace Larabookir\Gateway\Saman;
-use Illuminate\Support\Facades\Input;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\Request;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
use Larabookir\Gateway\PortInterface;
@@ -22,7 +23,12 @@ class Saman extends PortAbstract implements PortInterface
*
* @var string
*/
- protected $serverUrl = 'https://sep.shaparak.ir/payments/referencepayment.asmx?wsdl';
+
+// protected $serverVerifyUrl = "https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL";
+ protected $serverVerifyUrl = "http://banktest.ir/gateway/saman/payments/referencepayment?wsdl";
+
+// protected $gateUrl = "https://sep.shaparak.ir/Payment.aspx";
+ protected $gateUrl = "http://banktest.ir/gateway/saman/gate";
/**
* {@inheritdoc}
@@ -55,7 +61,7 @@ function setOptionalData (Array $data)
{
$this->optional_data = $data;
}
-
+
/**
* {@inheritdoc}
@@ -70,8 +76,8 @@ public function redirect()
];
$data = array_merge($main_data, $this->optional_data);
-
- return \View::make('gateway::saman-redirector')->with($data);
+
+ return \View::make('gateway::saman-redirector')->with($data)->with('gateUrl',$this->gateUrl);
}
/**
@@ -121,11 +127,18 @@ function getCallback()
*/
protected function userPayment()
{
- $this->refId = Input::get('RefNum');
- $this->trackingCode = Input::get('TRACENO');
- $this->cardNumber = Input::get('SecurePan');
- $payRequestRes = Input::get('State');
- $payRequestResCode = Input::get('StateCode');
+ $this->trackingCode = Request::input('TRACENO');
+ // $this->cardNumber = Request::input('SecurePan'); , will cause mysql error : Data too long for column 'card_number' !
+ $payRequestRes = Request::input('State');
+ $payRequestResCode = Request::input('Status');
+
+ $this->refId = Request::input('RefNum');
+ $this->getTable()->whereId($this->transactionId)->update([
+ 'ref_id' => $this->refId,
+ 'tracking_code' => $this->trackingCode,
+ // 'card_number' => $this->cardNumber, will cause mysql error : Data too long for column 'card_number' !
+ 'updated_at' => Carbon::now(),
+ ]);
if ($payRequestRes == 'OK') {
return true;
@@ -153,9 +166,8 @@ protected function verifyPayment()
"password" => $this->config->get('gateway.saman.password'),
);
-
try {
- $soap = new SoapClient($this->serverUrl);
+ $soap = new SoapClient($this->serverVerifyUrl);
$response = $soap->VerifyTransaction($fields["RefNum"], $fields["merchantID"]);
} catch (\SoapFault $e) {
@@ -167,18 +179,14 @@ protected function verifyPayment()
$response = intval($response);
if ($response == $this->amount) {
- $this->transactionSucceed([
- 'ref_id' => $this->refId,
- 'tracking_code' => $this->trackingCode,
- 'card_number' => $this->cardNumber
- ]);
+ $this->transactionSucceed();
return true;
}
//Reverse Transaction
if($response>0){
try {
- $soap = new SoapClient($this->serverUrl);
+ $soap = new SoapClient($this->serverVerifyUrl);
$response = $soap->ReverseTransaction($fields["RefNum"], $fields["merchantID"], $fields["password"], $response);
} catch (\SoapFault $e) {
@@ -193,7 +201,7 @@ protected function verifyPayment()
$this->transactionFailed();
$this->newLog($response, SamanException::$errors[$response]);
throw new SamanException($response);
-
+
}
diff --git a/src/Saman/SamanException.php b/src/Saman/SamanException.php
index 6d52bd37..d8663f80 100644
--- a/src/Saman/SamanException.php
+++ b/src/Saman/SamanException.php
@@ -11,6 +11,9 @@ class SamanException extends BankException
"OK" => "پرداخت با موفقیت انجام شد",
'Canceled By User' => 'تراکنش توسط خریدار کنسل شد',
'Invalid Amount' => 'مبلغ سند برگشتی از مبلغ تراکنش اصلی بیشتر است',
+ 'Merchant Invalid' => 'پذیرنده فروشگاهی نامعتبر است',
+ 'Do Not Honour' => 'از انجام تراکنش صرف نظر شد',
+ 'Honour With Identification' => 'با تشخیص هویت دارنده کارت،تراکنش موفق می باشد',
'Invalid Transaction' => 'درخواست برگشت تراکنش رسیده است در حالی که تراکنش اصلی پیدا نمی شود',
'Invalid Card Number' => 'شماره کارت اشتباه است',
'No Such Issuer' => 'چنین صادر کننده کارتی وجود ندارد',
diff --git a/src/Zarinpal/Zarinpal.php b/src/Zarinpal/Zarinpal.php
index dc70f22a..7b436110 100644
--- a/src/Zarinpal/Zarinpal.php
+++ b/src/Zarinpal/Zarinpal.php
@@ -3,7 +3,7 @@
namespace Larabookir\Gateway\Zarinpal;
use DateTime;
-use Illuminate\Support\Facades\Input;
+use Illuminate\Support\Facades\Request;
use Larabookir\Gateway\Enum;
use SoapClient;
use Larabookir\Gateway\PortAbstract;
@@ -207,8 +207,8 @@ protected function sendPayRequest()
*/
protected function userPayment()
{
- $this->authority = Input::get('Authority');
- $status = Input::get('Status');
+ $this->authority = Request::input('Authority');
+ $status = Request::input('Status');
if ($status == 'OK') {
return true;
diff --git a/views/irankish-redirector.blade.php b/views/irankish-redirector.blade.php
new file mode 100644
index 00000000..09e20318
--- /dev/null
+++ b/views/irankish-redirector.blade.php
@@ -0,0 +1,206 @@
+= 1000)
+ {
+ if(!empty($_POST['fullname']))
+ {
+ $_SESSION['merchantId'] = $MerchantId;
+ $_SESSION['sha1Key'] = $sha1Key;
+ $_SESSION['admin_email'] = $admin_email;
+ $_SESSION['amount'] =$_POST['PayAmount'] ;
+ $_SESSION['PayOrderId'] =$_POST['PayOrderId'];
+ $_SESSION['fullname'] =$_POST['fullname'];
+ $_SESSION['email'] =$_POST['email'];
+ $revertURL = 'http://'.$_SERVER[HTTP_HOST].dirname($_SERVER[PHP_SELF]).'/back.php';
+
+ $client = new SoapClient('https://ikc.shaparak.ir/XToken/Tokens.xml', array('soap_version' => SOAP_1_1));
+
+ $params['amount'] = $_SESSION['amount'];
+ $params['merchantId'] = $MerchantId;
+ $params['invoiceNo'] = $_POST['PayOrderId'];
+ $params['paymentId'] = $_POST['PayOrderId'];
+ $params['specialPaymentId'] = $_POST['PayOrderId'];
+ $params['revertURL'] = $revertURL;
+ $params['description'] = "";
+ $result = $client->__soapCall("MakeToken", array($params));
+ $_SESSION['token'] = $result->MakeTokenResult->token;
+ $data['token'] = $_SESSION['token'];
+ $data['merchantId'] = $_SESSION['merchantId'];
+ redirect_post('https://ikc.shaparak.ir/TPayment/Payment/index',$data);
+ }
+ else
+ {
+ $Err .='نام را وارد کنید
';
+ }
+ }else
+ {
+ $Err .='مبلغ صحیح نیست
';
+ }
+
+}
+function redirect_post($url, array $data)
+{
+
+ echo '
+
+ در حال اتصال ...
+
+
+
+
+ ';
+ echo '
+
درحال اتصال به درگاه بانک
+
+ ';
+
+ exit;
+}
+?>
+
+
+
+
+ پرداخت ساده ایرانکیش
+
+
+
+
+
+ www.softiran.org
+
+
+
+
+
+
+
+
+
+
+
+
+