2014-10-12 45 views
1

我似乎遇到了Stripe.js的問題,我使用Laravel作爲出納架構。與Laravel的Stripe.js錯誤

我使用stripe.js,所以我不通過我的服務器和信用卡數據,所以我也不存儲任何。截至目前,瀏覽器似乎存在問題。讓我進一步解釋,Chrome的作品和Firefox,Internet Explorer不。

在Chrome: 目前,當您提交的領域,形式,行爲與預期相同。當您按下提交按鈕時,它會顯示卡片錯誤。例如,卡號,到期月份等(它驗證它)。

在Firefox和IE: 的形式將無法驗證,而是說:

A network error has occurred, and you have not been charged. Please try again. 

,並會自動提交表單,並沒有告訴我們,如果卡號被接受,等等。此外,當您提交表單,它直接到Laravel錯誤頁面,上面寫着:

Missing required param: card 

,我認爲這意味着未完全使用的stripe.js,也許形式不重視的自定義JS 。

Stripe.js

$(document).ready(function() { 
    Stripe.setPublishableKey('pk_test_HdoLAxfuWl53vjchF01fMphS'); 

    $('#subscription-form button').on('click', function() { 
     var form     = $('#subscription-form'); 
     var submit     = form.find('button'); 
     var submitInitialText  = submit.text(); 

     submit.attr('disabled', 'disabled').text('Just one moment...'); 

     Stripe.card.createToken(form, function(status, response) { 
      var token; 
      if(response.error) { 
       form.find('.stripe-errors').text(response.error.message).show(); 
       submit.removeAttr('disabled'); 
       submit.text(submitInitialText); 
       return false; 
      } else { 
       token = response.id; 
       form.append($('<input type="hidden" name="token">').val(token)); 
       form.submit(); 
      } 
     }); 
    }); 
}); 

你可以去嘗試應用在http://account.mcjoin.us和更好地指導我可能發行。總是,感謝您的幫助!

回答

2

我的問題的解決方案很明顯; Internet Explorer和Firefox尚未折舊e.preventDefault();

這可能令人困惑,但讓我解釋一下。在Chrome上,e.preventDefault()不是必需的,它所做的是阻止默認窗體函數。在Internet Explorer或Firefox上,如果不存在,Javascript將無法「劫持」表單並執行其所需的操作。因此,添加e.preventDefault()將使表單不具有默認交互。

現在讓我們來深入瞭解一下代碼,這裏是stripe.js:

$(document).ready(function() { 
    Stripe.setPublishableKey('pk_live_DdMQOXgak0v4yS0yH7vnsHqu'); 

    $('#subscription-form button').on('click', function(e) { 
     var form = $('#subscription-form'); 
     var submit = form.find('button'); 
     var submitInitialText = submit.text(); 

     submit.attr('disabled', 'disabled').text('Just one moment...'); 
     e.preventDefault(); 

     Stripe.card.createToken(form, function(status, response) { 
      var token; 
      if(response.error) { 
       form.find('.stripe-errors').text(response.error.message).show(); 
       submit.removeAttr('disabled'); 
       submit.text(submitInitialText); 
      } else { 
       token = response.id; 
       form.append($('<input type="hidden" name="token">').val(token)); 
       form.submit(); 
      } 

     }); 
    }); 
}); 

這就是它!就這麼簡單!

-1

我看了一下你的頁面,但它需要驗證。我懷疑你得到了這個結果,因爲只有在Firefox和IE中出現的JavaScript錯誤阻止了Stripe.js代碼的運行。我會檢查錯誤控制檯。刪除頁面上可能存在的所有其他JavaScript並重新測試也將證實這一理論。

我也會更新您的服務器端代碼,以便在沒有令牌存在的情況下不進行充電嘗試。

乾杯, 拉里

PS我在條紋上的支持工作。