настройка полосы с пользовательской суммой

У меня проблема с настройкой пользовательской суммы, я хотел бы установить количество данных для любого пользователя, который будет выбирать в качестве входного id = "custom-donation-amount", как мне это сделать. моя попытка не работает.

<script
  src="https://checkout.stripe.com/checkout.js" class="stripe-button"
  data-image="images/button.png"
  data-key="pk_test_FTZOOu9FL0iYJXXXXXX"
  data-name="Fund"
  data-label= "DONATE"
  data-description="ysysys"
  data-amount = 
  >

    $('.donate-button').click(function(event){
    var self = $(this);
    var amount = 0;
     amount = $('#custom-donation-amount').val();
      if (amount === "") {
        amount = 50;
      }

    amount = self.attr('data-amount');
    amount = Math.abs(amount * 100);
  });

</script>
 <input type="number" id="custom-donation-amount" placeholder="50.00" min="0" step="10.00"/>

Ответ 1

Используемый конкретный метод (простая, внедренная форма) не будет работать в направлении искомого конца. Вместо этого вы должны использовать более гибкую пользовательскую интеграцию, как показано в документах. Единственное, что не включено в приведенный пример, заключается в том, как подключить ввод количества, что совсем не сложно.

<input class="form-control"
       type="number"
       id="custom-donation-amount"
       placeholder="50.00"
       min="0"
       step="10.00"/>
<script src="https://checkout.stripe.com/checkout.js"></script>
<button id="customButton ">Purchase</button>
<script>
  var handler = StripeCheckout.configure({
    key: 'pk_test_ppailxxxxxxxxxxxxxxxxxxx',
    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) {
    // This line is the only real modification...
    var amount = $("#custom-donation-amount").val() * 100;
    handler.open({
      name: 'Demo Site',
      description: 'Some donation',
      // ... aside from this line where we use the value.
      amount: amount
    });
    e.preventDefault();
  });
</script>

Обратите внимание, что вам действительно нужно будет заполнить функцию token: переданную вызову StripeCheckout.configure. В частности, вам нужно либо отправить форму, либо запрос ajax и обработать это на своем сервере. Затем вы будете использовать эту информацию на сервере вместе с секретным ключом, чтобы отправить запрос на создание платежа на Stripe. В документации по Stripe содержится информация о том, какую информацию нужно будет отправить на вызов API, и, следовательно, какую информацию вам нужно передать для вызова API на вашем сервере. В частности, обратите внимание, что вам, вероятно, придется сделать некоторые дополнительные захват цен и т.д. В вашей функции token.

Ответ 2

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

<script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-image="images/button.png" data-key="pk_test_FTZOOu9FL0iYJXXXXXX" data-name="Fund" data-label="DONATE" data-description="ysysys" data-amount="0"></script>
<script type="text/javascript">
    $(function() {
        $('.donate-button').click(function(event) {
            var amount = $('#custom-donation-amount').val();        
            $('.stripe-button').attr('data-amount', amount)
        });
    });
</script>


<input type="number" id="custom-donation-amount" placeholder="50.00" min="0" step="10.00 " />

Ответ 3

В простой форме вы можете получить переменную сумму. Я не уверен, какие рамки вы используете, но я смог добиться этого в моем приложении Ruby (Padrino - not Rails), используя gon следующим образом. "charge_amount_pence" - это вспомогательный метод, возвращающий строку, представляющую собой заряд, который должен быть сделан. При необходимости, это может быть настроено на переменную, выбранную пользователем через запрос Ajax, например.

<script type="text/javascript">
    window.gon = {};
    gon.charge = charge_amount_pence;
</script>

И в скрипте проверки:

"data-amount" = gon.charge

Я фактически использую тот же вспомогательный метод в моем контроллере, чтобы гарантировать, что действительно начисляется правильная сумма.

Ответ 4

Как насчет создания нового элемента stripe? Это сработало для меня,

<script type="text/javascript">
    $(function() {
        $('.donate-button').click(function(event) {
            var holder = document.getElementById('aNewDiv');
            var script = document.createElement('script');
            script.src = 'https://checkout.stripe.com/checkout.js';
            script.setAttribute('class', 'stripe-button');
            script.setAttribute('data-amount', $('#Amount').val()*100);
            script.setAttribute('data-key',"pk_test_W0ML1BmfFMa6z3MgD90s7WeN");
            script.setAttribute('data-name', "Fund");
            script.setAttribute('data-description', "ysysys");
            script.setAttribute('data-locale', "auto");
        }
    }
</script>