WC_Helper_API
WC_Helper_API Class
Description Description
Provides a communication interface with the WooCommerce.com Helper API.
Source Source
File: includes/admin/helper/class-wc-helper-api.php
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | class WC_Helper_API { /** * Base path for API routes. * * @var $api_base */ public static $api_base ; /** * Load * * Allow devs to point the API base to a local API development or staging server. * Note that sslverify will be turned off for the woocommerce.dev + WP_DEBUG combination. * The URL can be changed on plugins_loaded before priority 10. */ public static function load() { self:: $api_base = apply_filters( 'woocommerce_helper_api_base' , 'https://woocommerce.com/wp-json/helper/1.0' ); } /** * Perform an HTTP request to the Helper API. * * @param string $endpoint The endpoint to request. * @param array $args Additional data for the request. Set authenticated to a truthy value to enable auth. * * @return array|WP_Error The response from wp_safe_remote_request() */ public static function request( $endpoint , $args = array () ) { $url = self::url( $endpoint ); if ( ! empty ( $args [ 'authenticated' ] ) ) { if ( ! self::_authenticate( $url , $args ) ) { return new WP_Error( 'authentication' , 'Authentication failed.' ); } } /** * Allow developers to filter the request args passed to wp_safe_remote_request(). * Useful to remove sslverify when working on a local api dev environment. */ $args = apply_filters( 'woocommerce_helper_api_request_args' , $args , $endpoint ); // TODO: Check response signatures on certain endpoints. return wp_safe_remote_request( $url , $args ); } /** * Adds authentication headers to an HTTP request. * * @param string $url The request URI. * @param array $args By-ref, the args that will be passed to wp_remote_request(). * @return bool Were the headers added? */ private static function _authenticate( & $url , & $args ) { $auth = WC_Helper_Options::get( 'auth' ); if ( empty ( $auth [ 'access_token' ] ) || empty ( $auth [ 'access_token_secret' ] ) ) { return false; } $request_uri = parse_url ( $url , PHP_URL_PATH ); $query_string = parse_url ( $url , PHP_URL_QUERY ); if ( is_string ( $query_string ) ) { $request_uri .= '?' . $query_string ; } $data = array ( 'host' => parse_url ( $url , PHP_URL_HOST ), 'request_uri' => $request_uri , 'method' => ! empty ( $args [ 'method' ] ) ? $args [ 'method' ] : 'GET' , ); if ( ! empty ( $args [ 'body' ] ) ) { $data [ 'body' ] = $args [ 'body' ]; } $signature = hash_hmac( 'sha256' , json_encode( $data ), $auth [ 'access_token_secret' ] ); if ( empty ( $args [ 'headers' ] ) ) { $args [ 'headers' ] = array (); } $headers = array ( 'Authorization' => 'Bearer ' . $auth [ 'access_token' ], 'X-Woo-Signature' => $signature , ); $args [ 'headers' ] = wp_parse_args( $headers , $args [ 'headers' ] ); $url = add_query_arg( array ( 'token' => $auth [ 'access_token' ], 'signature' => $signature , ), $url ); return true; } /** * Wrapper for self::request(). * * @param string $endpoint The helper API endpoint to request. * @param array $args Arguments passed to wp_remote_request(). * * @return array The response object from wp_safe_remote_request(). */ public static function get( $endpoint , $args = array () ) { $args [ 'method' ] = 'GET' ; return self::request( $endpoint , $args ); } /** * Wrapper for self::request(). * * @param string $endpoint The helper API endpoint to request. * @param array $args Arguments passed to wp_remote_request(). * * @return array The response object from wp_safe_remote_request(). */ public static function post( $endpoint , $args = array () ) { $args [ 'method' ] = 'POST' ; return self::request( $endpoint , $args ); } /** * Wrapper for self::request(). * * @param string $endpoint The helper API endpoint to request. * @param array $args Arguments passed to wp_remote_request(). * * @return array The response object from wp_safe_remote_request(). */ public static function put( $endpoint , $args = array () ) { $args [ 'method' ] = 'PUT' ; return self::request( $endpoint , $args ); } /** * Using the API base, form a request URL from a given endpoint. * * @param string $endpoint The endpoint to request. * * @return string The absolute endpoint URL. */ public static function url( $endpoint ) { $endpoint = ltrim( $endpoint , '/' ); $endpoint = sprintf( '%s/%s' , self:: $api_base , $endpoint ); $endpoint = esc_url_raw( $endpoint ); return $endpoint ; } } |
Methods Methods
- _authenticate — Adds authentication headers to an HTTP request.
- get — Wrapper for self::request().
- load — Load
- post — Wrapper for self::request().
- put — Wrapper for self::request().
- request — Perform an HTTP request to the Helper API.
- url — Using the API base, form a request URL from a given endpoint.