Задать вопрос
Cresis
@Cresis

Как сформировать криптограмму перед размещением заказа woocommerce?

Стараюсь реализовать свой платежный шлюз через стороннее api.
Есть скрипт checkout, который собирает данные с формы и генерирует криптограмму, которую в последствии нужно отгрузить на api.
Сейчас реализация истории такая:

add_action( 'woocommerce_after_checkout_form', 'add_jscript_checkout');
 
		function add_jscript_checkout() {
			?>
		<script>
			var checkout_form = jQuery('form.checkout');


 		checkout_form.on('checkout_place_order', function () {
// Это нужно, что бы затормозить отправку перед платежем. Создается поля с валуем 1 для условия, что бы потом изменить и продолжить с готовой криптограммой.
     if (jQuery('#confirm-order-flag').length == 0) {
         checkout_form.append('<input type="hidden" id="confirm-order-flag" name="confirm-order-flag" value="1">');
         checkout_form.append('<input type="hidden" id="crypto" autocomplete="off">');
		 alert('Js сработал, дальше...');
     }

     this.createCryptogram = function () {
         var result = checkout.createCryptogramPacket();

         if (result.success) {
             document.getElementById("crypto").value == result.packet;
             alert(result.packet)
         }
         else {
             for (var msgName in result.messages) {
                 alert(result.messages[msgName]);
             }
         }
     };

     jQuery(function () {
         checkout = new cp.Checkout(
             "123123123123123",
             document.getElementById("PaymentForm"));
     });

     return true;
 });

jQuery(document.body).on('checkout_error', function () {
    var error_count = jQuery('.woocommerce-error li').length;

    if (error_count == 1) {
      
    }else{
        jQuery('.woocommerce-error li').each(function(){
            var error_text = jQuery(this).text();
            if (error_text == 'custom_notice'){
                jQuery(this).css('display', 'none');
            }
        });
    }
});
</script>
			<?php
		}


При отправки формы, первое условие работает как швейцарский нож, второе стопорится с ошибкой:
Uncaught TypeError: Cannot read properties of null (reading 'getElementsByTagName')


Не понятно почему выдает ошибку ИД, если вроде бы все нормально. Предположил, что может быть дело в подгрузке формы checkout через ajax, наверное >_<. При загрузке чекаута она подгружает данные, хотя хуки вроде как внутри формы - "woocommerce_after_checkout_form".

Другой вопрос, что может есть более эффективный метод провернуть подобные генерации?
Но, единственное, в этом всем, перед отправки ордера, нужно еще вклинить 3d secure.
И здесь тоже большой пока что вопрос.
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы