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'); } }