Минишоп2 способ оплаты "в кредит" с переходом на сайт банка

Всем доброго времени суток.
а может кто-то подсказать, как сделать для Минишоп2 способ оплаты, при котором после нажатия на кнопку «подтвердить заказ» покупателя бы переадресовывало на такого плана страницу loans.tinkoff.ru/applications/online/08be1ce1-c6d8-4d8e-b482-83947f7b1078
?
Евгений Дубровин
14 ноября 2019, 15:15
modx.pro
1
1 164
0

Комментарии: 19

Евгений Дубровин
14 ноября 2019, 15:45
0
для карточки товара есть такая форма от банка:
<form  style="margin-top:0px;margin-bottom:10px;text-align:center;" action="https://loans.tinkoff.ru/api/partners/v1/lightweight/create"
method="post">
<input name="shopId" value="cornu" type="hidden"/>
<input name="sum" value="[[+price:stripString=` `:mpy=`1.07`]]" type="hidden" id="price_credit">
<input name="itemName_0" value="[[*pagetitle]]" type="hidden"/>
<input name="itemQuantity_0" value="1" type="hidden"/>
<input name="itemPrice_0" value="[[+price:stripString=` `:mpy=`1.07`]]" type="hidden" id="price_credit_2"/> 
<input class="button-credit" type="submit" value="В кредит от [[+price:stripString=` `:mpy=`1.07`:div=`19`:round=`0`]] руб. в месяц" id="price_credit_month"/>
</form>
а как сделать обработчик способа оплаты, который бы отправлял посетителя туда же, куда эта форма при нажатии кнопки «подтвердить заказ»?
    Евгений Дубровин
    05 мая 2020, 10:09
    0
    т.к. мне периодически задают вопрос решил ли я эту задачу, напишу ответ здесь:

    видимо тот вопрос я задал по незнанию ситуации.
    заказчику и не нужен был такой способ оплаты.
    эта форма сугубо для карточки товара и просто помогает оформить кредит, без привязки к оформлению заказа в Интернет-магазине.
    вот здесь cornu.ru/phantom-4-rtk/ сделал кнопку «в кредит» и это то, что надо было заказчику.
      Евгений Дубровин
      30 июля 2022, 12:16
      0
      в итоге эта истрория получила продолжение спустя время)
      кнопку в карточке товара (по их иструкции forma.tinkoff.ru/docs/credit/examples/#example-8) удалось добавить без проблем.
      вот например здесь cornu.ru/kvadrokopter-mavic-3/
      а вот в корзине, точнее на странице оформления заказа не выходит пока.
      там надо собрать содержимое корзины в таком виде:
      items: [{name: 'iphone 11', price: 100000, quantity: 1}, {name: 'Чехол', price: 500, quantity: 1}],
      но это ломает феном и приходится всю функцию
      tinkoff.create(
          {
            sum: 10000,
            items: [{name: 'Apple TV', price: 10000, quantity: 1}],
            promoCode: 'default',
            shopId: 'SHOP_ID',
            showcaseId: 'SHOWCASE_ID',
          },
          {view: 'newTab'}
        )
      одевать в тэги {ignore}
      а как без фенома получить там содержание корзины пока ума не приложу.
      вдруг кто поможет)
        Евгений Дубровин
        30 июля 2022, 15:17
        0
        вообще вот в таком коде
        <script>
        	function credit() {
        	tinkoff.create(
            {
              sum: {$total.cost},
              items: [
            		{foreach $products as $product}	{ name: '{$product.pagetitle}', price: {$product.price}, quantity: {$product.count} }, {/foreach}
            		]
            ,
              promoCode: 'default',
              shopId: 'cornu',
              showcaseId: 'cornu',
            },
         {ignore}   {view: 'newTab'} {/ignore}
          )
        	}
        </script>
        не работают только цена и количество, название отрабатывает (видимо потому что текст и в кавычках).
        что можно сделать, чтобы цена и количество тоже выводились в массиве?
        может не через феном можно как-то?
          Евгений Дубровин
          02 августа 2022, 12:16
          0
          ну т.е. вопрос сводится к тому, как переменную (js или php) в json передать видимо)
        Артур Шевченко
        30 июля 2022, 21:47
        0
        Кто вас учил смешивать js и html? Что вам мешает вынести js в отдельный файл, делать ajax-запросы на сервер за нужными данными? Что мешает использовать массивы callbacks доступные в minishop2?
          Евгений Дубровин
          31 июля 2022, 16:41
          -1
          ну да, то что Вы предлагаете — это точно проще, ага)
          при чем тут html?
          я сам в основном учился и уже почти полтора десятка лет довольно успешно этим занимаюсь.
          я спросил только как там вывести цену и количество, т.к. феном там не отрабатывает.
            Артур Шевченко
            31 июля 2022, 22:31
            0
            Я не говорил, что мой вариант проще, я говорил, что Ваш вариант неправильный и костыльный, да к тому же не работает. А если сделать правильно, то всё будет работать. Но раз у вас полтора десятка лет за плечами, я не буду лезть к Вам со своими советами.
          Роман
          02 августа 2022, 13:57
          0
          Создать свой класс обработки, и отправлять после на кредитную страницу.
          В админке прописать новый класс обработки.
          core/components/minishop2/custom/payment/tinkoffCredit.class.php
            Евгений Дубровин
            02 августа 2022, 14:15
            0
            Роман, спасибо, но нужели только так сложно?
            ведь все переменные есть на странице где я запускаю этот скрипт.
            <script>
            
              var totalcost = "{$total.cost}";
                var price = "{$product.price}";
                var count = "{$product.count}";
            
              function credit() {
              tinkoff.create(
                {
                  sum: totalcost,
                  items: [
                    {foreach $products as $product}  { name: '{$product.pagetitle}', price: price, quantity: count }, {/foreach}
                    ]
                ,
                  promoCode: 'default',
                  shopId: 'cornu',
                  showcaseId: 'cornu',
                },
             {ignore}   {view: 'newTab'} {/ignore}
              )
              }
            </script>
            вот в таком коде все нужные переменные есть и их можно в алерт например вывести.
            а вот как их в json засунуть не знаю.
            т.е. name даже просто феномом отрабатывает (это текстовая строка), а вот цифры (totalcost, price, count) никак не понимаю как можно сделать.
              Роман
              02 августа 2022, 14:47
              0
              А где у вас этот скрипт выполняется, на какой странице?
              Тут не нужны никакие var, попробуйте:
              {$total_cost}
              sum: {$total_cost},
              У вас же товары в массиве, а вы выше вызываете {$product.price} понятно ничего работать не будет.
              {foreach $products as $product}  { name: '{$product.pagetitle}', price: {$product.price}, quantity: {$product.count} }, {/foreach}
                Евгений Дубровин
                02 августа 2022, 15:15
                0
                это выполняется в корзине. (чанк cartOuter)
                вот не отрабатывает просто феном, поэтому и не могу понять)
                т.е. имя товара — без проблем.
                а числа — никак почему-то(

                т.е.

                function credit() {
                	tinkoff.create(
                    {
                      sum:  {$total.cost},
                      items: [
                
                    		{foreach $products as $product}	{ name: '{$product.pagetitle}', price: {$product.price}, quantity: {$product.count} }, {/foreach}
                    		]
                    ,
                      promoCode: 'default',
                      shopId: 'cornu',
                      showcaseId: 'cornu',
                    },
                 {ignore} {view: 'newTab'} {/ignore}
                  )
                	}
                вот этот код выдает ошибку credit is not defined
                  Роман
                  02 августа 2022, 22:18
                  0
                  Выведите, все что есть в products и будет понятно.
                  {$products | print_r}
                    Евгений Дубровин
                    03 августа 2022, 06:44
                    0
                    оно там есть, говорю же, это корзина, в алерт эти переменные выводятся без проблем например.
                    а вот в запросе этом выдают ошибку или уведомление от АПИ банка,
                    что sum и price должны быть числами.
                    при этом в карточке товара пот такой код
                    tinkoff.create(
                        {
                          items: [{name: '[[*pagetitle]]', price: [[+price:stripString=` `:mpy=`1.07`]], quantity: 1}],
                          promoCode: 'default',
                          sum: [[+price:stripString=` `:mpy=`1.07`]],
                          shopId: 'cornu',
                          showcaseId: 'cornu',
                        },
                        {view: 'modal'}
                      )
                    отрабатывает штатно.
                    вот здесь например (кнопка «в кредит» справа)
                    cornu.ru/kvadrokopter-hubsan-h117s-zino-combo/
          Максим
          02 августа 2022, 21:28
          0
          Я иногда удивляюсь тому, как люди методом тыка пытаются решать проблемы… Есть Документация Тинкофф
          Ознакомившись (даже бегло) становится понятным, что любая оплата будет происходить в 2 запроса… Первый — инициализация платежа в банке, которая возвращает ссылку на форму банка. По опыту взаимодействия могу сказать, что время жизни ссылки регулируется как раз в этом методе. Так же для инициализации платежа нужна уникальная строка для обозначения заказа в вашей базе… Тут уже ясно, что заказ на вашем сайте должен быть уже сформирован и вы должны знать его идентификатор (ID).
          Как бы там не было, но стоит так же получать ответ от Банка… Успех или нет… Для этого в лк банка указывается ссылка для нотификаций. По опыту — эту ссылку тоже можно перепределять в методе init (инициализация платежа).
          И теперь уже совсем очевидно, что общение с банком в ModX корректнее всего реализовывать на бекенде… Соответственно придерживаясь логики miniShop2…
          Так что создавайте класс платежа и не нужно будет костылить на фронтенде. Сложного там нет ничего, если немного почитать документацию и вникнуть…
            Евгений Дубровин
            02 августа 2022, 21:58
            0
            блин, ребят, вы чего, что с вами?)
            какие тыки? у меня больше десяти лет опыта, честно.
            какой бэкенд, какие методы ит.п.?!

            всё реализовано банком, вот здесь описано с примерами loans.tinkoff.ru/applications/online/08be1ce1-c6d8-4d8e-b482-83947f7b1078

            если в мой вышепоказанный код вставить вместо переменных числа (и произведение price и quantity будет равняться sum), то всё отрабатывает штатно.
            а вот переменные там (в том json запросе) не отрабатывают (ни jjavascript ни fenom).
            вот только в этом загвоздка и этот вопрос только и пытаюсь решить.
              Максим
              02 августа 2022, 23:36
              0
              Ну 10 лет сразу видно… То обращаетесь к переменным, которых еще не существует, то утверждаете, что феном не отрабатывает и в виде аргумента указываете ошибку JS в которой сказано, что функция credit не определена… И про логи молчите…
              Покажите результат (сгенерированный код) последнего последнего варианта и лог ошибок после генерации кода. Предварительно очистив лог ошибок.
              А лучше так:
              1) Код
              2) Результат
              3) Лог
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            19