@SergeTkach
OpenCart Forever

Почему не идет редирект после подтверждения заказа в OpenCart 2.3 в платежном модуле ПриватБанка?

Описываемый модуль — https://www.opencart.com/index.php?route=marketpla...
Я адаптировал под 2.3, но вижу, что с 2.1 у людей также есть проблемы.
Логирование в контроллее показало, что при обращении к платежному серверу - ответ успех. Но вот редирект из файла представления не происходит

error: function (xhr, ajaxOptions, thrownError) { // в случae нeудaчнoгo зaвeршeния зaпрoсa к сeрвeру

Сообщает, что ответ 200
+ SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Вот полный код:
<?php //if ($testmode) { ?>
<!--  <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $text_testmode; ?></div>-->
<?php //} ?>

<div class="pull-right">
    <div class="row" style="margin-right: 1px;">
    <form id="privatbank_paymentparts_pp_checkout" role="form" class="form-inline">  
      <div class="form-group">
        <label for="partsCount_pp" style="float:left;padding: 6px 12px 2px 12px;"><?php echo $text_label_partsCount; ?></label>
        <select id="partsCount_pp" name="partsCount_pp" style="width:auto;" class="form-control selectWidth">
          <?php foreach ($partsCounts as $partsCount) { ?>
             <option><?php echo $partsCount; ?></option>
          <?php } ?>
        </select>
      </div>
      <div class="btn-group">
        <input type="submit" value="<?php echo $button_confirm; ?>" class="btn btn-primary" />
      </div>
      </form>
    </div>
</div> 

<script type="text/javascript">

$(document).ready(function(){
    $("#privatbank_paymentparts_pp_checkout").submit(function(){
        var error = false;
        partsCounArr = {partsCount: $('#partsCount_pp').val()};        
        
        $.ajax({
            type: 'POST',
            url: '<?php echo $action; ?>',
            dataType: 'json',
            data: partsCounArr,
               success: function(data){ // сoбытиe пoслe удaчнoгo oбрaщeния к сeрвeру и пoлучeния oтвeтa
               console.log(data['state']);
                    switch(data['state']){
                        case 'SUCCESS':
                            window.location = 'https://payparts2.privatbank.ua/ipp/v2/payment?token='+data['token'];
                            break;
                        case 'FAIL':
                            $('#collapse-checkout-confirm .panel-body').prepend('<div class="alert alert-warning">' + data['message'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>');
                          break;
                        case 'sys_error':
                            $('#collapse-checkout-confirm .panel-body').prepend('<div class="alert alert-warning">' + data['message'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>');                                          
                          break;
                    }                               
//                       if (data['error']) { // eсли oбрaбoтчик вeрнул oшибку
//                           alert(data['error']); // пoкaжeм eё тeкст
//                       } else { // eсли всe прoшлo oк
//                           alert('Письмo oтврaвлeнo! Чeкaйтe пoчту! =)'); // пишeм чтo всe oк
//                       }
                 },
               error: function (xhr, ajaxOptions, thrownError) { // в случae нeудaчнoгo зaвeршeния зaпрoсa к сeрвeру
//                    alert(xhr.status); // пoкaжeм oтвeт сeрвeрa
//                    alert(thrownError); // и тeкст oшибки
                 }
//               complete: function(data) { // сoбытиe пoслe любoгo исхoдa
//                    form.find('input[type="submit"]').prop('disabled', false); // в любoм случae включим кнoпку oбрaтнo
//                 }            
        });
        
        return false;    
    });    
});    

</script>
  • Вопрос задан
  • 461 просмотр
Решения вопроса 1
@SergeTkach Автор вопроса
OpenCart Forever
Сначала все уперлось в то, что стоимость доставки должна стоить денег в обязательном порядке. И вроде бы для почтовых сервисов это логично. Но как быть с самовывозом?

Есть вариант удалить из скриптов модуля ПриватБанка блок, в котором он доставку засчитывает как товар. Правда, тогда доставку оплачивать надо отдельным способом по какой-то личной договоренности что-ли:
//add shipped in products
if(!empty($this->session->data['shipping_method']) && count($this->session->data['shipping_method'])>0){
    $data_deal['products'][] = array(
        'name'     => htmlspecialchars($this->session->data['shipping_method']['title']),
        'count' => 1,
        'price'    => $this->currency->format($this->session->data['shipping_method']['cost'], $order_info['currency_code'], false, false)
    );                
}
//End add shipped in products


Если не убирать код и пользваоться модулем мультидоставки, то важно знать, что в модуле forum.opencart-russia.ru/threads/multi-dostavka-il... есть проблема: модуль некорректно насчитывает стоимость доставки, если не заполнить поле "Стоимость изменения цены" (обращайте внимание на смету корзины, а не на блок доставки)
2f92853637cd4395bd92b8a82b7e9309.pngf7f097d8c26741118a8c96529eb3b5b3.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Firik67
Middle PHP Developer
Возможно, что в ответе приходит не json, на что указывает ошибка, поэтому и попадает в error. Чтобы попало в success, нужно привести datatype в соответствие к ответу от сервера.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы