1. Go to this page and download the library: Download zepgram/module-rest library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
zepgram / module-rest example snippets
declare(strict_types=1);
namespace My\Custom\Model\Api;
use Zepgram\Rest\Exception\InternalException;
use Zepgram\Rest\Exception\ExternalException;
use Zepgram\Rest\Service\ApiPoolInterface;
use Zepgram\Rest\Service\ApiProviderInterface;
use Zepgram\Sales\Api\OrderRepositoryInterface;
class ConsumerExample
{
public function __construct(
private OrderRepositoryInterface $orderRepository,
private ApiProviderInterface $apiProvider
) {}
/**
* @param int $orderId
* @return array
*/
public function execute(int $orderId): array
{
// get raw data
$order = $this->orderRepository->get($orderId);
// send request
$result = $this->apiProvider->execute(['order' => $order]);
return $result;
}
}
declare(strict_types=1);
namespace Zepgram\Sales\Rest;
use Magento\Framework\DataObject;
use Magento\Sales\Api\Data\OrderInterface;
use Zepgram\Rest\Model\RequestAdapter;
class FoxtrotOrderRequestAdapter extends RequestAdapter
{
/** @var string */
public const SERVICE_ENDPOINT = 'v1/order/';
/** @var OrderInterface */
private $order;
/**
* {@inheritDoc}
*/
public function dispatch(DataObject $rawData): void
{
$this->order = $rawData->getOrder();
}
/**
* {@inheritDoc}
*/
public function getBody(): array
{
return [
'orderId' => $this->order->getEntityId(),
'customer' => $this->order->getCustomerEmail(),
'orderTotal' => $this->order->getGrandTotal(),
'version' => '1.0',
];
}
/**
* {@inheritDoc}
*/
public function getCacheKey(): ?string
{
return $this->order->getEntityId();
}
}
declare(strict_types=1);
namespace Zepgram\Sales\Model;
use Zepgram\Rest\Exception\InternalException;
use Zepgram\Rest\Exception\ExternalException;
use Zepgram\Rest\Service\ApiPoolInterface;
use Zepgram\Sales\Api\OrderRepositoryInterface;
use Zepgram\Sales\Rest\FoxtrotOrderRequestAdapter;
class OrderDataExample
{
public function __construct(
private OrderRepositoryInterface $orderRepository,
private ApiPoolInterface $apiPool
) {}
/**
* @param int $orderId
* @throws MyAweSomeTechnicalException
* @throws MyAwesomeBusinessException
*/
public function execute(int $orderId): void
{
try {
// get raw data
$order = $this->orderRepository->get($orderId);
// send request
$result = $this->apiPool->execute(FoxtrotOrderRequestAdapter::class, ['order' => $order]);
// handle result
$order->setFoxtrotData($result);
$this->orderRepository->save($order);
} catch (InternalException $e) {
$context['context_error'] = 'Magento request is wrong, foxtrot order service could not handle it'
// service rejected request for business reason: do something (log, throw, errorMessage..)
throw MyAwesomeBusinessException(__('Bad request error'), $e);
} catch (ExternalException $e) {
$context['context_error'] = 'We could not reach foxtrot order service'
// service is unavailable due to technical reason: do something (log, throw, errorMessage..)
$this->logger->error($e, $context);
throw MyAwesomeTechnicalException(__('Foxtrot server error'), $e);
}
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.