簡體   English   中英

如何使用 Stripe 的 JavaScript API 驗證優惠券?

[英]How to validate coupon using Stripe's JavaScript API?

我正在使用 Stripe 的 API (v2) - https://stripe.com/docs/stripe.js

這是使用 Laravel 的收銀員實現的,收銀員是 Laravel 附帶的一個包,帶有docs

目前我有一個非常基本的表單,收集用戶的卡信息,然后將其傳遞給 Stripe,后者將對其進行驗證並返回一個令牌。 這個令牌放在我的表單中,是我在我的系統中存儲和使用的(同樣,所有這些都由 Laravel 干凈地處理)。

我需要使用優惠券作為此結帳流程的一部分。 我認為這是一個添加優惠券字段的簡單案例,Stripe 會完成其余的工作,但不幸的是,事實並非如此 - 輸入優惠券並提交表單時,不會對優惠券進行驗證。

提交后處理優惠券很好,因為 Laravel 會處理它。

我的問題:如何讓 Stripe 使用他們的 JavaScript API 驗證輸入的優惠券?

以下是我的表格和隨附的 JS:

形式:

<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>

我很確定你不能。

我正在通過 ajax 驗證優惠券,並向 Stripe 發出服務器端調用。 然后,您可以在接受 POST 后將優惠券應用於服務器端的任何購買交易。

我找到的解決方案是

  • 在 Stripe 儀表板上創建優惠券
  • 對優惠券idcode使用相同的值
  • 然后通過調用優惠券retrieve方法,您將在返回的優惠券響應中獲得一個布爾屬性“ valid ”。 這是來自 Stripe Docs 的響應示例:
{
  "id": "25_5OFF",
  "object": "coupon",
  "amount_off": null,
  "created": 1617028691,
  "currency": "usd",
  "duration": "repeating",
  "duration_in_months": 3,
  "livemode": false,
  "max_redemptions": null,
  "metadata": {},
  "name": "25.5% off",
  "percent_off": 25.5,
  "redeem_by": null,
  "times_redeemed": 0,
  "valid": true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM