Skip to content

Commit

Permalink
Merge pull request #4 from hans-thomas/analysis-6V1laP
Browse files Browse the repository at this point in the history
Apply fixes from StyleCI
  • Loading branch information
hans-thomas authored Sep 3, 2023
2 parents dd1f097 + 6e38a88 commit 4b0411e
Show file tree
Hide file tree
Showing 6 changed files with 340 additions and 333 deletions.
76 changes: 38 additions & 38 deletions src/Contracts/Gateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,51 @@

namespace Hans\Lyra\Contracts;

use GuzzleHttp\Client;

abstract class Gateway
{
protected readonly array $settings;
protected readonly Client $client;
protected readonly string $mode;

public function __construct(
protected readonly int $amount,
string $mode = null
) {
$this->settings = lyra_config('gateways.'.static::class);
$this->client = new Client(['http_errors' => false]);
if ($mode and key_exists($mode, $this->settings['modes'])) {
$this->mode = $mode;
} else {
$this->mode = $this->settings['mode'] ?? 'normal';
}
use GuzzleHttp\Client;

abstract class Gateway
{
protected readonly array $settings;
protected readonly Client $client;
protected readonly string $mode;

public function __construct(
protected readonly int $amount,
string $mode = null
) {
$this->settings = lyra_config('gateways.'.static::class);
$this->client = new Client(['http_errors' => false]);
if ($mode and key_exists($mode, $this->settings['modes'])) {
$this->mode = $mode;
} else {
$this->mode = $this->settings['mode'] ?? 'normal';
}
}

abstract public function request(): string;

abstract public function pay(string $token): string;
abstract public function request(): string;

abstract public function verify(): bool;
abstract public function pay(string $token): string;

abstract public function errorsList(): array;
abstract public function verify(): bool;

protected function apis(): array
{
return $this->settings['modes'][$this->mode] ?? [];
}
abstract public function errorsList(): array;

public function isSandboxEnabled(): bool
{
return $this->mode == 'sandbox';
}
protected function apis(): array
{
return $this->settings['modes'][$this->mode] ?? [];
}

protected function translateError(int $code, string $default = 'Failed to process the request!'): string
{
if (key_exists($code, $this->errorsList())) {
return $this->errorsList()[$code];
}
public function isSandboxEnabled(): bool
{
return $this->mode == 'sandbox';
}

return $default;
protected function translateError(int $code, string $default = 'Failed to process the request!'): string
{
if (key_exists($code, $this->errorsList())) {
return $this->errorsList()[$code];
}

return $default;
}
}
9 changes: 5 additions & 4 deletions src/Exceptions/LyraErrorCode.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?php

namespace Hans\Lyra\Exceptions;
namespace Hans\Lyra\Exceptions;

class LyraErrorCode {
public const DEFAULT_GATEWAY_NOT_FOUNT = 'LyraEC0';
}
class LyraErrorCode
{
public const DEFAULT_GATEWAY_NOT_FOUNT = 'LyraEC0';
}
38 changes: 20 additions & 18 deletions src/Exceptions/LyraException.php
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
<?php

namespace Hans\Lyra\Exceptions;
namespace Hans\Lyra\Exceptions;

use Exception;
use Throwable;
use Exception;
use Throwable;

class LyraException extends Exception {
private int|string $errorCode;
class LyraException extends Exception
{
private int|string $errorCode;

public function __construct(string $message, int|string $errorCode, int $responseCode = 500, Throwable $previous = null)
{
parent::__construct($message, $responseCode, $previous);
$this->errorCode = $errorCode;
}
public function __construct(string $message, int|string $errorCode, int $responseCode = 500, Throwable $previous = null)
{
parent::__construct($message, $responseCode, $previous);
$this->errorCode = $errorCode;
}

public static function make( string $message, int|string $errorCode, int $responseCode = 500, Throwable $previous = null ):self {
return new self( $message,$errorCode, $responseCode, $previous );
}
public static function make(string $message, int|string $errorCode, int $responseCode = 500, Throwable $previous = null): self
{
return new self($message, $errorCode, $responseCode, $previous);
}

public function getErrorCode(): int|string
{
return $this->errorCode;
}
}
public function getErrorCode(): int|string
{
return $this->errorCode;
}
}
230 changes: 115 additions & 115 deletions src/Gateways/Payir.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,130 +2,130 @@

namespace Hans\Lyra\Gateways;

use Hans\Lyra\Contracts\Gateway;
use Hans\Lyra\Contracts\Gateway;

class Payir extends Gateway
class Payir extends Gateway
{
public function request(): string
{
public function request(): string
{
$data = array_diff_key(
$this->settings,
array_flip(['mode', 'modes'])
);
$data['amount'] = $this->amount;
$data = array_filter($data, fn ($item) => !empty($item));

if ($this->isSandboxEnabled()) {
$data['api'] = 'test';
}

$response = $this->client->post(
$this->apis()['purchase'],
[
'json' => $data,
'headers' => [
'Content-Type' => 'application/json',
],
]
)
->getBody()
->getContents();
$result = json_decode($response, true);

if ($result['status'] == 1) {
return $result['token'];
}

throw new \Exception($this->translateError($result['errorCode']));
$data = array_diff_key(
$this->settings,
array_flip(['mode', 'modes'])
);
$data['amount'] = $this->amount;
$data = array_filter($data, fn ($item) => !empty($item));

if ($this->isSandboxEnabled()) {
$data['api'] = 'test';
}

public function pay(string $token): string
{
return str_replace(
':token',
$token,
$this->apis()['payment']
);
$response = $this->client->post(
$this->apis()['purchase'],
[
'json' => $data,
'headers' => [
'Content-Type' => 'application/json',
],
]
)
->getBody()
->getContents();
$result = json_decode($response, true);

if ($result['status'] == 1) {
return $result['token'];
}

public function verify(): bool
{
$status = request('status');
$token = request('token');

if ($status != 1) {
// User canceled the purchase
return false;
}

if ($this->isSandboxEnabled()) {
return true;
}

// TODO: Compare $token with stored token on pay stage

$data = [
'api' => $this->settings['api'],
'token' => $token,
];

$response = $this->client->post(
$this->apis()['verification'],
[
'json' => $data,
'headers' => [
'Accept' => 'application/json',
],
]
)
->getBody()
->getContents();
$result = json_decode($response, true);

if ($result['status'] !== 1) {
return false;
}

// TransactionIdReceived

// TODO: If transId exists on DB, throw an error: -6
// TODO: Store transId on DB
throw new \Exception($this->translateError($result['errorCode']));
}

public function pay(string $token): string
{
return str_replace(
':token',
$token,
$this->apis()['payment']
);
}

public function verify(): bool
{
$status = request('status');
$token = request('token');

if ($status != 1) {
// User canceled the purchase
return false;
}

if ($this->isSandboxEnabled()) {
return true;
}

public function errorsList(): array
{
return [
'0' => 'درحال حاضر درگاه بانکی قطع شده و مشکل بزودی برطرف می شود',
'-1' => 'API Key ارسال نمی شود',
'-2' => 'Token ارسال نمی شود',
'-3' => 'API Key ارسال شده اشتباه است',
'-4' => 'امکان انجام تراکنش برای این پذیرنده وجود ندارد',
'-5' => 'تراکنش با خطا مواجه شده است',
'-6' => 'تراکنش تکراریست یا قبلا انجام شده',
'-7' => 'مقدار Token ارسالی اشتباه است',
'-8' => 'شماره تراکنش ارسالی اشتباه است',
'-9' => 'زمان مجاز برای انجام تراکنش تمام شده',
'-10' => 'مبلغ تراکنش ارسال نمی شود',
'-11' => 'مبلغ تراکنش باید به صورت عددی و با کاراکترهای لاتین باشد',
'-12' => 'مبلغ تراکنش می بایست عددی بین 10,000 و 500,000,000 ریال باشد',
'-13' => 'مقدار آدرس بازگشتی ارسال نمی شود',
'-14' => 'آدرس بازگشتی ارسالی با آدرس درگاه ثبت شده در شبکه پرداخت پی یکسان نیست',
'-15' => 'امکان وریفای وجود ندارد. این تراکنش پرداخت نشده است',
'-16' => 'یک یا چند شماره موبایل از اطلاعات پذیرندگان ارسال شده اشتباه است',
'-17' => 'میزان سهم ارسالی باید بصورت عددی و بین 1 تا 100 باشد',
'-18' => 'فرمت پذیرندگان صحیح نمی باشد',
'-19' => 'هر پذیرنده فقط یک سهم میتواند داشته باشد',
'-20' => 'مجموع سهم پذیرنده ها باید 100 درصد باشد',
'-21' => 'Reseller ID ارسالی اشتباه است',
'-22' => 'فرمت یا طول مقادیر ارسالی به درگاه اشتباه است',
'-23' => 'سوییچ PSP ( درگاه بانک ) قادر به پردازش درخواست نیست. لطفا لحظاتی بعد مجددا تلاش کنید',
'-24' => 'شماره کارت باید بصورت 16 رقمی، لاتین و چسبیده بهم باشد',
'-25' => 'امکان استفاده از سرویس در کشور مبدا شما وجود نداره',
'-26' => 'امکان انجام تراکنش برای این درگاه وجود ندارد',
'-27' => 'در انتظار تایید درگاه توسط شاپرک',
'-28' => 'امکان تسهیم تراکنش برای این درگاه وجود ندارد',
];
// TODO: Compare $token with stored token on pay stage

$data = [
'api' => $this->settings['api'],
'token' => $token,
];

$response = $this->client->post(
$this->apis()['verification'],
[
'json' => $data,
'headers' => [
'Accept' => 'application/json',
],
]
)
->getBody()
->getContents();
$result = json_decode($response, true);

if ($result['status'] !== 1) {
return false;
}

// TransactionIdReceived

// TODO: If transId exists on DB, throw an error: -6
// TODO: Store transId on DB

return true;
}

public function errorsList(): array
{
return [
'0' => 'درحال حاضر درگاه بانکی قطع شده و مشکل بزودی برطرف می شود',
'-1' => 'API Key ارسال نمی شود',
'-2' => 'Token ارسال نمی شود',
'-3' => 'API Key ارسال شده اشتباه است',
'-4' => 'امکان انجام تراکنش برای این پذیرنده وجود ندارد',
'-5' => 'تراکنش با خطا مواجه شده است',
'-6' => 'تراکنش تکراریست یا قبلا انجام شده',
'-7' => 'مقدار Token ارسالی اشتباه است',
'-8' => 'شماره تراکنش ارسالی اشتباه است',
'-9' => 'زمان مجاز برای انجام تراکنش تمام شده',
'-10' => 'مبلغ تراکنش ارسال نمی شود',
'-11' => 'مبلغ تراکنش باید به صورت عددی و با کاراکترهای لاتین باشد',
'-12' => 'مبلغ تراکنش می بایست عددی بین 10,000 و 500,000,000 ریال باشد',
'-13' => 'مقدار آدرس بازگشتی ارسال نمی شود',
'-14' => 'آدرس بازگشتی ارسالی با آدرس درگاه ثبت شده در شبکه پرداخت پی یکسان نیست',
'-15' => 'امکان وریفای وجود ندارد. این تراکنش پرداخت نشده است',
'-16' => 'یک یا چند شماره موبایل از اطلاعات پذیرندگان ارسال شده اشتباه است',
'-17' => 'میزان سهم ارسالی باید بصورت عددی و بین 1 تا 100 باشد',
'-18' => 'فرمت پذیرندگان صحیح نمی باشد',
'-19' => 'هر پذیرنده فقط یک سهم میتواند داشته باشد',
'-20' => 'مجموع سهم پذیرنده ها باید 100 درصد باشد',
'-21' => 'Reseller ID ارسالی اشتباه است',
'-22' => 'فرمت یا طول مقادیر ارسالی به درگاه اشتباه است',
'-23' => 'سوییچ PSP ( درگاه بانک ) قادر به پردازش درخواست نیست. لطفا لحظاتی بعد مجددا تلاش کنید',
'-24' => 'شماره کارت باید بصورت 16 رقمی، لاتین و چسبیده بهم باشد',
'-25' => 'امکان استفاده از سرویس در کشور مبدا شما وجود نداره',
'-26' => 'امکان انجام تراکنش برای این درگاه وجود ندارد',
'-27' => 'در انتظار تایید درگاه توسط شاپرک',
'-28' => 'امکان تسهیم تراکنش برای این درگاه وجود ندارد',
];
}
}
Loading

0 comments on commit 4b0411e

Please sign in to comment.