Стараюсь реализовать свой платежный шлюз через стороннее 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.
И здесь тоже большой пока что вопрос.