Viewing file: PaystackPayment.php (4.32 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\WHNPurchaseGateway;
use App\Models\BillingRequest;
use App\Models\Customer;
use App\Models\Number;
use App\Models\NumberRequest;
use App\Models\Plan;
use App\Models\WhatsAppNumber;
use App\Models\WhatsAppNumberRequest;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Log;
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 = json_decode(get_settings('payment_gateway'));
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 request($request)
{
$this->request = $request;
return $this;
}
public function number($number)
{
$this->number = $number;
return $this;
}
public function number_request($planReq)
{
$this->numb_request = $planReq;
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->planReq, $this->request, $this->number_request);
if ($paystackData) {
$this->redirect_url = $paystackData;
$this->will_redirect = true;
$this->return_view = null;
}
}
function payStackPayment($wNumber, $request, $numberRequest)
{
$credentials = json_decode(get_settings('payment_gateway'));
$number = WhatsAppNumber::find($wNumber->id);
$numberReq = WhatsAppNumberRequest::find($numberRequest->id);
if (!$numberReq || !$number || !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' => $number->sell_price * 100,
'callback_url'=>route('paymentgateway::whatsapp.number.payment.paystack.process',['number_req'=>$numberReq->id,'number'=>$number->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');
}
}
}
|