Files
api/services/nginx/app/traits/economic_endpoint_t.php
T
Jepp9350 61de9cdb45 Add email configuration module and enable invoice PDF retrieval
Introduce an email configuration module to manage SMTP settings, including encryption, host, username, and more. Implement functionality for retrieving invoice PDFs, storing them, and providing secure download links. Added relevant endpoint, routes, and helper methods to support these features.
2025-02-10 18:07:51 +01:00

138 lines
4.6 KiB
PHP

<?php
namespace traits;
trait economic_endpoint_t
{
private string $api_url = 'https://restapi.e-conomic.com';
private string $appAccessGrant;
private string $app_token;
private string $appAccessGrant2;
public function __construct()
{
global $ECONOMIC_API;
$this->app_token = $ECONOMIC_API['app_secret_token'];
$this->appAccessGrant = $ECONOMIC_API['app_access_grant'];
$this->appAccessGrant2 = $ECONOMIC_API['app_access_grant2'];
}
/**
* Filters for e-conomic requests
* @param array $filters
* @return string The filters for the request (e.g. 'customerNumber$eq:12345678')
* @example ['customer.customerNumber' => '12345678']
*/
public static function filters(array $filters): string
{
$filter_string = '';
foreach ( $filters as $key => $value ) {
// If the filter string is not empty, and the key has a value, add an $and
if (!empty($filter_string) && !empty($value)) {
$filter_string .= '$and:';
}
// Check if there's a "$" in the key, and if not, add it as $eq (equals) by default
if (!str_contains($value, '$') && !empty($value)) {
$value = '$eq:' . $value;
}
$filter_string .= $key . $value;
}
return $filter_string;
}
/**
* Pagination for e-conomic requests
* @param array $pagination
* @return string The pagination for the request (e.g. '&maxPageSize=100&skipPages=0')
* @example ['maxPageSize' => 100, 'skipPages' => 0]
*/
public static function pagination(array $pagination): string
{
$pagination_string = '';
foreach ( $pagination as $key => $value ) {
$pagination_string .= '&' . $key . '=' . $value;
}
return $pagination_string;
}
/**
* Send a request to the Economic API
* @param string $url
* @param string $method
* @param string $data
* @param bool $authToken2
* @return string
*/
public function send_request($url, $method, $data = '', bool $authToken2 = false): string
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $this->api_url . $url,
CURLOPT_RETURNTRANSFER => true,
//CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => array(
'X-AppSecretToken: ' . $this->app_token,
'X-AgreementGrantToken: ' . ($authToken2 ? $this->appAccessGrant2 : $this->appAccessGrant),
'Content-Type: application/json'
),
));
if ($method === 'POST') {
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
// Check for errors
if (curl_errno($curl)) {
echo 'Curl error: ' . curl_error($curl);
return curl_error($curl);
}
curl_close($curl);
return $response;
}
public function send_file_download_request($url, $method, $data = '', bool $authToken2 = false, $outputFile = null)
{
// Initialize cURL session
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $this->api_url . $url,
CURLOPT_RETURNTRANSFER => true, // Get the response as a string
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => array(
'X-AppSecretToken: ' . $this->app_token,
'X-AgreementGrantToken: ' . ($authToken2 ? $this->appAccessGrant2 : $this->appAccessGrant),
'Content-Type: application/json'
),
));
// Execute the request
$response = curl_exec($curl);
// Handle errors
if (curl_errno($curl)) {
echo 'Curl error: ' . curl_error($curl);
return curl_error($curl);
}
// Close the cURL session
curl_close($curl);
// If a file path is provided, save the response to the file
if ($outputFile) {
// Write file contents
file_put_contents($outputFile, $response);
return "File saved to: " . $outputFile;
}
// Otherwise, return the raw content (e.g., for inline use)
return $response;
}
}