我已经设置了Angular Storefront应用程序 . 我有一个购物车功能和条纹“支付卡”按钮等几乎看起来像这样:
<form action="/#/order" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="{{ stripeApiKey }}"
data-billingAddress=true
data-shippingAddres=true
data-amount="{{ amount }}"
data-name="StoreFront Name"
data-description="Custom-Made Jewellery"
data-image="../images/www/logo.png"
data-locale="auto">
</script>
</form>
到目前为止,Evrything工作得很好 . 我提交表单并且条带返回令牌,但表单按照路径 localhost/order
(没有#符号)而不是angular的 localhost/#/order
进入服务器 .
- 为什么条带强制重定向?换句话说,为什么没有角度捕获这个回叫?
无论如何 . 然后我用Laravel创建一个路由来捕获它并转储以检查返回的数据,如下所示:
Route::post('/order', function($request){ dd($request); });
是的,除了金额丢失之外,还会返回由条带生成的表单捕获的数据...我的意思是包括stripeToken在内的所有内容,买家的详细信息如:姓名,电子邮件,结算和送货地址都会被退回但有关金额的详细信息缺失 .
-
这是正常的还是我错过了什么?
-
最后货币仍显示默认值:我在哪里可以将货币从美元兑换成英镑?
提前致谢
3 回答
1 /我不认为Checkout强制重定向,但我不太了解Angular解释发生了什么,抱歉 .
2 /是的,这是正常的 . 传递给
data-amount
configuration option中的Checkout的金额仅用于显示目的 . 实际收取的金额是您在服务器端代码的charge creation request中的amount
参数中传递的金额 .如果您需要用户指定的金额(例如,如果您需要将金额添加到表单中 . 这是一个简单的JSFiddle来说明这种情况:https://jsfiddle.net/ywain/g2ufa8xr/
3 /您可以使用
data-currency
参数更改Checkout表单中显示的货币 . 就像data-amount
一样,这仅用于显示目的,用于收费的实际货币由费用创建中的currency
参数指定 .除了阻止表单提交事件和停止事件传播的默认操作外,Stripe不会涉及您的表单 . 结帐过程完成后,它会将相关数据附加到您的表单,然后触发由HTML / Javascript本地处理的表单提交事件 .
我建议使用像https://github.com/tobyn/angular-stripe-checkout之类的东西来让Angular正确处理你的Stripe响应 .
否则,您可以在表单中添加ng-submit =“handleStripeCheckout($ event)”而不是action =“/#/ form” . 当Stripe的结帐过程完成时,将运行$ scope.handleStripeCheckout方法,您可以分析该方法中的新表单数据 .
这就是我设法做到的 .
我采用
custom form
方法 . 我有一个表单模板来捕获billing.template.html
中的客户和卡输入,如下所示:我知道我们不应该在那些表单输入中使用
name
属性但我离开它们所以我可以使用角度验证,但我在提交到服务器之前使用jquery删除它们 .现在我创建了一个控制器来处理表单:
BillingController.js
. 在那里我有一个"on click"处理程序,通过获取表单并做一些准备工作来启动事情:禁用按钮以防止进一步点击并删除那些'dreaded'名称属性,纪念:现在让我引用这里的文档,因为这是非常重要的理解:
https://stripe.com/docs/tutorials/forms
接下来我们创建
stripeResponseHandler()
. 记住它是上面Stripe.card.createToken($form, stripeResponseHandler);
中的第二个参数,当Stripe返回令牌时会调用它 .这是条纹自己的文档中的复制和粘贴内容:
https://stripe.com/docs/tutorials/forms
. 现在,我想说,这就是我们很多人都在嘲笑表单执行重定向等事实 - 请注意最后一行$form.get(0).submit();
. 这是什么导致自动提交,重定向到形式上的动作,如果你有任何(在我的情况下action
属性是没有必要的,因为我在我的控制器中进行重定向) .所以我决定删除
$form.get(0).submit()
并在我完成向服务器发送数据后实现自己的重定向 .注意:条纹的响应将包含来自
$form
的数据 - 尝试console.log(response);
以了解要回发的内容 .最后:我们检查是否有任何错误返回,如果是,则显示它们 . 否则一切都好,将数据发送到服务器 .
最终代码如下:
Angular在这里非常适合条纹 . 看看这个链接:
https://gist.github.com/boucher/1750368
- 从中学到很多东西 .我希望它能帮到今天的某个人 . 快乐的编码!