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();