Меню

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

Сниппеты типографики bootstrap, для Битрикс

Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstrap из ядра битрикс. Имеет смысл...

Как подобрать редакцию Битрикс под задачи

Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— Какая редакция 1С-Битрикс нужна дл...

Установка счетчика Яндекс.Метрики на сайт с Content Security Policy (CSP)

Если на вашем сайте не отображаются данные о кликах и скроллинге в Яндекс.Метрике, вероятнее всего, это связано с настро...

Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройка работы почты.

Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступна по адресу crm...

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

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

Кастомизация поля input type file, свой внешний вид

Задача: Поле input type="file" предоставляет возможность загрузки файлов на веб-странице. Однако стандартный в...

Удалить половину элементов инфоблока с помощью API

Задача: вот такая странная задача, нужно удалить из инфоблока половину элементов. Не важно каких, просто половину элемен...

Цвета из справочника Highload блоков в списке новостей

На сайте выводятся новости с помощью компонента news.list, при этом у новостей есть свойство "Цвета" типа &quo...

Получить и вывести пользовательские свойства склада в 1С-Битрикс

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