phpcodeignitercodeigniter-2

Integrate wepay SDK library to work with codeigniter2.2


I am working with a application using codeigniter 2.2 but now I am encountering a problem with integrating wepay library wepay.php into codeigniter library. Any help would be appreciated Here is the current library provided by wepay. I have tried to integrate wepay.php into codeigniter but it gives white screen. I think there is an issue with multiple classes being defined in wepay.php and I dont know how to handle this in codeigniter

Openaccount.php file:

    <?php
require './_shared.php';
?>
<h1>WePay Demo App: Open Account</h1>
<a href="index.php">Back</a>
<br />

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['account_name']) && isset($_POST['account_description'])) {
        // WePay sanitizes its own data, but displaying raw POST data on your own site is a XSS security hole.
        $name = htmlentities($_POST['account_name']);
        $desc = htmlentities($_POST['account_description']);
        try {
            $wepay = new WePay('STAGE_5cdbb3fa32af0ccaef97328542d5e2a0a7f61263ed2bcd79c9f29c2d5e0d85e6');
            $account = $wepay->request('account/create', array(
                'name' => $name,
                'description' => $desc,
            ));
            echo "Created account $name for '$desc'! View on WePay at <a href=\"$account->account_uri\">$account->account_uri</a>. See all of your accounts <a href=\"accountlist.php\">here</a>.";
        }
        catch (WePayException $e) {
            // Something went wrong - normally you would log
            // this and give your user a more informative message
            echo $e->getMessage();
        }
    }
    else {
        echo 'Account name and description are both required.';
    }
}
?>

<form method="post">
    <fieldset>
        <legend>Account Info</legend>

        <label for="account_name">Account Name:</label><br />
        <input type="text" id="account_name" name="account_name" placeholder="Ski Trip Savings"/>

        <br /><br />

        <label for="account_description">Account Description: </label><br />
        <textarea name="account_description" rows="10" cols="40" placeholder="Saving up some dough for our ski trip!"></textarea>

        <br /><br />

        <input type="submit" value="Open account" />
    </fieldset>
</form>

shared.php file:

    <?php
require '../wepay.php';
Wepay::useStaging('34218', '7c09762bbe','2014-01-08');
session_start();
    ?>

Please have a look at the bottom of wepay.php it is multiple classes defined in one class.

wepay.php contents

    <?php

class WePay {

    /**
     * Version number - sent in user agent string
     */
    const VERSION = '0.2.1';

    /**
     * Scope fields
     * Passed into Wepay::getAuthorizationUri as array
     */
    const SCOPE_MANAGE_ACCOUNTS     = 'manage_accounts';     // Open and interact with accounts
    const SCOPE_COLLECT_PAYMENTS    = 'collect_payments';    // Create and interact with checkouts
    const SCOPE_VIEW_USER           = 'view_user';           // Get details about authenticated user
    const SCOPE_PREAPPROVE_PAYMENTS = 'preapprove_payments'; // Create and interact with preapprovals
    const SCOPE_MANAGE_SUBSCRIPTIONS   = 'manage_subscriptions'; // Subscriptions
    const SCOPE_SEND_MONEY          = 'send_money';          // For withdrawals

    /**
     * Application's client ID
     */
    private static $client_id;

    /**
     * Application's client secret
     */
    private static $client_secret;


    /**
     * API Version 
     * https://www.wepay.com/developer/reference/versioning
     */
    private static $api_version;

    /**
     * @deprecated Use WePay::getAllScopes() instead.
     */
    public static $all_scopes = array(
        self::SCOPE_MANAGE_ACCOUNTS,
        self::SCOPE_COLLECT_PAYMENTS,
        self::SCOPE_PREAPPROVE_PAYMENTS,
        self::SCOPE_VIEW_USER,
        self::SCOPE_SEND_MONEY,
        self::SCOPE_MANAGE_SUBSCRIPTIONS
    );

    /**
     * Determines whether to use WePay's staging or production servers
     */
    private static $production = null;

    /**
     * cURL handle
     */
    private static $ch = NULL;

    /**
     * Authenticated user's access token
     */
    private $token;

    /**
     * Pass WePay::getAllScopes() into getAuthorizationUri if your application desires full access
     */
    public static function getAllScopes() {
        return array(
            self::SCOPE_MANAGE_ACCOUNTS,
            self::SCOPE_MANAGE_SUBSCRIPTIONS,
            self::SCOPE_COLLECT_PAYMENTS,
            self::SCOPE_PREAPPROVE_PAYMENTS,
            self::SCOPE_VIEW_USER,
            self::SCOPE_SEND_MONEY
        );
    }

    /**
     * Generate URI used during oAuth authorization
     * Redirect your user to this URI where they can grant your application
     * permission to make API calls
     * @link https://www.wepay.com/developer/reference/oauth2
     * @param array  $scope             List of scope fields for which your application wants access
     * @param string $redirect_uri      Where user goes after logging in at WePay (domain must match application settings)
     * @param array  $options optional  user_name,user_email which will be pre-filled on login form, state to be returned in querystring of redirect_uri
     * @return string URI to which you must redirect your user to grant access to your application
     */
    public static function getAuthorizationUri(array $scope, $redirect_uri, array $options = array()) {
        // This does not use WePay::getDomain() because the user authentication
        // domain is different than the API call domain
        if (self::$production === null) {
            throw new RuntimeException('You must initialize the WePay SDK with WePay::useStaging() or WePay::useProduction()');
        }
        $domain = self::$production ? 'https://www.wepay.com' : 'https://stage.wepay.com';
        $uri = $domain . '/v2/oauth2/authorize?';
        $uri .= http_build_query(array(
            'client_id'    => self::$client_id,
            'redirect_uri' => $redirect_uri,
            'scope'        => implode(',', $scope),
            'state'        => empty($options['state'])      ? '' : $options['state'],
            'user_name'    => empty($options['user_name'])  ? '' : $options['user_name'],
            'user_email'   => empty($options['user_email']) ? '' : $options['user_email'],
        ), '', '&');
        return $uri;
    }

    private static function getDomain() {
        if (self::$production === true) {
            return 'https://wepayapi.com/v2/';
        }
        elseif (self::$production === false) {
            return 'https://stage.wepayapi.com/v2/';
        }
        else {
            throw new RuntimeException('You must initialize the WePay SDK with WePay::useStaging() or WePay::useProduction()');
        }
    }

    /**
     * Exchange a temporary access code for a (semi-)permanent access token
     * @param string $code          'code' field from query string passed to your redirect_uri page
     * @param string $redirect_uri  Where user went after logging in at WePay (must match value from getAuthorizationUri)
     * @return StdClass|false
     *  user_id
     *  access_token
     *  token_type
     */
    public static function getToken($code, $redirect_uri) {
        $params = (array(
            'client_id'     => self::$client_id,
            'client_secret' => self::$client_secret,
            'redirect_uri'  => $redirect_uri,
            'code'          => $code,
            'state'         => '', // do not hardcode
        ));
        $result = self::make_request('oauth2/token', $params);
        return $result;
    }

    /**
     * Configure SDK to run against WePay's production servers
     * @param string $client_id      Your application's client id
     * @param string $client_secret  Your application's client secret
     * @return void
     * @throws RuntimeException
     */
    public static function useProduction($client_id, $client_secret, $api_version = null) {
        if (self::$production !== null) {
            throw new RuntimeException('API mode has already been set.');
        }
        self::$production    = true;
        self::$client_id     = $client_id;
        self::$client_secret = $client_secret;
        self::$api_version   = $api_version;
    }

    /**
     * Configure SDK to run against WePay's staging servers
     * @param string $client_id      Your application's client id
     * @param string $client_secret  Your application's client secret
     * @return void
     * @throws RuntimeException
     */
    public static function useStaging($client_id, $client_secret, $api_version = null) {
        if (self::$production !== null) {
            throw new RuntimeException('API mode has already been set.');
        }
        self::$production    = false;
        self::$client_id     = $client_id;
        self::$client_secret = $client_secret;
        self::$api_version   = $api_version;
    }

    /**
     * Returns the current environment.
     * @return string "none" (not configured), "production" or "staging".
     */
    public static function getEnvironment() {
        if(self::$production === null) {
            return 'none';
        } else if(self::$production) {
            return 'production';
        } else {
            return 'staging';
        }
    }

    /**
     * Set Api Version
     * https://www.wepay.com/developer/reference/versioning
     * 
     * @param string $version  Api Version to send in call request header
     */
    public static function setApiVersion($version) {
        self::$api_version = $version;
    }

    /**
     * Create a new API session
     * @param string $token - access_token returned from WePay::getToken
     */
    public function __construct($token) {
        if ($token && !is_string($token)) {
            throw new InvalidArgumentException('$token must be a string, ' . gettype($token) . ' provided');
        }
        $this->token = $token;
    }

    /**
     * Clean up cURL handle
     */
    public function __destruct() {
        if (self::$ch) {
            curl_close(self::$ch);
            self::$ch = NULL;
        }
    }

    /**
     * create the cURL request and execute it
     */
    private static function make_request($endpoint, $values, $headers = array())
    {
        self::$ch = curl_init();
        $headers = array_merge(array("Content-Type: application/json"), $headers); // always pass the correct Content-Type header

        // send Api Version header
        if(!empty(self::$api_version)) {
            $headers[] = "Api-Version: " . self::$api_version;
        }

        curl_setopt(self::$ch, CURLOPT_USERAGENT, 'WePay v2 PHP SDK v' . self::VERSION . ' Client id:' . self::$client_id);
        curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt(self::$ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt(self::$ch, CURLOPT_TIMEOUT, 30); // 30-second timeout, adjust to taste
        curl_setopt(self::$ch, CURLOPT_POST, !empty($values)); // WePay's API is not strictly RESTful, so all requests are sent as POST unless there are no request values

        $uri = self::getDomain() . $endpoint;
        curl_setopt(self::$ch, CURLOPT_URL, $uri);

        if (!empty($values)) {
            curl_setopt(self::$ch, CURLOPT_POSTFIELDS, json_encode($values));
        }

        $raw = curl_exec(self::$ch);
        if ($errno = curl_errno(self::$ch)) {
            // Set up special handling for request timeouts
            if ($errno == CURLE_OPERATION_TIMEOUTED) {
                throw new WePayServerException("Timeout occurred while trying to connect to WePay");
            }
            throw new Exception('cURL error while making API call to WePay: ' . curl_error(self::$ch), $errno);
        }
        $result = json_decode($raw);
        $httpCode = curl_getinfo(self::$ch, CURLINFO_HTTP_CODE);
        if ($httpCode >= 400) {
            if (!isset($result->error_code)) {
                throw new WePayServerException("WePay returned an error response with no error_code, please alert api@wepay.com. Original message: $result->error_description", $httpCode, $result, 0);
            }
            if ($httpCode >= 500) {
                throw new WePayServerException($result->error_description, $httpCode, $result, $result->error_code);
            }
            switch ($result->error) {
                case 'invalid_request':
                    throw new WePayRequestException($result->error_description, $httpCode, $result, $result->error_code);
                case 'access_denied':
                default:
                    throw new WePayPermissionException($result->error_description, $httpCode, $result, $result->error_code);
            }
        }

        return $result;
    }

    /**
     * Make API calls against authenticated user
     * @param string $endpoint - API call to make (ex. 'user', 'account/find')
     * @param array  $values   - Associative array of values to send in API call
     * @return StdClass
     * @throws WePayException on failure
     * @throws Exception on catastrophic failure (non-WePay-specific cURL errors)
     */
    public function request($endpoint, array $values = array()) {
        $headers = array();

        if ($this->token) { // if we have an access_token, add it to the Authorization header
            $headers[] = "Authorization: Bearer $this->token";
        }

        $result = self::make_request($endpoint, $values, $headers);

        return $result;
    }
}

/**
 * Different problems will have different exception types so you can
 * catch and handle them differently.
 *
 * WePayServerException indicates some sort of 500-level error code and
 * was unavoidable from your perspective. You may need to re-run the
 * call, or check whether it was received (use a "find" call with your
 * reference_id and make a decision based on the response)
 *
 * WePayRequestException indicates a development error - invalid endpoint,
 * erroneous parameter, etc.
 *
 * WePayPermissionException indicates your authorization token has expired,
 * was revoked, or is lacking in scope for the call you made
 */
class WePayException extends Exception {
    public function __construct($description = '', $http_code = FALSE, $response = FALSE, $code = 0, $previous = NULL)
    {
        $this->response = $response;

        if (!defined('PHP_VERSION_ID')) {
            $version = explode('.', PHP_VERSION);
            define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
        }

        if (PHP_VERSION_ID < 50300) {
            parent::__construct($description, $code);
        } else {
            parent::__construct($description, $code, $previous);
        }
    }
}
class WePayRequestException extends WePayException {}
class WePayPermissionException extends WePayException {}
class WePayServerException extends WePayException {}

Solution

  • Here is the solution to integrate wepay library in codeigniter

    Go to application/config/config.php and add the following wepay app credentials at the end config.php you can also make separate config file but I had included it in CI's config

    /*WEPAY config items*/
    $config['client_id']='client_id_here';
    $config['client_secret']='client_secret_here';
    $config['app_version']='2014-01-08'; // this could be different in future
    $config['access_token']='access_token_here';
    /* End of file config.php */
    /* Location: ./application/config/config.php */
    

    create a file name wepay.php in Codeigniter's application/libraries/wepay.php and paste the following contents in wepay.php at line 202 add your app's access token and also remember to remove line 234 of wepay.php as u go live, I added this line of code to stop curl from verifying SSL certificate.

    curl_setopt(self::$ch, CURLOPT_SSL_VERIFYPEER, 0);
    
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
    class WePay {
    
        /**
         * Version number - sent in user agent string
         */
        const VERSION = '0.2.1';
    
        /**
         * Scope fields
         * Passed into Wepay::getAuthorizationUri as array
         */
        const SCOPE_MANAGE_ACCOUNTS     = 'manage_accounts';     // Open and interact with accounts
        const SCOPE_COLLECT_PAYMENTS    = 'collect_payments';    // Create and interact with checkouts
        const SCOPE_VIEW_USER           = 'view_user';           // Get details about authenticated user
        const SCOPE_PREAPPROVE_PAYMENTS = 'preapprove_payments'; // Create and interact with preapprovals
        const SCOPE_MANAGE_SUBSCRIPTIONS   = 'manage_subscriptions'; // Subscriptions
        const SCOPE_SEND_MONEY          = 'send_money';          // For withdrawals
    
        /**
         * Application's client ID
         */
        private static $client_id;
    
        /**
         * Application's client secret
         */
        private static $client_secret;
    
    
        /**
         * API Version 
         * https://www.wepay.com/developer/reference/versioning
         */
        private static $api_version;
    
        /**
         * @deprecated Use WePay::getAllScopes() instead.
         */
        public static $all_scopes = array(
            self::SCOPE_MANAGE_ACCOUNTS,
            self::SCOPE_COLLECT_PAYMENTS,
            self::SCOPE_PREAPPROVE_PAYMENTS,
            self::SCOPE_VIEW_USER,
            self::SCOPE_SEND_MONEY,
            self::SCOPE_MANAGE_SUBSCRIPTIONS
        );
    
        /**
         * Determines whether to use WePay's staging or production servers
         */
        private static $production = null;
    
        /**
         * cURL handle
         */
        private static $ch = NULL;
    
        /**
         * Authenticated user's access token
         */
        private $token;
    
        /**
         * Pass WePay::getAllScopes() into getAuthorizationUri if your application desires full access
         */
        public static function getAllScopes() {
            return array(
                self::SCOPE_MANAGE_ACCOUNTS,
                self::SCOPE_MANAGE_SUBSCRIPTIONS,
                self::SCOPE_COLLECT_PAYMENTS,
                self::SCOPE_PREAPPROVE_PAYMENTS,
                self::SCOPE_VIEW_USER,
                self::SCOPE_SEND_MONEY
            );
        }
    
        /**
         * Generate URI used during oAuth authorization
         * Redirect your user to this URI where they can grant your application
         * permission to make API calls
         * @link https://www.wepay.com/developer/reference/oauth2
         * @param array  $scope             List of scope fields for which your application wants access
         * @param string $redirect_uri      Where user goes after logging in at WePay (domain must match application settings)
         * @param array  $options optional  user_name,user_email which will be pre-filled on login form, state to be returned in querystring of redirect_uri
         * @return string URI to which you must redirect your user to grant access to your application
         */
        public static function getAuthorizationUri(array $scope, $redirect_uri, array $options = array()) {
            // This does not use WePay::getDomain() because the user authentication
            // domain is different than the API call domain
            if (self::$production === null) {
                throw new RuntimeException('You must initialize the WePay SDK with WePay::useStaging() or WePay::useProduction()');
            }
            $domain = self::$production ? 'https://www.wepay.com' : 'https://stage.wepay.com';
            $uri = $domain . '/v2/oauth2/authorize?';
            $uri .= http_build_query(array(
                'client_id'    => self::$client_id,
                'redirect_uri' => $redirect_uri,
                'scope'        => implode(',', $scope),
                'state'        => empty($options['state'])      ? '' : $options['state'],
                'user_name'    => empty($options['user_name'])  ? '' : $options['user_name'],
                'user_email'   => empty($options['user_email']) ? '' : $options['user_email'],
            ), '', '&');
            return $uri;
        }
    
        private static function getDomain() {
            if (self::$production === true) {
                return 'https://wepayapi.com/v2/';
            }
            elseif (self::$production === false) {
                return 'https://stage.wepayapi.com/v2/';
            }
            else {
                throw new RuntimeException('You must initialize the WePay SDK with WePay::useStaging() or WePay::useProduction()');
            }
        }
    
        /**
         * Exchange a temporary access code for a (semi-)permanent access token
         * @param string $code          'code' field from query string passed to your redirect_uri page
         * @param string $redirect_uri  Where user went after logging in at WePay (must match value from getAuthorizationUri)
         * @return StdClass|false
         *  user_id
         *  access_token
         *  token_type
         */
        public static function getToken($code, $redirect_uri) {
            $params = (array(
                'client_id'     => self::$client_id,
                'client_secret' => self::$client_secret,
                'redirect_uri'  => $redirect_uri,
                'code'          => $code,
                'state'         => '', // do not hardcode
            ));
            $result = self::make_request('oauth2/token', $params);
            return $result;
        }
    
        /**
         * Configure SDK to run against WePay's production servers
         * @param string $client_id      Your application's client id
         * @param string $client_secret  Your application's client secret
         * @return void
         * @throws RuntimeException
         */
        public static function useProduction($client_id, $client_secret, $api_version = null) {
            if (self::$production !== null) {
                throw new RuntimeException('API mode has already been set.');
            }
            self::$production    = true;
            self::$client_id     = $client_id;
            self::$client_secret = $client_secret;
            self::$api_version   = $api_version;
        }
    
        /**
         * Configure SDK to run against WePay's staging servers
         * @param string $client_id      Your application's client id
         * @param string $client_secret  Your application's client secret
         * @return void
         * @throws RuntimeException
         */
        public static function useStaging($client_id, $client_secret, $api_version = null) {
            if (self::$production !== null) {
                throw new RuntimeException('API mode has already been set.');
            }
            self::$production    = false;
            self::$client_id     = $client_id;
            self::$client_secret = $client_secret;
            self::$api_version   = $api_version;
        }
    
        /**
         * Returns the current environment.
         * @return string "none" (not configured), "production" or "staging".
         */
        public static function getEnvironment() {
            if(self::$production === null) {
                return 'none';
            } else if(self::$production) {
                return 'production';
            } else {
                return 'staging';
            }
        }
    
        /**
         * Set Api Version
         * https://www.wepay.com/developer/reference/versioning
         * 
         * @param string $version  Api Version to send in call request header
         */
        public static function setApiVersion($version) {
            self::$api_version = $version;
        }
    
        /**
         * Create a new API session
         * @param string $token - access_token returned from WePay::getToken
         */
        public function __construct() {
            $token='your_application_access_token';
            if ($token && !is_string($token)) {
                throw new InvalidArgumentException('$token must be a string, ' . gettype($token) . ' provided');
            }
            $this->token = $token;
        }
    
        /**
         * Clean up cURL handle
         */
        public function __destruct() {
            if (self::$ch) {
                curl_close(self::$ch);
                self::$ch = NULL;
            }
        }
    
        /**
         * create the cURL request and execute it
         */
        private static function make_request($endpoint, $values, $headers = array())
        {
            self::$ch = curl_init();
            $headers = array_merge(array("Content-Type: application/json"), $headers); // always pass the correct Content-Type header
    
            // send Api Version header
            if(!empty(self::$api_version)) {
                $headers[] = "Api-Version: " . self::$api_version;
            }
    
            curl_setopt(self::$ch, CURLOPT_USERAGENT, 'WePay v2 PHP SDK v' . self::VERSION . ' Client id:' . self::$client_id);
            curl_setopt(self::$ch, CURLOPT_SSL_VERIFYPEER, 0);  // Remove this line after testing because this line is to stop curl from using ssl verification
    
            curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt(self::$ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt(self::$ch, CURLOPT_TIMEOUT, 30); // 30-second timeout, adjust to taste
            curl_setopt(self::$ch, CURLOPT_POST, !empty($values)); // WePay's API is not strictly RESTful, so all requests are sent as POST unless there are no request values
    
            $uri = self::getDomain() . $endpoint;
            curl_setopt(self::$ch, CURLOPT_URL, $uri);
    
            if (!empty($values)) {
                curl_setopt(self::$ch, CURLOPT_POSTFIELDS, json_encode($values));
            }
    
            $raw = curl_exec(self::$ch);
            if ($errno = curl_errno(self::$ch)) {
                // Set up special handling for request timeouts
                if ($errno == CURLE_OPERATION_TIMEOUTED) {
                    throw new WePayServerException("Timeout occurred while trying to connect to WePay");
                }
                throw new Exception('cURL error while making API call to WePay: ' . curl_error(self::$ch), $errno);
            }
            $result = json_decode($raw);
            $httpCode = curl_getinfo(self::$ch, CURLINFO_HTTP_CODE);
            if ($httpCode >= 400) {
                if (!isset($result->error_code)) {
                    throw new WePayServerException("WePay returned an error response with no error_code, please alert api@wepay.com. Original message: $result->error_description", $httpCode, $result, 0);
                }
                if ($httpCode >= 500) {
                    throw new WePayServerException($result->error_description, $httpCode, $result, $result->error_code);
                }
                switch ($result->error) {
                    case 'invalid_request':
                        throw new WePayRequestException($result->error_description, $httpCode, $result, $result->error_code);
                    case 'access_denied':
                    default:
                        throw new WePayPermissionException($result->error_description, $httpCode, $result, $result->error_code);
                }
            }
    
            return $result;
        }
    
        /**
         * Make API calls against authenticated user
         * @param string $endpoint - API call to make (ex. 'user', 'account/find')
         * @param array  $values   - Associative array of values to send in API call
         * @return StdClass
         * @throws WePayException on failure
         * @throws Exception on catastrophic failure (non-WePay-specific cURL errors)
         */
        public function request($endpoint, array $values = array()) {
            $headers = array();
    
            if ($this->token) { // if we have an access_token, add it to the Authorization header
                $headers[] = "Authorization: Bearer $this->token";
            }
    
            $result = self::make_request($endpoint, $values, $headers);
    
            return $result;
        }
    }
    
    /**
     * Different problems will have different exception types so you can
     * catch and handle them differently.
     *
     * WePayServerException indicates some sort of 500-level error code and
     * was unavoidable from your perspective. You may need to re-run the
     * call, or check whether it was received (use a "find" call with your
     * reference_id and make a decision based on the response)
     *
     * WePayRequestException indicates a development error - invalid endpoint,
     * erroneous parameter, etc.
     *
     * WePayPermissionException indicates your authorization token has expired,
     * was revoked, or is lacking in scope for the call you made
     */
    class WePayException extends Exception {
        public function __construct($description = '', $http_code = FALSE, $response = FALSE, $code = 0, $previous = NULL)
        {
            $this->response = $response;
    
            if (!defined('PHP_VERSION_ID')) {
                $version = explode('.', PHP_VERSION);
                define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
            }
    
            if (PHP_VERSION_ID < 50300) {
                parent::__construct($description, $code);
            } else {
                parent::__construct($description, $code, $previous);
            }
        }
    }
    class WePayRequestException extends WePayException {}
    class WePayPermissionException extends WePayException {}
    class WePayServerException extends WePayException {}
    

    Now the final step make a controller, here my controller name is payment here are its contents: application/controllers/payment.php

    After that you can call controller method by adding controller name and method in browser localhost/yourapplication/index.php/payment/test_wepay_response

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Payment extends CI_Controller {
    public function __construct()
        {
            parent::__construct();
            if($this->session->userdata('urole') != 'admin'){redirect('admin_login');}
    
            $this->load->library('wePay','wepay');
            $this->load->model('admin_model','admin');
        }
    
        public function index()
        {   echo 'Hi there library loaded';exit;
    
        }
    
        public function test_wepay_response()
        {   
    $client_id=$this->config->item('client_id');
    $client_secret= $this->config->item('client_secret'); 
    $client_secret= $this->config->item('app_version');
    
    
    $this->wepay->useStaging($client_id,$client_secret,$app_version);
            //$data = array('account_id' => '12345');
            $response =$this->wepay->request('account/find');
            print_r($response);exit;
            }
    
    
    
    
    }