【问题标题】:How can an email be returned from Stripe Checkout?如何从 Stripe Checkout 退回电子邮件?
【发布时间】:2017-10-19 22:43:44
【问题描述】:

使用 Stripe,我想从他们在 Checkout 中提供的电子邮件中存储客户电子邮件地址。不幸的是,在我的charge.php 文件中发布stripeEmail 会返回null

如何从结帐中退回电子邮件,以便使用它发送收据?

这是我的表单代码:

<script src="https://checkout.stripe.com/v2/checkout.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
<form action="charge.php" method="post">
  <input type="hidden" id="amount" name="chargeAmount"/>
  <button data-charge-amount="300000" data-charge-name="Name" data-charge-description="Description">Select Pledge Level</button>
  <button data-charge-amount="123123" data-charge-name="Name2" data-charge-description="Description2">Donate</button>
</form>
<script>
  $('button').click(function(){
    var token = function(res){
      var $theToken = $('<input type=hidden name=stripeToken />').val(res.id);
      $('form').append($theToken).submit();
    };
    var amount = $(this).data("chargeAmount");
    var name = $(this).data("chargeName");
    var description = $(this).data("chargeDescription");
    $('input#amount').val(amount);
    StripeCheckout.open({
      key:         'pk_test_xxxxxxxxxxxxxxxxxxxxxxxx',
      address:     true,
      amount:      amount,
      currency:    'usd',
      name:        name,
      description: description,
      panelLabel:  'Pledge',
      token:       token,
    });
    return false;
  });
</script>

这是我的charge.php 代码:

<?php
require_once('./config.php');
$token  = $_POST['stripeToken'];
$amount = $_POST['chargeAmount'];
$customer = \Stripe\Customer::create(array(
    'email' => $email,
    'card'  => $token,
));
$charge = \Stripe\Charge::create(array(
  'customer' => $customer->id,
  'amount'   => $amount,
  'currency' => 'usd',
));
?> 

这是我的config.php 代码:

<?php
require_once('./stripe-php-2.1.2/init.php');

$stripe = array(
  "secret_key"      => "sk_test_xxxxxxxxxxxxxxxxxxxxxxxx",
  "publishable_key" => "pk_test_xxxxxxxxxxxxxxxxxxxxxxxx"
);

\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: php stripe-payments


    【解决方案1】:

    这里的问题是您使用的是Custom Checkout,这意味着Checkout 不会自动将数据发布到您的服务器,而是在token 回调中提供数据。在您的情况下,您只是在此处检索令牌 ID,这就是您看不到电子邮件的原因。

    更新您的代码,以便 token 回调也检索电子邮件并将其发送到 stripeEmail 参数中:

    var token = function(res){
      var $theToken = $('<input type="hidden" name="stripeToken" />').val(res.id);
      var $theEmail = $('<input type="hidden" name="stripeEmail" />').val(res.email);
      $('form').append($theToken).append($theEmail).submit();
    };
    

    【讨论】:

      【解决方案2】:

      我只是在这个问题上花了一整夜! @Koopajah 帮了很多忙,所以这是我的整个解决方案,以防其他人碰巧遇到这个问题。

      这是表格:

          <form action="/charge.php" method="post">
            <input 
                  type="submit"
                  id="payMe"          
                  class="btn btn-default btn-lg btn-success"
                  value="&nbsp;&nbsp; Pay &nbsp;&nbsp;"
                  data-key="xxxxxxx"
                  data-amount="199"
                  data-currency="usd"
                  data-name="Stuff"
                  data-description="20 Whozits ($19.99)"
          data-image="images/image.jpg"
          data-bitcoin="true"
              /> 
              <script src="https://checkout.stripe.com/v2/checkout.js"></script>
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
              <script>
              $(document).ready(function() {
                  $('#payMe').on('click', function(event) {
                      event.preventDefault();
      
                      var $button = $(this),
                          $form = $button.parents('form');
      
                      var opts = $.extend({}, $button.data(), {
                          token: function(result) {
      
                              var $theToken = $('<input>').attr({ type: 'hidden', name: 'stripeToken', value: result.id })
                              var $theEmail = $('<input>').attr({ type: 'hidden', name: 'stripeEmail', value: result.email })
                              $form.append($theToken).append($theEmail).submit();
                          }
                      });
      
                      StripeCheckout.open(opts);
                  });
              });
              </script>
      </form>
      

      这里是charge.php:

      <?php
      require_once('vendor/autoload.php');
      
      $stripe = array(
        "secret_key"      => "xxxx",
        "publishable_key" => "xxxx"
      );
      
      \Stripe\Stripe::setApiKey($stripe['secret_key']);
      $token = $_POST['stripeToken'];
      $email = $_POST['stripeEmail'];
      
       \Stripe\Customer::create(array(
            "source"  => $token,
            "email" => $email,
            "description" => "It Worked!"
        ));
      
        try {
      $charge = \Stripe\Charge::create(array(
        "amount" => 199, // amount in cents, again
        "currency" => "usd",
        "source" => $_POST['stripeToken'],
        "description" => "Cat Facts"));
      } catch(\Stripe\Error\Card $e) {
        $error = $e->getMessage();
      }
      ?>
      

      【讨论】:

        【解决方案3】:

        我有一个非常相似的问题,但我正在使用 node.js。我修改了 koopajah 的答案并将其放在了 charge.js 文件中

         const token = req.body.stripeToken;<br>
         const email = req.body.stripeEmail;
        

        然后我像这样使用了这个电子邮件变量......

        return stripe.charges.create({
        // ensures we send a number, and not a string
        amount: parseInt(process.env.STRIPE_COST, 10),
        currency: process.env.STRIPE_CCY,
        source: token,
        description: 'My product', // ? remember to change this!
        receipt_email: email, // that line sends a receipt email to the customer, you can customise that email inside stripe
        metadata: {},
        });
        

        我希望这对某人有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-26
          • 2018-02-12
          • 2011-05-24
          • 2014-04-07
          • 2013-04-15
          • 1970-01-01
          相关资源
          最近更新 更多