General API interface with CURL: A simple way to access most APIs — use as is or extend as necessary

Since you likely interface with a lot of external APIs, there’s no need to keep rewriting the same tool.  Just copy this and use the “apiBaseController” class as you need it.  It’s a good, clean way to start any API accessing project!

<?php

/**
* Class apiBaseController
*
* Any access of APIs outside of Symfony can be extended from this class
*
*
*/

class apiBaseController
{

   public $showDebug=false; // Whether debug message showing verbose response is on or not

   function apiCurlRequest($method = 'POST', $url, $headerArr=array(), $postFields = null)
   {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);

      if ($method != 'POST' && !empty($method)) {
         //  $headerArr[] = 'X-HTTP-Method-Override: ' . $method;
      }

      //  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
      if(count(@$headerArr)>0) {
         curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);
      }

      if ($method=='POST') {
         curl_setopt($ch, CURLOPT_POST, true);
         curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
      }

      if($method=='GET') {
         curl_setopt($ch, CURLOPT_HEADER, 0);
         curl_setopt($ch, CURLOPT_HTTPGET, 1);
      }

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $curl_response = curl_exec($ch);
      if($this->showDebug){  echo "<p>API RESPONSE: " . __FUNCTION__ . ": Method: $method; Url: $url; " . print_r($curl_response, true) . ";</p>"; }

      curl_close($ch);
      return $curl_response;
   }


   function buildApiHeaders($postString){

      $headers = array(
         "Content-type: text/xml;charset=utf-8",
         "Content-length: ".strlen($postString),
      );

      return $headers;
   }
}

 

Leave a Reply 0

Your email address will not be published. Required fields are marked *