150 lines
5.1 KiB
PHP
150 lines
5.1 KiB
PHP
<?php
|
|
require __DIR__ . "/vendor/autoload.php";
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
|
|
|
|
use Psr\Http\Message\ResponseInterface as Response;
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
|
use Slim\Factory\AppFactory;
|
|
|
|
$app = AppFactory::create();
|
|
$app->addRoutingMiddleware();
|
|
$errorMiddleware = $app->addErrorMiddleware(true, true, true);
|
|
|
|
$app->get('/eltech_rest/hello/{name}', function (Request $request, Response $response, $args) {
|
|
$name = $args['name'];
|
|
$response->getBody()->write(json_encode(array("Hello" => $name)));
|
|
return $response->withHeader("Content-Type", "application/json");
|
|
});
|
|
|
|
$app->post("/eltech_rest/order/create", function (Request $request, Response $response) {
|
|
\Bitrix\Main\Loader::includeModule("sale");
|
|
|
|
$req_data = $request->getParsedBody();
|
|
|
|
$lid = getParameterOrResponseError($response, $req_data, "lid");
|
|
$user_id = getParameterOrResponseError($response, $req_data, "userId");
|
|
$currency = getParameterOrResponseError($response, $req_data, "currency");
|
|
|
|
$order = \Bitrix\Sale\OrderBase::createOrder($lid, $user_id, $currency);
|
|
|
|
$response_data = array(
|
|
"result" => array(
|
|
"order" => array(
|
|
"id" => $order->getId(),
|
|
)
|
|
)
|
|
);
|
|
$response->getBody()->write(json_encode($req_data));
|
|
|
|
return $response->withHeader("Content-Type", "application/json");
|
|
});
|
|
|
|
$app->get("/eltech_rest/order/total", function (Request $request, Response $response) {
|
|
\Bitrix\Main\Loader::includeModule("sale");
|
|
\Bitrix\Main\Loader::includeModule("main");
|
|
\Bitrix\Main\Loader::includeModule("catalog");
|
|
|
|
$params = $request->getQueryParams();
|
|
$db = \Bitrix\Main\Application::getConnection();
|
|
|
|
if (!array_key_exists("fuserId", $params)) {
|
|
$response->getBody()->write(json_encode(array("status" => "error", "info" => "\"fuserId\" is not provided")));
|
|
return $response->withStatus(400)->withHeader("Content-Type", "application/json");
|
|
}
|
|
|
|
$basket = \Bitrix\Sale\Basket::loadItemsForFUser($params["fuserId"], "s2");
|
|
$bitrix_basket_items = $basket->getBasketItems();
|
|
foreach ($bitrix_basket_items as $item) {
|
|
$item->delete();
|
|
}
|
|
|
|
$recordset = $db->query(sprintf("select * from api_cart where fuser_id = %d", $params['fuserId']));
|
|
|
|
foreach ($recordset->fetchAll() as $item) {
|
|
$product = array(
|
|
'PRODUCT_ID' => intval($item["product_id"]),
|
|
'QUANTITY' => intval($item["quantity"]),
|
|
'MODULE' => 'catalog',
|
|
"BASE_PRICE" => CPrice::GetBasePrice(intval($item["product_id"]))["PRICE"],
|
|
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProviderOrderCustom'
|
|
);
|
|
|
|
\Bitrix\Catalog\Product\Basket::addProductToBasket($basket, $product,
|
|
array(
|
|
'SITE_ID' => "s2",
|
|
));
|
|
}
|
|
$basket->save();
|
|
$basket->refresh();
|
|
|
|
|
|
$discount = \Bitrix\Sale\Discount::loadByBasket($basket);
|
|
|
|
$discount->calculate();
|
|
$discount->save();
|
|
|
|
$discount_result = $discount->getApplyResult(true);
|
|
$basket->refreshData(array('PRICE', 'COUPONS'));
|
|
|
|
$resultedItems = array();
|
|
|
|
$coupon_is_activated = false;
|
|
if (array_key_exists("coupon", $params)) {
|
|
$coupon = \Bitrix\Sale\DiscountCouponsManager::getData($params["coupon"]);
|
|
|
|
if (!$coupon) {
|
|
$response->getBody()->write("Coupon is invalid or does not exist");
|
|
return $response->withStatus(400)->withHeader("Content-Type", "application/json");
|
|
}
|
|
$coupon = CSaleDiscount::GetByID($coupon["DISCOUNT_ID"]);
|
|
$coupon_is_activated = true;
|
|
}
|
|
|
|
foreach ($basket->getBasketItems() as $elem) {
|
|
/* @var $elem Bitrix\Crm\Order\BasketItem */
|
|
$basket_code = $elem->getBasketCode();
|
|
if ($coupon_is_activated) {
|
|
$elem->getFinalPrice();
|
|
$discount_value = unserialize($coupon["ACTIONS"])["CHILDREN"][0]["DATA"]["Value"];
|
|
$sum += $elem->getFinalPrice() - ($elem->getFinalPrice() * ($discount_value / 100));
|
|
}
|
|
else {
|
|
if (isset($discount_result["PRICES"]['BASKET'][$basket_code]))
|
|
{
|
|
$sum += $discount_result["PRICES"]['BASKET'][$basket_code]["PRICE"]*$elem->getQuantity();
|
|
} else {
|
|
$sum += $elem->getFinalPrice();
|
|
}
|
|
}
|
|
|
|
$resultedItems[] = $elem->getFields()->getValues();
|
|
}
|
|
|
|
$response_data =array(
|
|
"items" => $resultedItems,
|
|
"discount" => $discount_result,
|
|
"price" => round($sum, 2),
|
|
"basePrice" => round($basket->getBasePrice(), 2),
|
|
);
|
|
|
|
$response->getBody()->write(json_encode($response_data));
|
|
return $response->withStatus(200)->withHeader("Content-Type", "application/json");
|
|
|
|
|
|
});
|
|
|
|
function getParameterOrResponseError(Response $response, array|null|object $data, string $key)
|
|
{
|
|
if (!array_key_exists($key, $data)) {
|
|
$response->getBody()->write(json_encode(array("status" => "error", "info" => "\"$key\" is not provided")));
|
|
|
|
return $response
|
|
->withStatus(400)
|
|
->withHeader("Content-Type", "application/json");
|
|
}
|
|
|
|
return $data[$key];
|
|
}
|
|
|
|
// Run app
|
|
$app->run();
|