classify admin
This commit is contained in:
132
app/Services/Payment/PaystackPayment.php
Normal file
132
app/Services/Payment/PaystackPayment.php
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Payment;
|
||||
|
||||
use RuntimeException;
|
||||
use Throwable;
|
||||
use Unicodeveloper\Paystack\Paystack;
|
||||
|
||||
class PaystackPayment extends Paystack implements PaymentInterface {
|
||||
private Paystack $paystack;
|
||||
private string $currencyCode;
|
||||
|
||||
/**
|
||||
* PaystackPayment constructor.
|
||||
* @param $currencyCode
|
||||
*/
|
||||
public function __construct($currencyCode) {
|
||||
// Call Paystack Class and Create Payment Intent
|
||||
$this->paystack = new Paystack();
|
||||
$this->currencyCode = $currencyCode;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $amount
|
||||
* @param $customMetaData
|
||||
* @return array
|
||||
*/
|
||||
public function createPaymentIntent($amount, $customMetaData) {
|
||||
|
||||
try {
|
||||
|
||||
if (empty($customMetaData['email'])) {
|
||||
throw new RuntimeException("Email cannot be empty");
|
||||
}
|
||||
if($customMetaData['platform_type'] == 'app') {
|
||||
$callbackUrl = route('paystack.success') ;
|
||||
}else{
|
||||
$callbackUrl = route('paystack.success.web');
|
||||
}
|
||||
|
||||
$finalAmount = $amount * 100;
|
||||
$reference = $this->genTranxRef();
|
||||
|
||||
|
||||
$data = [
|
||||
'amount' => $finalAmount,
|
||||
'currency' => $this->currencyCode,
|
||||
'email' => $customMetaData['email'],
|
||||
'metadata' => $customMetaData,
|
||||
'reference' => $reference,
|
||||
'callback_url' => $callbackUrl
|
||||
];
|
||||
|
||||
return $this->paystack->getAuthorizationResponse($data);
|
||||
|
||||
} catch (Throwable $e) {
|
||||
throw new RuntimeException($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $amount
|
||||
* @param $customMetaData
|
||||
* @return array
|
||||
*/
|
||||
public function createAndFormatPaymentIntent($amount, $customMetaData): array {
|
||||
$response = $this->createPaymentIntent($amount, $customMetaData);
|
||||
return $this->format($response, $amount, $this->currencyCode, $customMetaData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $paymentId
|
||||
* @return array
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function retrievePaymentIntent($paymentId): array {
|
||||
try {
|
||||
$relativeUrl = "/transaction/verify/{$paymentId}";
|
||||
$this->response = $this->client->get($this->baseUrl . $relativeUrl, []);
|
||||
$response = json_decode($this->response->getBody(), true, 512, JSON_THROW_ON_ERROR);
|
||||
return $this->format($response['data'], $response['data']['amount'], $response['data']['currency'], $response['data']['metadata']);
|
||||
} catch (Throwable $e) {
|
||||
throw new RuntimeException($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $currency
|
||||
* @param $amount
|
||||
*/
|
||||
public function minimumAmountValidation($currency, $amount) {
|
||||
// TODO: Implement minimumAmountValidation() method.
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $paymentIntent
|
||||
* @param $amount
|
||||
* @param $currencyCode
|
||||
* @param $metadata
|
||||
* @return array
|
||||
*/
|
||||
public function format($paymentIntent, $amount, $currencyCode, $metadata) {
|
||||
return $this->formatPaymentIntent($paymentIntent['data']['reference'], $amount, $currencyCode, $paymentIntent['status'], $metadata, $paymentIntent);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
* @param $amount
|
||||
* @param $currency
|
||||
* @param $status
|
||||
* @param $metadata
|
||||
* @param $paymentIntent
|
||||
* @return array
|
||||
*/
|
||||
public function formatPaymentIntent($id, $amount, $currency, $status, $metadata, $paymentIntent): array {
|
||||
return [
|
||||
'id' => $id,
|
||||
'amount' => $amount,
|
||||
'currency' => $currency,
|
||||
'metadata' => $metadata,
|
||||
'status' => match ($status) {
|
||||
"abandoned" => "failed",
|
||||
"succeed" => "succeed",
|
||||
default => $status ?? true
|
||||
},
|
||||
'payment_gateway_response' => $paymentIntent
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user