mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-26 06:30:29 +01:00
239 lines
6.1 KiB
PHP
239 lines
6.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Xentral\Modules\Dhl\Api;
|
||
|
|
||
|
use PHPUnit\Runner\Exception;
|
||
|
use SoapFault;
|
||
|
use SoapHeader;
|
||
|
use SoapVar;
|
||
|
use stdClass;
|
||
|
use Xentral\Modules\Dhl\Exception\InsufficientPermissionsException;
|
||
|
use Xentral\Modules\Dhl\Exception\InvalidCredentialsException;
|
||
|
use Xentral\Modules\Dhl\Request\CreateNationalShipmentRequest;
|
||
|
use Xentral\Modules\Dhl\Request\GetManifestRequest;
|
||
|
use Xentral\Modules\Dhl\Request\GetVersionRequest;
|
||
|
use Xentral\Modules\Dhl\Response\CreateShipmentResponse;
|
||
|
use Xentral\Modules\Dhl\Response\GetVersionResponse;
|
||
|
|
||
|
/**
|
||
|
* Class DhlApi
|
||
|
*
|
||
|
* @package Xentral\Modules\Dhl\api
|
||
|
*/
|
||
|
class DhlApi
|
||
|
{
|
||
|
/** @var string */
|
||
|
private $user;
|
||
|
|
||
|
/** @var string */
|
||
|
private $pass;
|
||
|
|
||
|
/** @var string */
|
||
|
private $accountNumber;
|
||
|
|
||
|
/** @var string */
|
||
|
private $basicUsername;
|
||
|
|
||
|
/** @var string */
|
||
|
private $basicPassword;
|
||
|
|
||
|
/** @var string */
|
||
|
private $endpoint;
|
||
|
|
||
|
/** @var string */
|
||
|
private $senderName;
|
||
|
/** @var string */
|
||
|
private $senderStreetName;
|
||
|
/** @var int */
|
||
|
private $senderStreetNo;
|
||
|
/** @var string */
|
||
|
private $senderZip;
|
||
|
/** @var string */
|
||
|
private $senderCity;
|
||
|
/** @var string */
|
||
|
private $senderCountry;
|
||
|
/** @var string */
|
||
|
private $senderEmail;
|
||
|
|
||
|
/** @var int */
|
||
|
private $versionMajor = 3;
|
||
|
/** @var int */
|
||
|
private $versionMino = 0;
|
||
|
|
||
|
/**
|
||
|
* DhlApi constructor.
|
||
|
*
|
||
|
* @param string $user
|
||
|
* @param string $pass
|
||
|
* @param string $basicUsername
|
||
|
* @param string $basicPassword
|
||
|
* @param string $accountNumber
|
||
|
* @param string $endpoint
|
||
|
* @param string $senderName
|
||
|
* @param string $senderStreetName
|
||
|
* @param int $senderStreetNo
|
||
|
* @param string $senderZip
|
||
|
* @param string $senderCity
|
||
|
* @param string $senderCountry
|
||
|
* @param $senderEmail
|
||
|
*/
|
||
|
public function __construct(
|
||
|
$user,
|
||
|
$pass,
|
||
|
$basicUsername,
|
||
|
$basicPassword,
|
||
|
$accountNumber,
|
||
|
$endpoint,
|
||
|
$senderName,
|
||
|
$senderStreetName,
|
||
|
$senderStreetNo,
|
||
|
$senderZip,
|
||
|
$senderCity,
|
||
|
$senderCountry,
|
||
|
$senderEmail
|
||
|
) {
|
||
|
$this->user = $user;
|
||
|
$this->pass = $pass;
|
||
|
$this->basicUsername = $basicUsername;
|
||
|
$this->basicPassword = $basicPassword;
|
||
|
$this->accountNumber = $accountNumber;
|
||
|
$this->endpoint = $endpoint;
|
||
|
|
||
|
$this->senderName = $senderName;
|
||
|
$this->senderStreetName = $senderStreetName;
|
||
|
$this->senderStreetNo = $senderStreetNo;
|
||
|
$this->senderZip = $senderZip;
|
||
|
$this->senderCity = $senderCity;
|
||
|
$this->senderCountry = $senderCountry;
|
||
|
$this->senderEmail = $senderEmail;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return GetVersionResponse
|
||
|
*/
|
||
|
public function getVersion()
|
||
|
{
|
||
|
$getVersionRequest = new GetVersionRequest($this->versionMajor, $this->versionMino);
|
||
|
|
||
|
$postFields = $getVersionRequest->toXml(
|
||
|
$this->user,
|
||
|
$this->pass
|
||
|
);
|
||
|
|
||
|
$response = $this->performRequest($postFields, 'getVersion');
|
||
|
|
||
|
return GetVersionResponse::fromResponseXml($response);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param string $manifestDate
|
||
|
*
|
||
|
* @return GetVersionResponse
|
||
|
*/
|
||
|
public function getManifest($manifestDate)
|
||
|
{
|
||
|
$getManifestRequest = new GetManifestRequest($manifestDate);
|
||
|
|
||
|
$postFields = $getManifestRequest->toXml(
|
||
|
$this->user,
|
||
|
$this->pass
|
||
|
);
|
||
|
|
||
|
$response = $this->performRequest($postFields, 'getManifest');
|
||
|
|
||
|
return GetVersionResponse::fromResponseXml($response);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param CreateNationalShipmentRequest $createShipmentRequest
|
||
|
*
|
||
|
* @return CreateShipmentResponse
|
||
|
*/
|
||
|
public function createShipment($createShipmentRequest)
|
||
|
{
|
||
|
$postFields = $createShipmentRequest->toXml(
|
||
|
$this->user,
|
||
|
$this->pass,
|
||
|
$this->accountNumber,
|
||
|
$this->senderName,
|
||
|
$this->senderStreetName,
|
||
|
$this->senderStreetNo,
|
||
|
$this->senderZip,
|
||
|
$this->senderCity,
|
||
|
$this->senderCountry,
|
||
|
$this->senderEmail
|
||
|
);
|
||
|
|
||
|
$response = $this->performRequest($postFields, 'createShipmentOrder');
|
||
|
|
||
|
return CreateShipmentResponse::fromResponseXml($response);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param CreateNationalShipmentRequest $createShipmentRequest
|
||
|
*
|
||
|
* @return CreateShipmentResponse
|
||
|
*/
|
||
|
public function validateShipment($createShipmentRequest)
|
||
|
{
|
||
|
$postFields = $createShipmentRequest->toXml(
|
||
|
$this->user,
|
||
|
$this->pass,
|
||
|
$this->accountNumber,
|
||
|
$this->senderName,
|
||
|
$this->senderStreetName,
|
||
|
$this->senderStreetNo,
|
||
|
$this->senderZip,
|
||
|
$this->senderCity,
|
||
|
$this->senderCountry,
|
||
|
$this->senderEmail
|
||
|
);
|
||
|
|
||
|
$response = $this->performRequest($postFields, 'validateShipment');
|
||
|
|
||
|
return CreateShipmentResponse::fromResponseXml($response);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
private function performRequest($payload, $method)
|
||
|
{
|
||
|
$curl = curl_init($this->endpoint);
|
||
|
|
||
|
curl_setopt_array(
|
||
|
$curl,
|
||
|
[
|
||
|
CURLOPT_POST => true,
|
||
|
CURLOPT_POSTFIELDS => $payload,
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_HTTPHEADER => [
|
||
|
'Authorization: Basic ' . base64_encode("{$this->basicUsername}:{$this->basicPassword}"),
|
||
|
'Content-Type: application/xml; charset=utf-8',
|
||
|
"SOAPAction: urn:{$method}",
|
||
|
],
|
||
|
]
|
||
|
);
|
||
|
|
||
|
$response = curl_exec($curl);
|
||
|
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||
|
|
||
|
$this->checkHttpCode($responseCode);
|
||
|
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int $responseCode
|
||
|
*/
|
||
|
private function checkHttpCode($responseCode)
|
||
|
{
|
||
|
switch ($responseCode) {
|
||
|
case 401:
|
||
|
throw new InvalidCredentialsException("");
|
||
|
case 403:
|
||
|
throw new InsufficientPermissionsException();
|
||
|
}
|
||
|
}
|
||
|
}
|