2017-02-17 3 views
2

У меня есть успешный созданный код ajax для отправки данных на внешний api (платежный шлюз).Получить данные из внешнего api

Проблема в том, как я могу получить данные после того, как они платят и покажут «ожидающий платеж» перед отображением контейнера «Спасибо»?

Ниже мой код АЯКС сообщению данных:

$.ajax({ 
 
      url: 'creating_bill.php', 
 
      data: { 
 
       paid_amount : JSON.stringify(jumlah_semua), 
 
       email : emel, 
 
       mobile : telefon, 
 
       name : nama 
 
      }, 
 
      type: "POST", 
 
      dataType: "json", 
 
      success: function (data) { 
 
       confirm('Terima Kasih ! Sila buat pembayaran dengan segera.'); 
 
       console.log(data)    
 
       window.open(data.url, '_blank'); 
 
       
 
       setTimeout(function() 
 
       { 
 
        window.location = 'index.html'; 
 
       },10000); 
 
      }, 
 
      async: false, 
 
      error: function(data) { 
 
       handleRequestError(data); 
 
      } 
 
     }) 
 
}

Вот док ссылка апи для завершения оплаты: BillPlz doc

Но я понятия не имею, как его работа. Как я могу опубликовать данные и вернуть данные в один и тот же запрос ajax?

В основном мой системный процесс выглядит следующим образом.

  1. клиентов посетить веб-сайт
  2. Клиента добавить пункт, что они хотят купить
  3. Клиента подтверждает деталь и решили оплатить через платежный шлюз
  4. Клиента перенаправлять на платежный шлюз счет для оплаты
  5. системы покажите сообщение «Ожидание» на моем веб-сайте, ожидая клиента, чтобы завершить оплату.
  6. После того как клиент завершит оплату, они вернутся на мой сайт и узнают сообщение «спасибо за ваш платеж».

Код, указанный выше, представляет собой код, который я использую для размещения данных клиента на платежном шлюзе api. Моя проблема заключается в том, как я могу показать сообщение «ожидание», ожидая, когда клиент завершит оплату и покажет сообщение «Спасибо», когда платеж будет завершен.

ответ

2

Поэтому вам нужно будет сделать отдельный запрос, чтобы проверить, завершил ли пользователь оплату счета. В принципе вы создаете функцию, которая:

  • отправляет запрос, чтобы проверить, если счет оплачен
  • если законопроект не заплатил он снова называет себя в 1 секунду (или какой-либо другой интервал)
  • если счет оплачен он показывает сообщение «Спасибо» и перенаправляет на индекс (или все, что вы хотите сделать после)

Также удаление async: false, вероятно, хорошая идея, так как он блокирует браузер, пока запрос работает ,

Ваш код должен быть вдоль линий:

function checkBillStatus() { 
    $.ajax({ 
    ... 
    // Compose the ajax request to check the bill status 
    ... 
    success: function (data) { 
     // Here you need to check if the bill is paid 
     if (data.isBillPaid) { 
     console.log('Remove waiting for the payment message'); 
     console.log('Show thank you for the payment message'); 
     // Payment is done, redirecting to index 
     setTimeout(function() { 
      window.location = 'index.html'; 
     },10000); 
     } else { 
     // Repeat the request after a while 
     setTimeout(checkBillStatus, 1000); 
     } 
    } 
    }); 
} 

$.ajax({ 
    ... 
    success: function (data) { 
    confirm('Terima Kasih ! Sila buat pembayaran dengan segera.'); 
    console.log('Add waiting for the payment message'); 
    console.log('User confirmed the payment, redirecting to gateway'); 
    window.open(data.url, '_blank'); 

    setTimeout(checkBillStatus, 1000); 
    }, 
    async: true, 
    ... 
}); 

Таким образом, после confirm вы должны показать сообщение «ожидание», затем код открывает страницу шлюза и устанавливает тайм-аут, чтобы проверить состояние счета в 1 секунда. Сама функция checkBillStatus выполняет проверку состояния счета и если она не оплачена, она устанавливает тайм-аут, чтобы снова проверить статус счета за 1 секунду. И так далее, пока счет не будет оплачен. Когда он есть, он отображает сообщение «спасибо» и перенаправляет на индекс.

Вам нужно будет положиться на шлюз, чтобы закрыть открытое окно.

+0

Im не очень понимаю. Должен ли я создать еще один запрос ajax для получения данных из api? Потому что клиент должен будет заплатить первым. –

+0

Клиент должен будет заплатить до чего? Я думал, что вам нужно показать сообщение «ждать» сразу после того, как клиент заплатил – jetpackpony

+0

О, ну, клиенту нужно оплатить свои счета, прежде чем я покажу сообщение «Спасибо». Сообщение «Ожидание» будет отображаться, пока оно находится на странице оплаты. –

Смежные вопросы