Полоса оформления заказа. Проверка суммы клиента

Можно ли проверить, совпадает ли сумма, которую видит клиент, и сумма, которую видит сервер?

Здесь я выставляю сумму на стороне клиента:

<script src="https://checkout.stripe.com/checkout.js"></script>

<button id="customButton">Purchase</button>

<script>
  var handler = StripeCheckout.configure({
    key: 'pk_test_1002UFB11gJ1sXBHcdDM8HPi',
    image: '/square-image.png',
    token: function(token) {
      // Use the token to create the charge with a server-side script.
      // You can access the token ID with `token.id`
    }
  });

  document.getElementById('customButton').addEventListener('click', function(e) {
    // Open Checkout with further options
    handler.open({
      name: 'Demo Site',
      description: '2 widgets ($20.00)',
      amount: 2000
    });
    e.preventDefault();
  });

  // Close Checkout on page navigation
  window.addEventListener('popstate', function() {
    handler.close();
  });
</script>

Я отправляю токен из обратного вызова полосы на стороне клиента на сервер:

<?php
require_once(dirname(__FILE__) . '/config.php');

$token  = $_POST['stripeToken'];

$charge = Stripe_Charge::create(array(
  'customer' => $customer->id,

  'amount'   => 1000000000000,
  'currency' => 'usd'
  'email' => '[email protected]',
  'card'  => $token
));

echo '<h1>Successfully charged $2!</h1>';
?>

Номер на стороне клиента явно ниже, чем на стороне сервера, и полоса взимает плату за номер на стороне сервера.


person Ivan    schedule 20.11.2014    source источник


Ответы (1)


Мы делаем это, заставляя сервер проверять это.

У нас есть такой поток:

  1. Клиент вызывает API-интерфейс к бэкэнду, чтобы получить цену, которую он должен взимать за продукт.
  2. Клиент вызывает api полосы, чтобы получить токен, и отображает клиенту сумму с шага 1.
  3. Как только у клиента есть токен, вызовите серверный API, чтобы произвести оплату, передав как токен, так и сумму (мы называем это суммой согласования).
  4. На бэкэнде, прежде чем вызывать api создания страйпа, мы сначала согласовываем сумму, сравнивая сумму, полученную от клиента на шаге 3, с суммой, которой должен быть продукт (из шага 1). Если они не совпадают, мы не продолжаем и возвращаем клиенту ошибку.
person David    schedule 28.08.2018
comment
Это только в случае с продуктами? Как в продуктах, которые создаются в интерфейсе Stripes? Поскольку я использую индивидуальный процесс оформления заказа и прорабатываю цену в своей собственной системе для отображения клиенту - она ​​зависит от места доставки, однако, когда я передаю сумму в Stripe при создании платежа, кажется, что она успешно разрешает сборы в размере меньшая сумма, чем была выдана клиенту при оформлении заказа. - person Brett; 28.08.2018
comment
Я думал, что Stripe, возможно, сохранил эту информацию через токен, а затем, если тот же токен использовался при создании заряда с другой суммой, это вызвало бы ошибку, но, похоже, это не так. - person Brett; 28.08.2018
comment
@Brett нет, в моем случае я не использую никаких API полос, кроме создания заряда. Я не создаю клиентов или продукты в полосе. Я думаю, что токен - это не что иное, как идентификатор источника заряда, который можно использовать для взимания комиссии. Я не думаю, что существует какое-либо понятие о том, что токен связан с данной транзакцией / суммой. - person David; 28.08.2018
comment
Ох, хорошо. То есть вы просто создаете цену в обоих местах и ​​сравниваете их? - person Brett; 28.08.2018
comment
@Brett по сути да, в зависимости от семантики создания. У меня есть внутренний код, позволяющий вернуть стоимость корзины покупателя. Я отправляю эту цену во внешний интерфейс, который используется для целей отображения и передается обратно в серверную часть (вместе с токеном полосы) для согласования с корзиной перед созданием начисления в полосе. - person David; 28.08.2018