forked from a1gard/xshop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
PHP
101 lines
2.2 KiB
PHP
<?php
|
|
|
|
|
|
namespace App\Payment;
|
|
|
|
|
|
use App\Contracts\Payment;
|
|
|
|
class Parsian implements Payment
|
|
{
|
|
|
|
/**
|
|
* @var \Dpsoft\Parsian\Parsian
|
|
*/
|
|
private $gateway;
|
|
|
|
public function __construct(\Dpsoft\Parsian\Parsian $gateway)
|
|
{
|
|
$this->gateway = $gateway;
|
|
}
|
|
|
|
/**
|
|
* Get Payment name
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getName(): string
|
|
{
|
|
return 'parsian';
|
|
}
|
|
|
|
/**
|
|
* Get payment type must be one of: ONLINE, CHEQUE, CARD, CASH, CASH_ON_DELIVERY
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getType(): string
|
|
{
|
|
return 'ONLINE';
|
|
}
|
|
|
|
public static function isActive():bool
|
|
{
|
|
return !empty(config('payment.payment.parsian.pin'));
|
|
}
|
|
|
|
/**
|
|
* Request online payment
|
|
*
|
|
* @param int $amount transaction amount
|
|
* @param string $callbackUrl a url that callback user after transaction
|
|
* @param array $additionalData additional data to send back
|
|
* @return array request data like token and order id
|
|
* @throws \Throwable
|
|
*/
|
|
public function request(int $amount, string $callbackUrl, array $additionalData = []): array
|
|
{
|
|
return $this->gateway->request($amount, $callbackUrl);
|
|
|
|
}
|
|
|
|
/**
|
|
* Redirect customer to bank payment page
|
|
*/
|
|
public function goToBank()
|
|
{
|
|
return redirect()->away($this->gateway->getPaymentUrl());
|
|
}
|
|
|
|
/**
|
|
* Verify payment
|
|
* @return array successful payment result like token or orderId
|
|
* @throws \Throwable if payment fail
|
|
*/
|
|
public function verify(): array
|
|
{
|
|
$response = $this->gateway->verify();
|
|
return [
|
|
'reference_id' => $response['RRN'],
|
|
'card_number' => $response['hash_card_number'],
|
|
];
|
|
}
|
|
|
|
public static function registerService()
|
|
{
|
|
app()->singleton(
|
|
'parsian-gateway',
|
|
function () {
|
|
$gateway = new \Dpsoft\Parsian\Parsian(config('payment.payment.parsian.pin'));
|
|
|
|
return new Parsian($gateway);
|
|
}
|
|
);
|
|
}
|
|
|
|
public static function getLogo()
|
|
{
|
|
return asset('payment/image/parsian.png');
|
|
}
|
|
}
|