1

顧客の配送情報とカードの詳細を含むフォームがあります。検証にはhttp://bassistance.de/jquery-plugins/jquery-plugin-validation/を使用しています。現在、すべてのフォーム フィールドは、ストライプ カードの検証を含め、フォームの送信時に検証されます。問題は、顧客が自分のカード情報を正しく入力し、フォームの他の領域が検証されていない場合でも、請求が行われることです。ストライプ検証を実行する前に、1 つの送信ボタンで請求情報を検証することはできますか? 2 段階のプロセスに分割する必要はありませんか? 以下のコードを参照してください。ありがとう!

<div class="stripe-errors"><span class="payment-errors"></span></div>                
                <form action="charge.php" method="POST" id="payment-form" class="form"     >
                    <div class="pleft">
                        <label for="firstname">First Name</label>
                        <input type="text" size="20" value="<?php echo $_SESSION['sfirst'] ?>" name="fname" class="required" placeholder="First"/>
                        </label>
                        <label for="lastname">Last Name</label>
                        <input type="text" size="20" value="<?php echo $_SESSION['slast'] ?>" name="lname" class="required" placeholder="Last"/>           
                        <label for="email">Email</label>
                        <input type="text" size="20" value="<?php echo $_SESSION['semail'] ?>" name="email" class="required email" placeholder="email@address.com"/>
                        <label>Shipping Address</label>
                        <input type="text" size="20" value="<?php echo $_SESSION['saddress'] ?>" name="address" class="required" placeholder="Address"/>
                    </div>
                    <div class="pmiddle">
                        <label>City</label>
                        <input type="text" size="20" value="<?php echo $_SESSION['scity'] ?>" name="city" class="required" placeholder="City"/>
                        <label>State</label>
                        <select id="state" value="<?php echo $_SESSION['sstate'] ?>" name="state" class="required" >
                                <option value="">Select State</option>
                                <option value="AK">Alaska</option>
                                <option value="AL">Alabama</option>
                                <option value="AR">Arkansas</option>
                                <option value="AZ">Arizona</option>
                                <option value="CA">California</option>
                                <option value="CO">Colorado</option>
                                <option value="CT">Connecticut</option>
                                <option value="DC">District of Columbia</option>
                                <option value="DE">Delaware</option>
                                <option value="FL">Florida</option>
                                <option value="GA">Georgia</option>
                                <option value="HI">Hawaii</option>
                                <option value="IA">Iowa</option>
                                <option value="ID">Idaho</option>
                                <option value="IL">Illinois</option>
                                <option value="IN">Indiana</option>
                                <option value="KS">Kansas</option>
                                <option value="KY">Kentucky</option>
                                <option value="LA">Louisiana</option>
                                <option value="MA">Massachusetts</option>
                                <option value="MD">Maryland</option>
                                <option value="ME">Maine</option>
                                <option value="MI">Michigan</option>
                                <option value="MN">Minnesota</option>
                                <option value="MO">Missouri</option>
                                <option value="MS">Mississippi</option>
                                <option value="MT">Montana</option>
                                <option value="NC">North Carolina</option>
                                <option value="ND">North Dakota</option>
                                <option value="NE">Nebraska</option>
                                <option value="NH">New Hampshire</option>
                                <option value="NJ">New Jersey</option>
                                <option value="NM">New Mexico</option>
                                <option value="NV">Nevada</option>
                                <option value="NY">New York</option>
                                <option value="OH">Ohio</option>
                                <option value="OK">Oklahoma</option>
                                <option value="OR">Oregon</option>
                                <option value="PA">Pennsylvania</option>
                                <option value="PR">Puerto Rico</option>
                                <option value="RI">Rhode Island</option>
                                <option value="SC">South Carolina</option>
                                <option value="SD">South Dakota</option>
                                <option value="TN">Tennessee</option>
                                <option value="TX">Texas</option>
                                <option value="UT">Utah</option>
                                <option value="VA">Virginia</option>
                                <option value="VT">Vermont</option>
                                <option value="WA">Washington</option>
                                <option value="WI">Wisconsin</option>
                                <option value="WV">West Virginia</option>
                                <option value="WY">Wyoming</option>
                            </select>
                        <label>Zip Code</label>
                        <input type="text" size="20" name="zip" value="<?php echo $_SESSION['szip'] ?>" class="required" minlength="5" placeholder="Zip Code"/>
                        <label>Product Quantity</label>
                        <select id="orderquantity" name="orderquantity" >
                            <option value="1">1 Bottle (30 Day Supply)</option>
                            <option value="2">2 Bottles (60 Day Supply)</option>
                            <option value="3">3 Bottles (90 Day Supply)</option>
                            <option value="4">4 Bottles (120 Day Supply)</option>
                            <option value="5">5 Bottles (150 Day Supply)</option>
                            <option value="6">6 Bottles (180 Day Supply)</option>
                            <option value="7">7 Bottles (210 Day Supply)</option>
                            <option value="8">8 Bottles (240 Day Supply)</option>
                        </select>
                    </div>    
                    <div class="pright">
                        <label>Card Number</label>
                        <input type="text" size="20" autocomplete="off" class="card-number" />
                        <label>CVC Security Code </label>
                        <input type="text" size="4" autocomplete="off" class="card-cvc"/><a class="small-link" data-toggle="modal" href="#cvcs"/>What's this?</a>
                        <label>Card Expiration (ex. 01/2015)</label>
                        <select class="card-expiry-month required ">
                                <option value="">Month</option>
                                <option value="01">01 January</option>
                                <option value="02">02 February</option>
                                <option value="03">03 March</option>
                                <option value="04">04 April</option>
                                <option value="05">05 May</option>
                                <option value="06">06 June</option>
                                <option value="07">07 July</option>
                                <option value="08">08 August</option>
                                <option value="09">09 September</option>
                                <option value="10">10 October</option>
                                <option value="11">11 November</option>
                                <option value="12">12 December</option>
                        </select>
                        <select class="card-expiry-year required">
                                <option value="">Year</option>
                                <option value="2012">2012</option>
                                <option value="2013">2013</option>
                                <option value="2014">2014</option>
                                <option value="2015">2015</option>
                                <option value="2016">2016</option>
                                <option value="2017">2017</option>
                                <option value="2018">2018</option>
                        </select>
                    </div>
                    <div class="checkbox">
                        <input type="checkbox" style="visibility:hidden;" value="checked" checked="yes"  name="agree" class="required">
                    </div>
                    <div class="purchasebutton">
                        <button type="submit" class="submit-button button green" onclick="return loadSubmit();">Purchase</button>
                    </div> 
                                <div class="cards">
            <img src="/images/trial/cards.png">
        </div>                        
                </form>                                  
    </div>

フォーム js の検証は次のとおりです。

<script src="/js/jquery.validate.js" type="text/javascript"></script>
    <script type="text/javascript" src="https://js.stripe.com/v1/"></script>
    <script type="text/javascript" src="/js/modal.js"></script>
    <script type="text/javascript">
    //this validates customer information form fields
    $(document).ready(function() {
        $("#payment-form").validate();
    });
    </script>
    <script type="text/javascript">
        // this identifies your website in the createToken call below
        Stripe.setPublishableKey('<?PHP echo $publishable_api_key ?>');

        function stripeResponseHandler(status, response) {
            if (response.error) {
                // re-enable the submit button
                $('.submit-button').removeAttr("disabled");
                // show the errors on the form
                $(".payment-errors").html(response.error.message);
                document.getElementById("processing").style.visibility = "hidden";


            } else {
                var form$ = $("#payment-form");
                // 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' value='" + token + "' />");
                // and submit
                form$.get(0).submit();
            }
        }

        $(document).ready(function() {
          $("#payment-form").submit(function(event) {
            if (!$("input[name=agree]").is(":checked")) {document.getElementById("processing").style.visibility = "hidden";
            return false;
          } else {
          $('.submit-button').attr("disabled", "disabled");
          // createToken returns immediately - the supplied callback submits the form if there are no errors
           Stripe.createToken({
              number: $('.card-number').val(),
              cvc: $('.card-cvc').val(),
              exp_month: $('.card-expiry-month').val(),
              exp_year: $('.card-expiry-year').val()
          }, stripeResponseHandler);
            return false;
                }
            });
            if (window.location.protocol === 'file:') {
                alert("stripe.js does not work when included in pages served over file:// URLs. Try serving this page over a webserver. Contact support@stripe.com if you need assistance.");
            }
        });
    </script>
4

1 に答える 1

0

これはどう :

   $("#payment-form").submit(function(event) {
        $("#payment-form").validate();

        if(!$("#payment-form").valid()){
            event.preventDefault();
            $('.submit-button').removeAttr("disabled");
            document.getElementById("processing").style.visibility = "hidden";
            return false;
        }    

        if (!$("input[name=agree]").is(":checked") ) {document.getElementById("processing").style.visibility = "hidden";
        return false;
        }...
于 2012-09-07T16:11:32.833 に答える