114 lines
3.2 KiB
PHP
114 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* 2007-2022 PayPal
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the Academic Free License (AFL 3.0)
|
|
* that is bundled with this package in the file LICENSE.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://opensource.org/licenses/afl-3.0.php
|
|
* If you did not receive a copy of the license and are unable to
|
|
* obtain it through the world-wide-web, please send an email
|
|
* to license@prestashop.com so we can send you a copy immediately.
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
|
* versions in the future. If you wish to customize PrestaShop for your
|
|
* needs please refer to http://www.prestashop.com for more information.
|
|
*
|
|
* @author 2007-2022 PayPal
|
|
* @author 202 ecommerce <tech@202-ecommerce.com>
|
|
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
|
* @copyright PayPal
|
|
*/
|
|
|
|
namespace PaypalAddons\services;
|
|
|
|
use Db;
|
|
use DbQuery;
|
|
use Exception;
|
|
|
|
class WebhookService
|
|
{
|
|
/**
|
|
* @param \PaypalOrder $paypalOrder
|
|
*
|
|
* @return \PaypalWebhook
|
|
*
|
|
* @throws \PrestaShopException
|
|
*/
|
|
public function createForOrder(\PaypalOrder $paypalOrder, $idState = 0)
|
|
{
|
|
$query = (new DbQuery())
|
|
->select('id_paypal_webhook')
|
|
->from(\PaypalWebhook::$definition['table'])
|
|
->where('id_paypal_order = ' . (int) $paypalOrder->id)
|
|
->where('id_webhook IS NULL OR id_webhook = ""');
|
|
|
|
if ($idState) {
|
|
$query->where('id_state = ' . (int) $idState);
|
|
}
|
|
|
|
$idPaypalWebhook = (int) Db::getInstance()->getValue($query);
|
|
|
|
if ($idPaypalWebhook) {
|
|
$webhook = new \PaypalWebhook($idPaypalWebhook);
|
|
} else {
|
|
$webhook = new \PaypalWebhook();
|
|
}
|
|
|
|
$webhook->id_paypal_order = (int) $paypalOrder->id;
|
|
$webhook->id_state = $idState;
|
|
$webhook->save();
|
|
|
|
return $webhook;
|
|
}
|
|
|
|
/**
|
|
* @param \PaypalOrder $paypalOrder
|
|
*
|
|
* @return \PaypalWebhook[]
|
|
*/
|
|
public function getPendingWebhooks(\PaypalOrder $paypalOrder, $delay = null)
|
|
{
|
|
$webhooks = [];
|
|
$query = (new DbQuery())
|
|
->from(\PaypalWebhook::$definition['table'])
|
|
->where('id_paypal_order = ' . (int) $paypalOrder->id)
|
|
->where('id_webhook IS NULL OR id_webhook = ""');
|
|
|
|
if (false == is_null($delay)) {
|
|
$query->where(
|
|
sprintf(
|
|
'date_add < DATE_SUB(STR_TO_DATE(\'%s\', GET_FORMAT(DATETIME,\'ISO\')), INTERVAL %d HOUR)',
|
|
date(\PaypalWebhook::DATE_FORMAT),
|
|
(int) $delay
|
|
)
|
|
);
|
|
}
|
|
|
|
try {
|
|
$result = Db::getInstance()->executeS($query);
|
|
} catch (Exception $e) {
|
|
return $webhooks;
|
|
}
|
|
|
|
if (empty($result)) {
|
|
return $webhooks;
|
|
}
|
|
|
|
foreach ($result as $row) {
|
|
try {
|
|
$webhook = new \PaypalWebhook();
|
|
$webhook->hydrate($row);
|
|
$webhooks[] = $webhook;
|
|
} catch (Exception $e) {
|
|
}
|
|
}
|
|
|
|
return $webhooks;
|
|
}
|
|
}
|