Меню

Создание заказа через API 1С-битрикс, с автоматическим редиректом на оплату

RSS
Создание заказа через API 1С-битрикс, с автоматическим редиректом на оплату, Как сделать заказ через Битрикс, что бы пользователь сразу попадал на оплату
 
Вопрос. У меня в личном кабинете пользователя есть небольшой список услуг. Можно ли сделать переход на оплату сразу по клику обходя корзину и все остальное?  
 
Можно отправить на некую страницу со скриптом, в которой создастся заказ с выбранными позициями и с нее сразу переход на оплату, по ID этого заказа.
То есть, для пользователя что-то быстро прмелькнет, по сути даже не заметит и сразу отправится в банк.

Ответ на вопрос в формате видео инструкции
https://boosty.to/camouf/posts/ab50013d-fac9-4a1d-a3d0-1787357184d6?share=post_link

Код использованный в видео:

Код
use Bitrix\Main\Context,
    Bitrix\Currency\CurrencyManager,
    Bitrix\Sale\Order,
    Bitrix\Sale\Basket,
    Bitrix\Sale\Delivery,
    Bitrix\Sale\PaySystem;

global $USER;

$rsUser = CUser::GetByID($USER->GetID());
    $arUser = $rsUser->Fetch();

    Loader::includeModule("sale");
    
    $request = Context::getCurrent()->getRequest();
    $productId = $request["PRODUCT_ID"];
    $userId = $arUser['ID'];
    $userEmail = $arUser['EMAIL'];

    $siteId = Context::getCurrent()->getSite();
    $currencyCode = CurrencyManager::getBaseCurrency();


    $products = [
        [
            'PRODUCT_ID' => $productId,
            'PRODUCT_PROVIDER_CLASS' => '\Bitrix\Catalog\Product\CatalogProvider',
            'CURRENCY' => 'RUB',
            'QUANTITY' => 1,
        ]
    ];
    $basket = Bitrix\Sale\Basket::create('s1');
    foreach ($products as $product)
    {
        $item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
        unset($product["PRODUCT_ID"]);
        $item->setFields($product);
    }
    $siteId = 's1'; // код сайта
    $userId = $userId; // ID пользователя
    $order = \Bitrix\Sale\Order::create($siteId, $userId);
    $order->setPersonTypeId(1); // 1 - ID типа плательщика
    $order->setBasket($basket);
    $shipmentCollection = $order->getShipmentCollection();
    $shipment = $shipmentCollection->createItem(
        Bitrix\Sale\Delivery\Services\Manager::getObjectById(1) // 1 - ID службы доставки
    );
    $shipmentItemCollection = $shipment->getShipmentItemCollection();
    foreach ($basket as $basketItem)
    {
        $item = $shipmentItemCollection->createItem($basketItem);
        $item->setQuantity($basketItem->getQuantity());
    }
    $paymentCollection = $order->getPaymentCollection();
    $payment = $paymentCollection->createItem(
        Bitrix\Sale\PaySystem\Manager::getObjectById(4) // 1 - ID платежной системы
    );
    $payment->setField("SUM", $order->getPrice());
    $payment->setField("CURRENCY", $order->getCurrency());
    $r = $order->save();
    if (!$r->isSuccess())
    {
        var_dump($r->getErrorMessages());
    }
    $orderId = $order->getId();
Изменено: Михаил Базаров - 02.06.2024 12:50:22
 
Михаил, доброй ночи.
Вопрос такой.
А если пользователь не авторизован?
Я заменил $USER->GetID()  на CSaleUser::GetAnonymousUserID()
Заказ оформляется. Появляется ссылка на оплату, но при переходе к оплате пишет заказ не найден.
Можно как то сессию к заказу привязвать? Или что делать в этом случаи?
Спасибо!
 
Варианта по сути два:
1) Создать пользователя в системе и такие заказы привязывать к нему.
2) При создании заказа, создавать нового пользователя. Тогда до перехода на скрипт еще и e-mail запрашивать. В скрипте добавить создание пользователя методом СUser::Add

Второй вариант правильнее юридически: вам же по закону нужно отправить чек об оплате, пользователю. Ну и не забывайте спрашивать согласие на обработку данных.
 
Самое простейшее в системах отплаты в личном кабинете есть ссылки на оплату.
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Bst

Блог-note: заметки разработчика

Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс

При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывает колличество найденных товаро...

Удалить товары из корзины, если есть определенные товары.

Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины, все другие товары- предупред...

Сортировать товары по названию, цене и дате поступления в каталоге Битрикс

Достаточно часто заказчик просит вывести сортировку по цене, новым поступлениям и названию в каталоге товаров работающег...

Если пользователь авторизован то... API Битрикс

Достаточно часто, при создании сайта на битрикс нужно вывести в шаблон или компонент, некую информацию, доступную только...

Если предложение SKU в корзине, поменять кнопку добавления на "В корзине"

Данная заметка является дополнением к ранее опубликованной: Если товар в корзине, поменять значение input на "В корзине"...

Рассылка новинок каталога в автоматическом режиме

Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользоваться событием OnBeforeIBlockElem...

Удаление товара из корзины по кнопке "минус" если остался 1 товар

Задача: когда в корзине осталась одна единица товара, нужно удалять товар по нажатию на кнопку "минус". Остави...

Умный фильтр только на последнем уровне разделов каталога.

Если в разработаываемом магазине или в принципе в каталоге на Битрикс, вы выводите умный фильтр в разделах - он выводитс...

Добавление в избранное или отложенные, на AJAX из карточки товара

В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "Избранное". Для этого будем исп...