130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace PayWithAmazon;
 | 
						|
 | 
						|
// Exit if accessed directly
 | 
						|
defined( 'ABSPATH' ) || exit;
 | 
						|
 | 
						|
/* Class HttpCurl
 | 
						|
 * Handles Curl POST function for all requests
 | 
						|
 */
 | 
						|
 | 
						|
require_once 'Interface.php';
 | 
						|
 | 
						|
class HttpCurl implements HttpCurlInterface
 | 
						|
{
 | 
						|
    private $config = array();
 | 
						|
    private $header = false;
 | 
						|
    private $accessToken = null;
 | 
						|
 | 
						|
    /* Takes user configuration array as input
 | 
						|
     * Takes configuration for API call or IPN config
 | 
						|
     */
 | 
						|
 | 
						|
    public function __construct($config = null)
 | 
						|
    {
 | 
						|
        $this->config = $config;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Setter for boolean header to get the user info */
 | 
						|
 | 
						|
    public function setHttpHeader()
 | 
						|
    {
 | 
						|
        $this->header = true;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Setter for Access token to get the user info */
 | 
						|
 | 
						|
    public function setAccessToken($accesstoken)
 | 
						|
    {
 | 
						|
        $this->accessToken = $accesstoken;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Add the common Curl Parameters to the curl handler $ch
 | 
						|
     * Also checks for optional parameters if provided in the config
 | 
						|
     * config['cabundle_file']
 | 
						|
     * config['proxy_port']
 | 
						|
     * config['proxy_host']
 | 
						|
     * config['proxy_username']
 | 
						|
     * config['proxy_password']
 | 
						|
     */
 | 
						|
 | 
						|
    private  function commonCurlParams($url,$userAgent)
 | 
						|
    {
 | 
						|
        $ch = curl_init();
 | 
						|
        curl_setopt($ch, CURLOPT_URL, $url);
 | 
						|
        curl_setopt($ch, CURLOPT_PORT, 443);
 | 
						|
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
 | 
						|
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 | 
						|
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 | 
						|
 | 
						|
        if (!is_null($this->config['cabundle_file'])) {
 | 
						|
            curl_setopt($ch, CURLOPT_CAINFO, $this->config['cabundle_file']);
 | 
						|
        }
 | 
						|
 | 
						|
        if (!empty($userAgent))
 | 
						|
            curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
 | 
						|
 | 
						|
        if ($this->config['proxy_host'] != null && $this->config['proxy_port'] != -1) {
 | 
						|
            curl_setopt($ch, CURLOPT_PROXY, $this->config['proxy_host'] . ':' . $this->config['proxy_port']);
 | 
						|
        }
 | 
						|
 | 
						|
        if ($this->config['proxy_username'] != null && $this->config['proxy_password'] != null) {
 | 
						|
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config['proxy_username'] . ':' . $this->config['proxy_password']);
 | 
						|
        }
 | 
						|
 | 
						|
        return $ch;
 | 
						|
    }
 | 
						|
 | 
						|
    /* POST using curl for the following situations
 | 
						|
     * 1. API calls
 | 
						|
     * 2. IPN certificate retrieval
 | 
						|
     * 3. Get User Info
 | 
						|
     */
 | 
						|
 | 
						|
    public function httpPost($url, $userAgent = null, $parameters = null)
 | 
						|
    {
 | 
						|
        $ch = $this->commonCurlParams($url,$userAgent);
 | 
						|
 | 
						|
        curl_setopt($ch, CURLOPT_POST, true);
 | 
						|
        curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
 | 
						|
        curl_setopt($ch, CURLOPT_HEADER, true);
 | 
						|
 | 
						|
        $response = $this->execute($ch);
 | 
						|
        return $response;
 | 
						|
    }
 | 
						|
 | 
						|
    /* GET using curl for the following situations
 | 
						|
     * 1. IPN certificate retrieval
 | 
						|
     * 2. Get User Info
 | 
						|
     */
 | 
						|
 | 
						|
    public function httpGet($url, $userAgent = null)
 | 
						|
    {
 | 
						|
        $ch = $this->commonCurlParams($url,$userAgent);
 | 
						|
 | 
						|
        // Setting the HTTP header with the Access Token only for Getting user info
 | 
						|
        if ($this->header) {
 | 
						|
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 | 
						|
                'Authorization: bearer ' . $this->accessToken
 | 
						|
            ));
 | 
						|
        }
 | 
						|
 | 
						|
        $response = $this->execute($ch);
 | 
						|
        return $response;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Execute Curl request */
 | 
						|
 | 
						|
    private function execute($ch)
 | 
						|
    {
 | 
						|
        $response = '';
 | 
						|
        if (!$response = curl_exec($ch)) {
 | 
						|
            $error_msg = "Unable to post request, underlying exception of " . curl_error($ch);
 | 
						|
            curl_close($ch);
 | 
						|
            throw new \Exception($error_msg);
 | 
						|
        }
 | 
						|
        curl_close($ch);
 | 
						|
        return $response;
 | 
						|
    }
 | 
						|
}
 |