Меню

Создание заказа через 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

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

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

Установка поиска Sphinx на Ubuntu 22.04 для 1С-Битрикс

Задача: установить и сконфигурировать поиск Sphinx под управлением Ubuntu 22.04 и панели управления HestiaCP для использ...

Если папка то применяем, проверка текущего раздела или подраздела

Иногда требуется применить особый стиль к определённой директории сайта или управлять выводом элементов на странице в за...

Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс

Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одной заморочки: в типовой постав...

Получить список элементов инфоблока с ценами с помощью D7

Задача: использовать D7 в 1С-Битрикс для получения списка элементов инфоблока вместе с их ценами. Это может быть полезно...

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

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 1С-Битрикс.

Дать пользователю возможность быстро отредактировать материал

На одном из разрабатываемых сайтов, пользователи формируют его контент. После регистрации, становится доступен персональ...

Список новостей с автопрокруткой через overflow:scroll

Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточно актуально для новостных сайт...

Почтовое событие на создание нового элемента инфоблока, через API

Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет...

CAPTCHA с возможностью обновления без перезагрузки страницы в 1C-Битрикс

Задача: Так как стандартная капча в 1С-Битрикс, может отобразиться не удачно (символы уходят за грань капчи или не у...