2016-06-21 3 views
0

У меня есть встроенные платежи в мою заявку. Он сконфигурирован таким образом, чтобы пользователь мог ввести цену за элемент, который они хотят продать, в качестве десятичного числа на модели булавки. Когда цена вводится в форме, она отображается в виде доллара в представлении. Тем не менее, когда вы выбираете кнопку «Купить сейчас» для этого элемента, а мода «всплывает», она отображает цену в центах (т.е. я вводил «10.0» и отправляю ее так, чтобы она отображала «Цена $: 10.0, но когда я выбираю покупку сейчас Stripe интерпретирует его как центы и отображает «Pay $ .10» в способе оплаты полосой.) ​​Сумма платежа по полосе

Я думал об изменении цены входа в центы для пользователей таким образом, чтобы Stripe мог интерпретировать ее лучше, но это привело бы к плохому интерфейсу .

есть ли простой способ исправить это так, что сумма отображается равномерна как для входа и выхода?

приложение/просмотров/контакты/

<%= form_tag charges_path, id: 'chargesForm' do %> 
      <script src="https://checkout.stripe.com/checkout.js"></script> 
      <%= hidden_field_tag 'stripeToken' %> 
      <%= hidden_field_tag 'stripeEmail' %> 
      <button id="btn-buy" type="button" class="btn btn-success btn-lg btn-block"><span class="glyphicon glyphicon-heart"></span> Buy Now!</button> 

      <script> 
       var handler = StripeCheckout.configure({ 
       key: '<%= Rails.configuration.stripe[:publishable_key] %>', 
       token: function(token, arg) { 
        document.getElementById("stripeToken").value = token.id; 
        document.getElementById("stripeEmail").value = token.email; 
        document.getElementById("chargesForm").submit(); 
       } 
       }); 
       document.getElementById('btn-buy').addEventListener('click', function(e) { 
       handler.open({ 
        name: <%= @pin.manufacturer %>', 
        description: '<%= @pin.description %>', 
        amount: '<%= @pin.price %>' 
       }); 
       e.preventDefault(); 
      }) 
      </script> 
     <% end %> 

приложение/просмотров/контакты/index.html.erb

<div id="pins" class="transitions-enabled"> 
<% @pins.each do |pin| %> 
    <div class="box panel panel-default"> 
    <div class="panel-body"> 
     <%= link_to (image_tag pin.image.url(:medium)), pin %> 
     <p></p> 
     <strong>Manufacturer:</strong> 
     <%= pin.manufacturer %> 
     <p></p> 
     <strong>Price:</strong> 
     <%= pin.price %> 
     <p></p> 
     <strong>Description:</strong> 
     <%= pin.description %> 
     <% if pin.is_multi? %> 
     <strong>Quantity:</strong> 
      <%= pin.quantity %> 
      <% end %> 
     <p></p> 

приложение/дб/мигрировать

class AddPriceToPins < ActiveRecord::Migration 
    def change 
    add_column :pins, :price, :decimal 
    end 
end 

контактный/контроллер

class PinsController < ApplicationController 
    before_action :set_pin, only: [:show, :edit, :update, :destroy, :bid] 
    before_action :correct_user, only: [:edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:index, :show] 

def index 
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page],  :per_page => 9) 
    end 

def pin_params 
    params.require(:pin).permit(:description, :price, :image, :image2, :image3, :image4, :image5, :manufacturer, :model) 
    end 
end 

ответ

1

API Stripe всегда ожидает Вас для пропуска суммы в наименьшей валюте. В долларах США означает передачу суммы в виде центов.

Вам не нужно менять свой интерфейс здесь, вам просто нужно изменить свой код, чтобы передать сумму в виде центов, когда вы звоните handler.open. Поскольку у вас есть сумма уже в @pin.price, вы хотите умножить ее на 100 и округлить значение:

handler.open({ 
    name: '<%= @pin.manufacturer %>', 
    description: '<%= @pin.description %>', 
    amount: '<%= (@pin.price * 100).floor %>' 
}); 
Смежные вопросы