javascript - 无法使用 Laravel 在 Stripe 中发送令牌
问题描述
输入卡详细信息后尝试结帐时遇到的错误:
无效的源对象:必须是字典或非空字符串。请参阅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”,则代码可以正常工作。
为什么我会收到此错误?请帮忙。
解决方案
如果您使用的是 Stripe.js v2,您需要像这样设置可发布密钥:
Stripe.setPublishableKey('pk_test_xxx');
不是你目前正在做的事情:
var stripe = Stripe('test_key');
(见https://stripe.com/docs/stripe-js/v2#setting-publishable-key)
推荐阅读
- python - 将字符串转换为原始浮点数
- amazon-web-services - 使用 AWS Api Gateway 进行 Api 组合
- amazon-web-services - 为什么通过网关端点连接到 S3 超时?
- powerbi - 如何用递增值替换图表上的用户名,但 Power BI 中切片器上的值除外
- c - c函数读取txt文件中卡片组后的数字
- swift - 如何解决 Swift Playgrounds 中的“运行此页面时出现问题”消息?
- css - 显示具有绝对位置的 div
- amazon-web-services - Dynamodb 范围查询时间戳
- angular - ApexCharts 中的多线图例
- html - 将 example.com/123 转发到 someothersite.com