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