php - 如何将电子邮件字段添加到 Stripe 结帐以进行一次性付款

标签 php stripe-payments

我在我的网站上销售产品。我有 Stripe 设置并且一直在接受订单。我添加了一个电子邮件字段,但它没有保存到 Stripe。

如果有人可以提供一些帮助,我不确定我做错了什么。电子邮件字段位于代码底部。

popup_html.php

<div class="modal fade" id="model_stripe" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="myModalLabel">Credit Card Information</h4>
            </div>
            <div class="modal-body">
                <div id="submit_card_info"></div>
                <form class="form-horizontal te-ajax-form" id="upgrade_form"  action="upgrade/payment" role="form">
                    <div class="form-group">
                        <label class="col-sm-3 control-label" for="">Card Number</label>
                        <div class="col-sm-9">
                            <input class="form-control required" name="cardnumber" id="cardnumber" type="text" placeholder="Card Number" value=""/>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label" for="">CVC</label>
                        <div class="col-sm-9">
                            <input class="form-control required" name="cvc" id="cvc" type="text" placeholder="CVC" value="" />
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label" for="">Expiration</label>
                        <div class="col-sm-9">
                            <div class="row">
                                <div class="col-xs-6">
                                    <select id="expMonth" style="width:100%;padding:5px;">
                                        <?php
                                        $year = date('Y');
                                        for ($i=1; $i < 13; $i++) { 
                                            ?>
                                            <option value="<?php echo $i ?>"><?php echo $i ?></option>
                                            <?php
                                        }
                                        ?>
                                    </select>
                                </div>

                                <div class="col-xs-6">
                                    <select id="expYear" name="year" style="width:100%;padding:5px;">
                                        <?php
                                        $year = date('Y');
                                        for ($i=1; $i < 21; $i++) { 
                                            ?>
                                            <option value="<?php echo $year+$i ?>"><?php echo $year+$i ?></option>
                                            <?php
                                        }
                                        ?>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-3 control-label" for="">E-mail Address</label>
                        <div class="col-sm-9">
                            <input class="form-control required" name="email" id="email" type="text" placeholder="Your E-mail Address" value=""/>
                        </div>
                    </div>
                </form>
                <form id="upgrade_form_token" class="te-ajax-form" action="inc/stripe_charge.php">

Stripe_handler.php:

<?php
require_once ('stripe/lib/Stripe.php');
define('PRICE',9.99);
$stripe = array(
    'secret_key'      => ' sk_test_665545656565656 ',
    'publishable_key' => 'pk_test_35845754785784578'
);
Stripe::setApiKey($stripe['secret_key']);
?>
    <script type="text/javascript" src="https://js.stripe.com/v1/"></script>
    <script type="text/javascript">
    Stripe.setPublishableKey("<?php echo $stripe['publishable_key']; ?>");
    jQuery(document).ready(function() {
        jQuery('#model_stripe .extra_items input').change(function(){
            if( jQuery(this).attr('name')=='info[addon3]' ){
                if(  jQuery(this).is(':checked') ) {
                    jQuery('#saNotes').show();
                } else {
                    jQuery('#saNotes').hide();
                }
            }
            var extra_for_stripe = 0;
            jQuery('#model_stripe .extra_items input:checked').each(function(){
                extra_for_stripe += Number(jQuery(this).val());
            });

            var  notes = false;
            var total_charges = extra_for_stripe+(<?php echo PRICE ?>);
            jQuery('#upgrade_form_token').find('[name="amount"]').val(total_charges);
            jQuery('#model_stripe .total_charges').text('$'+total_charges)
        });

        jQuery("#proceed_stripe").click(function(event) {
            jQuery('#submit_card_info .payment-message').remove();
            var card_no = jQuery('#cardnumber').val();
            var cvc = jQuery('#cvc').val();
            if(card_no.length==0){
                var errorHTML = '<div class="payment-message alert alert-danger alert-dismissable fade in"><button class="close" data-dismiss="alert">&times;</button ><p>Card Number is required.</p></div>';
                jQuery("#submit_card_info").prepend(errorHTML);
                return false;
            }
            if(cvc.length==0){
                var errorHTML = '<div class="payment-message alert alert-danger alert-dismissable fade in"><button class="close" data-dismiss="alert">&times;</button ><p>CVS is required.</p></div>';
                jQuery("#submit_card_info").prepend(errorHTML);
                return false;
            }
            // jQuery('#model_stripe .modal-footer button ').attr('disabled',true);
            Stripe.createToken({
                number: card_no,
                cvc: cvc,
                exp_month: jQuery('#expMonth').val(),
                exp_year: jQuery('#expYear').val(),
            }, stripeResponseHandler);
            return false; // submit from callback
        });
    });
    function stripeResponseHandler(status, response) {
        if (response.error) {
            jQuery('#upgrade_button').removeAttr("disabled");
            // show the errors on the form
            var errorHTML = '<div class="payment-message alert alert-danger alert-dismissable fade in"><button class="close" data-dismiss="alert">&times;</button ><p>'+response.error.message+'</p></div>';
            jQuery("#submit_card_info").prepend(errorHTML);
        }
         else {
            var form = jQuery("#proceed_stripe");
            // token contains id, last4, and card type
            var token = response['id'];
            // insert the token into the form so it gets submitted to the server
            jQuery('#upgrade_form_token input[name="stripeToken"]').val(token);
            jQuery('#footer-form input[type="text"], #footer-form select').each(function(){
                var h = '<input value="'+jQuery(this).val()+'" name="info['+jQuery(this).attr('name')+']" type="hidden">';
                jQuery('#upgrade_form_token').append(h);
            });
            jQuery('#upgrade_form_token').submit();
        }

    }

    function upgrade_form_token_success(form,resp){
        jQuery('#submit_card_info .payment-message').remove();
        if( resp.type=='success'){
            var h = '<div style="display: block;font-size: 16px;padding-bottom: 10px;font-weight: bold;">Thanks for buying. <a href="index.php" title="products">Buy More</a></div>';
            jQuery("#model_stripe .modal-body").html(h);
            jQuery("#model_stripe .modal-footer").remove();
            jQuery("#model_stripe .modal-backdrop").css({
                'opacity':1,
                'background-color':'#fff',
            });
        } else {   
            jQuery("#submit_card_info").append(bs_alert('danger',resp.msg ) );
        }
    }
</script>

最佳答案

Stripe 有一些关于将现有表单转换为 Stripe 表单的好文档@ https://stripe.com/docs/stripe.js/switching .

(1) 请注意,您从所有敏感输入字段中删除了名称属性(如上文 michael 所述),除非您运行的是符合 PCI 标准的服务器,否则这很关键。

(2) 当您解析表单并尝试并最终尝试对卡收费时,您希望将电子邮件地址作为 receipt_email:customer@email.com 传递(参见 https://stripe.com/docs/api#create_charge)

希望这对您有所帮助!

关于php - 如何将电子邮件字段添加到 Stripe 结帐以进行一次性付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177916/

相关文章:

php - 查找 Stripe 付款中包​​含的费用

ruby-on-rails - 集成测试在 Stripe 上创建测试用户,如何停止或 stub

asp.net-mvc - ASPNET 等待网页上的 Webhook 响应/结果

php - Mysql更新语句不会执行

php - facebook/php-webdriver headless 下载

php - 如何只返回符合用户搜索条件的选择行

ios - Stripe 在 iOS 上与 Firebase 集成

javascript - 客户端如何同步调用服务端?

php - 有没有办法在 doctrine2 中使用 mysql 二元运算符?

php - 通过Apache调用MySQL时,PHP脚本在MySQL连接处中断