使用条纹付款时如何正确设置金额?

时间:2018-11-08 07:54:40

标签: java stripe-payments

我不完全了解Stripe中的付款过程。例如,用户必须支付50美元。我在做什么(我的应用正在做什么):

  1. 我向用户展示了一张用于输入有关卡数据的表格。
    <form action="your-server-side-code" method="POST">
      <script
        src="https://checkout.stripe.com/checkout.js" class="stripe-button"
        data-key="pk_test_TYooMQauvdEDq54NiTphI7jx"
        data-amount="50000"
        data-name="Stripe.com"
        data-description="Example charge"
        data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
        data-locale="auto"
        data-zip-code="true">
      </script>
    </form>
  1. 用户按下付款按钮后,我得到了对象Request并从中获取令牌。然后填充参数,其中一个参数是amount
    String token = request.getParameter("stripeToken");

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("amount", 50000);
        params.put("currency", "usd");
        params.put("description", "Example charge");
        params.put("source", token);
        Charge charge = Charge.create(params);

为什么我要两次汇款?第一次在表单上第二次来自代码?

为什么我不能从请求中获取金额?

params.put("amount", request.getParameter("amount")); //always 0

在所有尝试中,这样的方法总是向我返回0。

它如何工作?第一步和第二步中的金额通常如何相关?如果在第二步中指定其他金额怎么办?即用户将在表单上看到50美元,然后从代码中我将随机安装60美元?

发送一次金额并从请求中获取金额是合乎逻辑的。

1 个答案:

答案 0 :(得分:3)

从前端设置金额存在安全和欺诈风险。例如,客户可以轻松使用浏览器扩展程序或其他工具来更改请求中发送的金额。如果您的后端盲目地信任此金额,则攻击者有可能在您的系统上创建订单,但将价格更改为$ 0.01。

这就是为什么您应该基本上根据订单/购物车中的商品确定仅在后端收取的价格的原因。

data-amount纯粹是为了向用户显示,您传递给Create Charge API的金额就是他们将实际收取的金额。