Как правильно установить сумму при оплате полосой? - PullRequest
0 голосов
/ 08 ноября 2018

Я не до конца понимаю процесс оплаты в 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 голосов
/ 08 ноября 2018

Установка суммы из внешнего интерфейса - это риск для безопасности и мошенничества.Например, клиент может легко использовать расширение браузера или другие инструменты для изменения суммы, отправляемой в запросе.Если ваш бэкэнд слепо доверяет этой сумме, злоумышленник может создать ордер в вашей системе, но, например, изменить цену на 0,01 доллара.

Именно поэтому вы должны определить цену для взимания только на основе вашего бэкенда.для товаров в заказе / корзине, по существу.

data-amount предназначено исключительно для отображения пользователю, а сумма, которую вы передаете API Create Charge, является фактической суммой, с которой они будут взиматься.

...