bitrix_api/index.php

150 lines
5.1 KiB
PHP
Raw Normal View History

2024-05-15 19:07:13 +03:00
<?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();