| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- /**
- *
- * Description
- *
- * @package Paystack
- * @category Source
- * @author Michael Akanji <matscode@gmail.com>
- * @date 2017-06-25
- * @copyright (c) 2016 - 2017, TECRUM (http://www.tecrum.com)
- *
- */
- namespace Matscode\Paystack;
- class CURL
- {
- private
- $_url,
- $_curl,
- $_requestWithPost = false,
- $_allowedReqMethodForPost =
- [
- 'POST',
- 'UPDATE',
- 'PUT',
- 'PATCH',
- ],
- $_errorCode,
- $_errorMessage;
- public
- $requestMethod,
- $requestHeader = [];
- const
- USER_AGENT = 'PHP CURL/1.0 (@matscode)';
- public function __construct( $url, $requestMethod = null )
- {
- if ( ! extension_loaded( 'curl' ) ) {
- throw new \ErrorException( 'CURL Extension not loaded, Install libcurl php extension' );
- }
- //initialize CUrl
- $this->_url = $url;
- $this->_curlInit( $this->_url );
- //set requestMethod property
- $this->requestMethod = $requestMethod;
- //set the default request method to 'POST'
- if ( ! is_null( $this->requestMethod ) ) {
- $this->setRequestMethod( $this->requestMethod );
- }
- return $this;
- }
- private function _curlInit( $url )
- {
- $this->_curl = curl_init();
- $this->setOption( CURLOPT_USERAGENT, self::USER_AGENT )
- ->setOption( CURLOPT_URL, $url )
- // return response
- ->setOption( CURLOPT_RETURNTRANSFER, true );
- // turn off caching
- $this->setRequestHeader( 'Cache-Control', 'no-cache' );
- return $this;
- }
- public function setOption( $option, $value )
- {
- // Set curl option
- curl_setopt( $this->_curl, $option, $value );
- return $this;
- }
- public function setRequestMethod( $requestMethod )
- {
- switch ( $requestMethod ) {
- case 'GET' :
- $this->setOption( CURLOPT_HTTPGET, true );
- break;
- case 'UPDATE' :
- $this->setOption( CURLOPT_CUSTOMREQUEST, 'UPDATE' );
- break;
- case 'PUT' :
- $this->setOption( CURLOPT_CUSTOMREQUEST, 'PUT' );
- break;
- case 'PATCH' :
- $this->setOption( CURLOPT_CUSTOMREQUEST, 'PATCH' );
- break;
- case 'DELETE' :
- $this->setOption( CURLOPT_CUSTOMREQUEST, 'DELETE' );
- break;
- case 'POST':
- $this->doPostRequest();
- default:
- $this->setOption( CURLOPT_POST, true );
- break;
- }
- return $this;
- }
- /**
- * @param null $qStringArray
- *
- * @return string
- */
- public function getUrl( $qStringArray = null )
- {
- if ( ! is_null( $qStringArray ) &&
- ( is_array( $qStringArray ) || is_object( $qStringArray ) )
- ) {
- $this->_url .= '?' . http_build_query( $qStringArray );
- }
- return $this->_url;
- }
- /**
- * @param string $url
- *
- * @return $this
- */
- public function setUrl(
- $url
- ) {
- $this->setOption( CURLOPT_URL, $url );
- $this->_url = $url;
- return $this;
- }
- public function doPostRequest()
- {
- if ( in_array( $this->requestMethod, $this->_allowedReqMethodForPost ) ) {
- $this->_requestWithPost = true;
- }
- return $this;
- }
- public function run( $data, $as = 'urlencoded', $closeCurl = false ) // urlencoded | json | form-data
- {
- if ( $this->_requestWithPost ) {
- //make a post request
- switch ( $as ) {
- case 'json':
- if ( is_array( $data ) ) {
- $data = json_encode( $data );
- $this->setRequestHeader( 'Content-Type', 'application/json' );
- } else {
- throw new \ErrorException( 'Data argument passed to the run method must be of datatype Array when posting as JSON' );
- }
- break;
- case 'form-data':
- if ( is_array( $data ) || is_object( $data ) ) {
- $this->setRequestHeader( 'Content-Type', 'multipart/form-data' );
- } else {
- throw new \ErrorException( 'Data argument passed to the run method must be of datatype Array or Object when postiing as FORM-DATA' );
- }
- break;
- case 'urlenconded':
- // convert data to queryString - Native
- $data = http_build_query( $data );
- // continue to default
- default:
- $this->setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
- break;
- }
- $this->setOption( CURLOPT_POSTFIELDS, $data ); //Post Fields
- } else {
- //make a built query string and reset CURLOPT_URL
- $this->setOption( CURLOPT_URL, $this->getUrl( $data ) );
- }
- // execute curl
- $response = curl_exec( $this->_curl );
- // save error details in memory
- $this->_errorCode = curl_errno( $this->_curl );
- $this->_errorMessage = curl_error( $this->_curl );
- if ( $closeCurl ) {
- // close curl connection by default
- if ( is_resource( $this->_curl ) ) {
- curl_close( $this->_curl );
- }
- }
- // return response from endpoint
- return $response;
- }
- /**
- * @param $key
- * @param $value
- *
- * @return $this
- */
- public function setRequestHeader( $key, $value = null )
- {
- if ( ! is_array( $key ) ) {
- // assist with capitalizing http header keys
- $headers[] = ucwords( $key ) . ': ' . $value;
- } else {
- $headers = $key;
- }
- // merge requestHeader to base header
- $this->requestHeader = array_merge( $headers, $this->requestHeader );
- $this->setOption( CURLOPT_HTTPHEADER, $this->requestHeader );
- return $this;
- }
- public function getErrorCode()
- {
- return $this->_errorCode;
- }
- public function getErrorMessage()
- {
- return $this->_errorMessage;
- }
- /**
- * @return array
- */
- public function getRequestHeader()
- {
- return $this->requestHeader;
- }
- }
|