Нативная проверка WooCommerce - проблема AJAX - PullRequest
1 голос
/ 21 марта 2019

Я разрабатываю собственный плагин для WooCommerce, используя viva payments.Документация здесь.Это будет собственный плагин

https://github.com/VivaPayments/API

Проблема

В настоящее время мне нужно удалить сценарий wc-checkout, чтобы заставить его работать

wp_dequeue_script( 'wc-checkout' );

Причиной исключения является то, что viva использует обработчик карт, а использование событий onblur делает запросы XHR в viva.Если посмотреть на вкладку сети, запрос XHR называется

https://demo.vivapayments.com/api/cards/installments?key=mykey

, а ответ - {"MaxInstallments":0}

Если я не запрашиваю сценарий, этот запрос не выполняется.Если запрос не был сделан, когда я пытаюсь получить токен, мне выдается сообщение об ошибке «Дата истечения не может быть проанализирована»

Вот jscode

function getToken(){
    VivaPayments.cards.requestToken( function(){

    });
}


            function tokenMyFunction() {

                VivaPayments.cards.requestToken( function(){

                        //do something?
                });


            }

        $(document).ready(function (){

            if (viva_params.testMode === '1'){
                        var url = "https://demo.vivapayments.com"
            } else {
                    url = "https://www.vivapayments.com"
            }

               VivaPayments.cards.setup({
                    publicKey:  viva_params.publishableKey,
                    baseURL: url,
                    cardTokenHandler: function (response) {
                        //console.log(response)
                            if (!response.Error) {
                                //console.log(response.Token)
                                $('#hidToken').val(response.Token);
                                return false;
                            }
                            else{
                                console.log(response);
                                alert(response.Error);
                                return false;
                            }
                    },
                    installmentsHandler: function (response) {
                            if (!response.Error) {
                                    if (response.MaxInstallments == 0)
                                        return;
                                    $('#drpInstallments').show();
                                    for(i=1; i<=response.MaxInstallments; i++){
                                        $('#drpInstallments').append($("<option>").val(i).text(i));
                                    }
                            }
                            else
                                alert(response.Error);
                    }
               });
        });

ВотVIVA JS с их сервера, который используется

https://demo.vivapayments.com/web/checkout/js

Вот форма

<form action="index.php" method="POST" id="payment-form">
      <div class="form-row">
          <label>
           <span>Cardholder Name</span>
           <input  class="form-field"  type="text" size="20" name=”txtCardHolder” autocomplete="off" data-vp="cardholder"/>
       </label>
   </div>
   <div class="form-row">
      <label>
       <span>Card Number</span>
       <input class="form-field" type="text" size="20" maxlength="16" name=”txtCardNumber” autocomplete="off" data-vp="cardnumber"/>
   </label>
</div>
<div class="form-row">
  <label>
   <span>CVV</span>
   <input class="form-field"  type="text" name=”txtCVV” size="4" autocomplete="off" data-vp="cvv"/>
</label>
</div>
<div class="form-row">
  <label>
   <span>Expiration (MM/YYYY)</span>
   <input type="text" size="2"  class="form-field" name=”txtMonth” autocomplete="off" data-vp="month"/>
</label>
<span> / </span>
<input type="text"  class="form-field" class="lukeexpiry" size="4" name=”txtYear” autocomplete="off" data-vp="year"/>
</div>
<div class="form-row">
   <label>

    <select id="drpInstallments" value="0" name="drpInstallments" style="display:none"></select>
</label>
</div>

<div class="form-row">
<button type="button" onclick="getToken()">Get Token</button>
</div>

<input type="hidden" name="OrderId" value="146228" /> <!--Custom Field-->
<input type="hidden" name="hidToken" id="hidToken" /> <!--Hidden Field to hold the Generated Token-->
</form>

Как я уже сказал:

  1. КогдаЯ снимаю с контроля wc-checkout, viva делает запрос в порядке на api / cards / взносы и, следовательно, впоследствии, когда я вызываю tokenMyFunction (), получает токен в порядке
  2. Если я не снимаю очередь, я получаю ошибку об истечении срока действия назапрос токена

Как я могу позволить viva по-прежнему делать запросы вместе со сценарием wc-checkout, или что, черт возьми, делает этот вызов рассрочки платежей?
Почему это влияет на запрос токена.Я нигде не вижу, чтобы ответ {"MaxInstallments":0} использовался снова?

Любая предоставленная помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...