【问题标题】:Unable to send Token in Stripe with Laravel无法使用 Laravel 在 Stripe 中发送 Token
【发布时间】:2021-03-27 18:08:27
【问题描述】:

输入卡详细信息后尝试结帐时遇到的错误:

无效的源对象:必须是字典或非空字符串。请参阅https://stripe.com/docs' 上的 API 文档

这里我把所有的卡信息:

<form method="post" action="{{route('checkout')}}" enctype="multipart/form-data" id="checkout-form">
@csrf
<div class="col-sm-3">
   <div class="form-group">
       <label>Card Number*</label>
            <input type="text" class="form-control" name="card-number" id="card-number" placeholder="4111 1111 1111 1111"> </div>
</div>
<div class="col-sm-3">
      <div class="form-group">
           <label>Card CVC*</label>
               <input type="text" class="form-control" name="card-cvc" id="card-cvc" placeholder="111"> </div>
</div>
<div class="col-sm-3">
     <div class="form-group">
          <label>Card Expiry Month*</label>
               <input type="text" class="form-control" name="card-month" id="card-month" placeholder="12"> </div>
 </div>
 <div class="col-sm-3">
      <div class="form-group">
           <label>Card Expiry Year*</label>
           <input type="text" class="form-control" name="card-expiry-year" id="card-expiry-year" placeholder="2020"> </div>
 </div>
 <div class="col-sm-6">
      <div class="form-group">
           <label>Card Name*</label>
           <input type="text" class="form-control" name="card-name" id="card-name" placeholder="John"> </div>
 </div>
</form>

我正在通过脚本发送令牌:

<script>
var stripe = Stripe('test_key');

var $form = $('#checkout-form');

$form.submit(function (event) {
    $('charge-error').addClass('hidden');
    $form.find('button').prop('disabled' , true);
    Stripe.card.createToken({
        number: $('.card-number').val(),
        cvc: $('.card-cvc').val(),
        exp_month: $('.card-expiry-month').val(),
        exp_year: $('.card-expiry-year').val(),
        name: $('.card-name').val(),

    }, stripeResponseHandler);
    return false;
});

function stripeResponseHandler(status, response) {

    var $form = $('#checkout-form');

    if (response.error){
        $('.charge-error').removeClass('hidden');
        $('.charge-error').text(response.error.message);
        $form.find('button').prop('disabled', false);
    } else {
        var token = response.id;
        $form.append($('<input type="hidden" name="stripeToken" />').val(token));

        //Submit the form:
        $form.get(0).submit();
    }
}

这是控制器功能:

$stripe = new \Stripe\StripeClient('secret_test_key');
    try {
        $charge = $stripe->charges->create([
                "amount" => 6800,
                "currency" => "usd",
                "source" => $request->input('stripeToken'),
                "description" => "Charge for test@expamle.com"
            ]
        );
    } catch (\Exception $e) {
        return redirect()->route('checkout')->with('error', $e->getMessage());
    }

如果将 "source" => $request->input('stripeToken'), 替换为 "source" => "visa",则代码可以正常工作。

为什么会出现此错误?请帮忙。

【问题讨论】:

标签: javascript php laravel stripe-payments


【解决方案1】:

如果您使用的是 Stripe.js v2,您需要像这样设置可发布密钥:

Stripe.setPublishableKey('pk_test_xxx');

不是你目前正在做的事情:

var stripe = Stripe('test_key');

(见https://stripe.com/docs/stripe-js/v2#setting-publishable-key

【讨论】:

【解决方案2】:

在您有"source" =&gt; $request-&gt;input('stripeToken') 的行尝试在执行收费之前打印该输入,以查看该值是否实际存在或采用有效格式。如果该值不存在,请确保您调用的变量 token 分配给隐藏字段实际上具有正确的值。

【讨论】:

  • 我试图打印这个变量,它是空的。我不知道是什么错误。
  • 是的。我知道它一定是空的,所以这就是 stripe 的问题。现在检查你传递给 js 脚本中隐藏字段的值是否真的正确。
  • 我尝试通过脚本在控制台中打印 var 令牌。但它什么也没显示。 Response.id 不起作用。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 2018-02-23
  • 2020-05-07
  • 2019-06-20
  • 2017-08-25
  • 2021-04-05
  • 2019-11-17
  • 2020-01-04
相关资源
最近更新 更多