集成wepay SDK库以配合codeigniter2.2使用

Integrate wepay SDK library to work with codeigniter2.2

我正在处理一个使用 codeigniter 2.2 的应用程序,但现在我遇到了将 wepay 库 wepay.php 集成到 codeigniter 库的问题。任何帮助将不胜感激 这是 wepay 提供的当前库。 我试图将 wepay.php 集成到 codeigniter 中,但它会出现白屏。我认为 wepay.php 中定义了多个 classes 存在问题,我不知道如何在 codeigniter

中处理这个问题

Openaccount.php 文件:

    <?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 文件:

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

请看一下wepay.php的底部它是一个class中定义的多个class。

wepay.php 内容

    <?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 {}

这里是在codeigniter中集成wepay库的解决方案

转到application/config/config.php并在末尾添加以下wepay应用凭据 config.php 您也可以制作单独的配置文件,但我已将其包含在 CI 的配置中

/*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 */

在 Codeigniter 的 application/libraries/wepay.php 中创建一个文件名 wepay.php 并将以下内容粘贴到 wepay.php 中的第 202 行添加您的应用程序的访问令牌并记住在你上线时删除 wepay.php 的第 234 行,我添加了这行代码以阻止 curl 验证 SSL 证书。

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 {}

现在是制作控制器的最后一步,这里我的控制器名称是 payment 这是它的内容: application/controllers/payment.php

之后可以在浏览器中添加控制器名称和方法来调用控制器方法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;
        }




}