Как принимать оплату по qr коду тинькофф у себя в магазине. Интернет-эквайринг Тинькофф Банк на opencart+retailcrm

Используется модуль оплаты для opencart 3 с сайта https://www.tinkoff.ru/kassa/develop/cms/

Скачан по ссылке https://acdn.tinkoff.ru/static/acquiring/60537806-12d5-4ed7-9e9f-72f77dc655f8.zip?_ga=2.81241748.286014317.1643209680-1435375226.1632341646

Задача

В платежном шлюзе тинькоф отключить оплату по банковской карте, оставить платежи по qr коду (см.скрин ниже)

Решение

Необходимо добавить код в файлы модуля, чтобы вслед за первым запросом (инициализации) к серверу API банка отправлялся второй для получения ссылки на qr code. Для этого в параметры нового запроса потребуется вставлять идентификатор платежа, получаемый в ответ от первого обращения к серверу. Ссылка на документацию

Правки модели

Файл catalog\model\extension\payment\tinkoff.php

Цель правкиМестоположениеВносимые изменения
сформировать второй запрос и заполнить параметр
PaymentId значением, полученным от первого запроса
После строк
$request = $tinkoff->buildQuery('Init', $data); $this->logs($data, $request); $request = json_decode($request);
вставить
$datagain = array(«PaymentId»=>$request->PaymentId);
$requestagain = $tinkoff->buildQuery(‘GetQr’, $datagain);
$this->logs($datagain, $requestagain);
$requestagain = json_decode($requestagain);
возвращать ответ от второго запроса к APIстроку
return isset($request->PaymentURL) ? $request->PaymentURL : »;
заменил на
return isset($requestagain->Data) ? $requestagain->Data : »;

Правки вьюшки

Содержимое Файла catalog\view\theme\default\template\extension\payment\tinkoff.twig

заменил на

<iframe src="{{url}}" height="500px" width="100%"></iframe>

<script type="text/javascript">
	var i =0 ;
	setInterval(function () {
		if(i < 5) {
			checkOrderStatus();
			i++;
		} else
			location.href = 'https://ruketo.ru/index.php?route=checkout/failure';
	},60000);
	function checkOrderStatus() {
		$.ajax({
		      url:'index.php?route=extension/payment/tinkoff/checkOrderStatus',
		      dataType:'json',
		      type:'post',
		      success: function (json) {
		      	if(typeof json['order_status_id'] !== 'undefined' && json['order_status_id'] !== null && json['order_status_id']>0) 
		      		location.href = 'https://ruketo.ru/index.php?route=checkout/success';
		      }
		    });
	}
</script>

Таким образом qr code при оплате откроется не на отдельной странице, а будет подгружен на странице заказа opencart во внутренний фрейм. Как только сработает callback от платежной транзакции в банке произойдет обновление этой страницы. Покупателю будет выведено сообщение об успешном или неудачном платеже.

Модуль retailcrm

Если opencart интегрирован с retailcrm, то нужно установить соответствие способов оплат через тинькоф банк в модуле opencart и в retailcrm

Благодаря данной настройке заказы, оплаченные через qr code, будут менять статус в retailcrm точно также, как в opencart

Вопросы к тех. поддержке retailcrm

Вопрос №1

Подскажите можно как-то менять статус оплаты заказа в retailcrm, когда оплата подтверждается на сайте моего магазина? Т.е. клиент сделал заказ, нажал кнопку подтвердить и перешел на страницу оплаты в платежную систему. Произвел платеж и заказ у меня в магазине меняет статус через обратную связь с плат.системой. Можно сделать, чтобы в этот момент через АПИ пошел запрос в ритейл на смену статуса оплаты этого заказа? Я находил в документации только, что нужно создавать интеграционный тип оплаты в ритейле и оплата должна осуществляться по ссылке из ритейловской карточки заказа,- вот тогда смена статуса оплаты будет происходить.

Ответ

На стороне OpenCart нет отдельного поля под статус оплаты, по умолчанию, поэтому в модуле не предусмотрено работы с ним, но техническая возможноcть передавать в заказ статус оплаты есть.

Для решения этой задачи вам потребуется сделать отдельный скрипт. Методом /api/v5/orders/{externalId} можно получить заказ и из него id оплаты (order[payments][][id]). Далее методом /api/v5/orders/payments/{id}/edit (с параметром by=id) можно передать статус оплаты (payment[status]).

Так можно сделать только если в RetailCRM тип оплаты не связан с модулем платежей. По такому типу оплаты статус может быть изменен только через модуль платежей, но не напрямую.

Использовал данную информацию из ответа ТП и получил приемлемое решение(на основе модуля оплаты tinkoff и библиотеки модуля retailcrm):

в файл модуля catalog\controller\extension\payment\tinkoff.php добавил немного кода после определения класса class ControllerExtensionPaymentTinkoff extends Controller
{

private $retailcrmApiClient;
    public function __construct($registry)
    {
        parent::__construct($registry);

        $this->load->library('retailcrm/retailcrm');
        $this->retailcrmApiClient = $this->retailcrm->getApiClient();

    }
    public function changeRetailStatus($order_id)
    {
        $response = $this->retailcrmApiClient->ordersGet($order_id);

        if ($response->isSuccessful()) {
                $pay_id = 0;
                foreach ($response['order']['payments'] as $payment) {
                    if($payment['type']=='qr-code-shorp') {
                        $pay_id = $payment['id'];
                        break;
                    }
                    
                }
                if($pay_id) {
                    $result = $this->retailcrmApiClient->ordersPaymentEdit(array('status'=>'paid','id'=>$pay_id),'id');
                    if(!$result['success']){
                        $this->log->write('Оплата по qr коду не прошла. Вот причина:');
                        $this->log->write(print_r($result,true));
                    } 

                }

            }
    }

И добавил вызов моей функции changeRetailStatus в момент отработки колбека платежа по тиньков оплате.

$this->changeRetailStatus((int)$request[‘OrderId’]);

Вопрос №2

Подключил оплату через qr. Вот пример страницы оплаты https://qr.nspk.ru/AD10005B56B02IQ89FCQPRSE60B5GTFQ?type=02&bank=100000000004&sum=1000&cur=RUB&crc=C8B3 Вопрос в том, можно ли сделать как-то чтобы после оплаты по qr приведенная страница обновлялась на страницу с результатом платежа или задать страницу переадресации?

Ответ

Коллеги ответили, что, к сожалению, для QR не работает принцип success/failURL

Вопрос №3

Возможно ли добавить к вам в систему свой модуль оплаты? Например, я хочу сделать аналог вот этому https://market-*.retailcrm.ru/admin/integration/list т.к. уже готовый вариант из каталога мне не на 100% подходит. Документация и доступы к АПИ платежной системы у меня есть. Если это возможно, то буду благодарен ссылкам на инструкции по данному вопросу

Ответ

Здравствуйте. Да, вы можете обратиться к нашей документации для разработчиков — ссылка. Порядок интеграции платежной системы через API — ссылка.

Оплата по QR Тинькофф: выгода, возможности, нюансы

Банковская организация Тинькофф активировала финансовый сервис по QR-кодам. Он привязан к системе быстрых платежей СПб. Сгенерировать QR можно в приложении для ОС Андроид и iOS. Чере «куар кодировку» возможно погашение задолженности, оплата товаров, коммуналки.

Как сгенерировать код

Если вы не знаете, как закрыть дебетовую карту банка Тинькофф полностью и быстро, обратите внимание на новое приложение с QR кодом. Считывайте его при помощи камеры мобильного устройства. После сканирования шифра попадете в программу для подтверждения оплаты. В этом же разделе можно полностью закрыть дебетовую карточку банка или рассчитаться за коммунальные услуги. Оплату покупок доступно совершать напрямую из приложения. В окне «Платежи» выбирают раздел «выполнить оплату по QR коду». Останется отсканировать номер и подтвердить действие. Средства моментально поступят на счет компании, комиссия за операцию пока не предусмотрена. Банк Тинькофф планирует ввести кэшбек постоянным клиентам, а также подскажет, как полностью закрыть любую карту.

Пример использования QR кода

Чтобы понять, как принимать и осуществлять оплату по QR коду Tinkoff, нужно знать принцип работы системы. Пошаговая инструкция на примере внесения средств на счет юридического лица:

  1. Скачайте и установите приложение Tinkoff для iOS или Android.
  2. Выберите вкладку «Оплатить» в нижнем меню.
  3. Нажмите на иконку в разделе «Переводы».
  4. Укажите нужную организацию.
  5. Отсканируйте квитанцию для оплаты онлайн.
  6. Наведите камеру на QR, либо найдите подходящее изображение в галерее смартфона.
  7. После считывания реквизиты сохранятся автоматически.
  8. Выберите нужный товар, отсканируйте отпечатки с упаковки.
  9. Подтвердите завершение платежа.

По такой же схеме проводится оплата по QR банка Тинькофф прочих услуг (бизнес, коммуналка, штрафы и прочее). Учитывайте комиссии и прочие сборы, в зависимости от назначения выплаты. Если не знаете, как правильно закрыть дебетовую карту Tinkoff полностью, изучите информацию ниже.

Для чего он нужен

Код QR требуется для проведения финансовых операций непосредственно со смартфона. Тинькофф Банк оказывает услуги по эквайрингу для платежей удаленно. Реализация стартового проекта намечена в сотрудничестве с региональными партнерами. В каждом городе можно подтвердить оплату билетов и прочих услуг по QR коду, а также закрыть дебетовую карту банка Тинькофф.

Преимущества

Достоинства оплаты по QR коду Тинькофф – простота подключения и проведения транзакций (без использования POS-терминала). Средства мгновенно зачисляются на счет, пользователю дается кэшбек. Потребителю доступно закрыть дебетовую карту банка, не выходя из дома. Компания предоставляет услуги экварийнга, покупки билетов и прочих платежей.

К приложению уже подключено несколько розничных торговых точек. Оплатить покупку можно просто приложив телефон к сканеру. В дальнейшем банк Тинькофф планирует расширение услуг через QR код.

Для снятия наличных проделайте следующие манипуляции:

  1. На мониторе выберите «Снять».
  2. Вставьте карту, предварительно авторизовавшись в приложении Тинькофф через QR кодь в магазинах Google Play, App Store, Pay или других виртуальных сообществах.
  3. Приложите мобильное устройство, введите код ПИН или авторизуйтесь при помощи отпечатка пальца.
  4. Выберите необходимую операцию.

Приложение QR от банка Тинькофф безопасно, дает возможность не носить при себе наличные, подходит для оплаты большинства потребительских услуг.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *