* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @copyright PayPal */ namespace PaypalAddons\classes\API\Request; use PaypalAddons\classes\AbstractMethodPaypal; use PaypalAddons\classes\API\ExtensionSDK\AddTrackingInfo; use PaypalAddons\classes\API\Response\Error; use PaypalAddons\classes\API\Response\Response; use PaypalAddons\services\Builder\AddTrackingInfoRequestBuilder; use PayPalCheckoutSdk\Core\PayPalHttpClient; use PayPalHttp\HttpException; class PaypalAddTrackingInfoRequest extends RequestAbstract { protected $paypalOrder; public function __construct(PayPalHttpClient $client, AbstractMethodPaypal $method, \PaypalOrder $paypalOrder) { parent::__construct($client, $method); $this->paypalOrder = $paypalOrder; } public function execute() { $response = $this->initResponse(); try { $sendTrackingInfoRequest = new AddTrackingInfo(); $sendTrackingInfoRequest->headers = array_merge($this->getHeaders(), $sendTrackingInfoRequest->headers); $sendTrackingInfoRequest->body = $this->initBuilder()->build(); $exec = $this->client->execute($sendTrackingInfoRequest); if ($exec->statusCode >= 200 && $exec->statusCode < 300) { $response->setSuccess(true); } else { $response->setSuccess(false); } $response->setData($exec); } catch (HttpException $e) { $error = new Error(); $resultDecoded = json_decode($e->getMessage(), true); if (false == empty($resultDecoded['name'])) { $error->setErrorCode($resultDecoded['name']); } if (false == empty($resultDecoded['message'])) { $error->setMessage($resultDecoded['message']); } $response->setSuccess(false) ->setError($error); } catch (\Exception $e) { $error = new Error(); $error->setErrorCode($e->getCode())->setMessage($e->getMessage()); $response->setError($error)->setSuccess(false); } catch (\Throwable $e) { //for php verion > 7.0 $error = new Error(); $error->setErrorCode($e->getCode())->setMessage($e->getMessage()); $response->setError($error)->setSuccess(false); } return $response; } protected function initResponse() { return new Response(); } protected function initBuilder() { return new AddTrackingInfoRequestBuilder($this->paypalOrder); } }