Viewing file: PaystackPayment.php (5.26 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\TopUpProvider;
use App\Models\BillingRequest;
use App\Models\Customer;
use App\Models\Number;
use App\Models\NumberRequest;
use App\Models\Plan;
use App\Models\TopUpRequest;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Log;
use Modules\PaymentGateway\Services\PaymentCredentials;
use Unicodeveloper\Paystack\Paystack;
class PaystackPayment implements PaymentInterface
{
public $planReq;
public $redirect_url;
public $error_message;
public $return_view;
public $will_redirect= false;
public function __construct()
{
}
public function pay()
{
// TODO: Implement pay() method.
}
public function getCredentials()
{
$credentials= PaymentCredentials::get();
if (!isset($credentials->paystack_status) || !$credentials->paystack_merchant_email || !$credentials->paystack_payment_url || !$credentials->paystack_public_key || !$credentials->paystack_secret_key || $credentials->paystack_status != 'active') {
throw new \Exception(trans('Invalid Payment'));
}
return $credentials;
}
public function topUpRequest($topup_request){
$this->topup_request=$topup_request;
return $this;
}
public function request($request)
{
$this->request = $request;
return $this;
}
public function amount($amount)
{
$this->amount = $amount;
return $this;
}
public function will_redirect()
{
// TODO: Implement will_redirect() method.
return $this->will_redirect;
}
public function redirect_url()
{
// TODO: Implement redirect_url() method.
return $this->redirect_url;
}
public function return_view()
{
// TODO: Implement redirect_url() method.
return $this->return_view;
}
public function error_message()
{
// TODO: Implement error_message() method.
return $this->error_message;
}
public function process()
{
$paystackData = $this->payStackPayment($this->amount, $this->topup_request);
if ($paystackData) {
$this->redirect_url = $paystackData;
$this->will_redirect = true;
$this->return_view = null;
}
}
function payStackPayment($amount, $topup_request)
{
$credentials = json_decode(get_settings('payment_gateway'));
$topUpReq = TopUpRequest::find($topup_request->id);
if (!$topUpReq || !$amount || !isset($credentials->paystack_public_key) || !$credentials->paystack_secret_key || $credentials->paystack_status != 'active') {
throw new \Exception(trans('layout.message.invalid_payment'));
}
$url = isset($credentials->paystack_payment_url)?$credentials->paystack_payment_url:"https://api.paystack.co/transaction/initialize";
$fields = [
'email' => auth('customer')->user()->email,
'amount' => $amount * 100,
'callback_url'=>route('paymentgateway::topup.paystack.process',['topup_req'=>$topUpReq->id]),
];
$fields_string = http_build_query($fields);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization: Bearer $credentials->paystack_secret_key",
"Cache-Control: no-cache",
));
//So that curl_exec returns the contents of the cURL; rather than echoing it
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
//execute post
$result = curl_exec($ch);
$result= json_decode($result);
if (isset($result->data) && isset($result->data->authorization_url)){
return $result->data->authorization_url;
}else{
throw new \Exception('Unauthorized payment url');
}
}
public function processPaystackPayment(Request $request)
{
$credentials= PaymentCredentials::get();
if (!isset($credentials->paystack_public_key) || !$credentials->paystack_secret_key || $credentials->paystack_status != 'active') {
throw new \Exception(trans('Invalid Request'));
}
$data = [
'secretKey' => $credentials->paystack_secret_key,
'publicKey' => $credentials->paystack_public_key,
'paymentUrl' => $credentials->paystack_payment_url
];
if ($credentials->paystack_merchant_email) {
$data['merchantEmail'] = $credentials->paystack_merchant_email;
}
Config::set('paystack', $data);
$paymentDetails = paystack()->getPaymentData();
if (isset($paymentDetails['data']) && isset($paymentDetails['data']['id'])) {
Log::info("Meta data not found");
$this->error_message= 'Meta data not found';
exit;
} else {
$this->error_message= trans('Invalid payment');
}
}
}
|