2015-04-09 21 views
6

Tôi đang sử dụng API của Stripe (v2) - https://stripe.com/docs/stripe.jsLàm cách nào để xác thực phiếu giảm giá bằng API JavaScript của Stripe?

Điều này đang được triển khai bằng cách sử dụng bộ thu ngân của Laravel, gói đi kèm với Laravel, với docs.

Tôi có một biểu mẫu rất cơ bản tại thời điểm này, thu thập thông tin thẻ của người dùng, sau đó được chuyển qua cho Stripe, người sẽ xác thực và trả lại mã thông báo. Mã thông báo này được đặt trong biểu mẫu của tôi và là những gì tôi lưu trữ và sử dụng trong hệ thống của tôi (một lần nữa, tất cả được xử lý sạch bởi Laravel).

Tôi cần sử dụng phiếu thưởng như một phần của quy trình thanh toán này. Tôi cho rằng đó sẽ là trường hợp đơn giản khi thêm trường phiếu giảm giá và Stripe sẽ thực hiện phần còn lại, nhưng tiếc là không phải như vậy - không có xác thực nào xảy ra khi phiếu mua hàng được nhập và biểu mẫu được gửi.

Xử lý phiếu giảm giá sau khi gửi là tốt, vì Laravel xử lý điều đó.

Câu hỏi của tôi: Làm thế nào tôi có thể nhận được Stripe để xác thực phiếu giảm giá đã nhập bằng API JavaScript của họ?

Dưới đây là hình thức của tôi và JS đi kèm:

Mẫu:

<form method="POST" action="/subscribe/individual" accept-charset="UTF-8" class="form-horizontal" role="form" id="subscription-form"> 

<input name="_token" type="hidden" value="ep1tcaWMRGrPOLSkBCBJQo1USynWW6aTjDh9xN3W"> 

<div class="payment-errors"></div> 
<div id="signupalert" style="display:none" class="alert alert-danger"> 
    <p>Error:</p> 
    <span></span> 
</div> 

<div class="form-group"> 
    <label for="ccn" class="col-md-3 control-label">Credit card number</label> 
    <div class="col-md-9"> 
     <input class="form-control" data-stripe="number" name="ccn" type="text" value="" id="ccn"> 
    </div> 
</div> 

<div class="form-group"> 
    <label for="expiration" class="col-md-3 control-label">Expiration date</label> 
    <div class="col-md-6"> 
     <select class="form-control" data-stripe="exp-month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select> 
    </div> 
    <div class="col-md-3"> 
     <select class="form-control" data-stripe="exp-year" name="year"><option value="2014" selected="selected">2014</option><option value="2015">2015</option><option value="2016">2016</option><option value="2017">2017</option><option value="2018">2018</option><option value="2019">2019</option><option value="2020">2020</option><option value="2021">2021</option><option value="2022">2022</option><option value="2023">2023</option><option value="2024">2024</option><option value="2025">2025</option><option value="2026">2026</option><option value="2027">2027</option><option value="2028">2028</option><option value="2029">2029</option></select> 
    </div> 
</div> 

<div class="form-group"> 
    <label for="cvc" class="col-md-3 control-label">CVC number</label> 
    <div class="col-md-3"> 
     <input class="form-control" data-stripe="cvc" name="cvc" type="text" value="" id="cvc"> 
    </div> 
</div> 

<div class="form-group"> 
    <label for="coupon" class="col-md-3 control-label">Coupon</label> 
    <div class="col-md-3"> 
     <input class="form-control" data-stripe="coupon" name="coupon" type="text" value="" id="coupon"> 
    </div> 
</div> 

<div class="form-group"> 
    <!-- Button -->           
    <div class="col-md-offset-3 col-md-9"> 
     <button type="submit" id="btn-signup" class="btn btn-info">Sign Up</button> 
    </div> 
</div> 

JavaScript:

<script type="text/javascript" src="https://js.stripe.com/v2/"></script> 

<script> 
    Stripe.setPublishableKey('*** removed ***'); 
    jQuery(function($) { 
     $('#subscription-form').submit(function(event) { 
      var $form = $(this); 

      // Disable the submit button to prevent repeated clicks 
      $form.find('button').prop('disabled', true); 

      Stripe.card.createToken($form, stripeResponseHandler); 

      // Prevent the form from submitting with the default action 
      return false; 
     }); 
    }); 

    var stripeResponseHandler = function(status, response) { 
     var $form = $('#subscription-form'); 

     if (response.error) { 
      // Show the errors on the form 
      $form.find('.payment-errors').text(response.error.message); 
      $form.find('button').prop('disabled', false); 
     } else { 
      // token contains id, last4, and card type 
      var token = response.id; 
      // Insert the token into the form so it gets submitted to the server 
      $form.append($('<input type="hidden" name="stripeToken" />').val(token)); 
      // and submit 
      $form.get(0).submit(); 
     } 
    }; 
</script> 

Trả lời

2

Tôi khá chắc chắn rằng bạn không thể.

Tôi đang xác thực phiếu thưởng qua ajax và thực hiện cuộc gọi phía máy chủ tới Stripe. Sau đó, bạn có thể áp dụng phiếu thưởng cho bất kỳ giao dịch mua nào ở phía máy chủ khi bạn chấp nhận POST.

+0

Hi easyjo, tôi đã tự hỏi nếu bạn đã có một số mã ví dụ về cách bạn đang làm điều này với AJAX? –

+2

@MichelleGlauser Tôi chỉ đang thực hiện ajax đến điểm cuối cục bộ, sau đó thực hiện cuộc gọi phía máy chủ thông qua API Stripe để xác nhận xem phiếu thưởng có hợp lệ hay không. Nếu nó hợp lệ, tôi chỉ hiển thị một 200, với các chi tiết của phiếu giảm giá trong json, khôn ngoan khác tôi render một 404. – easyjo

Các vấn đề liên quan