У меня есть рабочая модель подписки, которая позволяет мне успешно регистрировать людей как платящих членов. Я пытаюсь написать «редактировать страницу», которая позволяет мне сделать следующееДобавление новой карты и удаление карт не работает Stripe
- добавить новую кредитную карту
- удалить карту (которая отменяет подписку)
- изменить план оплаты на другие
в настоящее время моя страница существует в/подписаться/редактировать с помощью следующего кода
<%= form_tag do %>
<span class="payment-errors"></span>
<div class="form-row">
<label>
<span>Card Number</span>
<input type="text" size="20" data-stripe="number"/>
</label>
</div>
<div class="form-row">
<label>
<span>CVC</span>
<input type="text" size="4" data-stripe="cvc"/>
</label>
</div>
<div class="form-row">
<label>
<span>Expiration (MM/YYYY)</span>
<input type="text" size="2" data-stripe="exp-month"/>
</label>
<span>/</span>
<input type="text" size="4" data-stripe="exp-year"/>
</div>
<%= button_to "Add a New Card", :method => "updateSubscription" %>
<!-- <%= select_tag "type", options_for_select([['Subscriber' ,'Subscriber'], ['Sustainer', 'Sustainer']]) %>
<%= button_to "Change Subscription", :method => "changeSubscription" %> -->
<%= link_to "Delete Card and Subscription", :method => "deleteCard" , :confirm => "You sure?" %>
<% end %>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script type="text/javascript">
<!-- CURRENTLY USING TEST KEY -->
Stripe.setPublishableKey("TESTKEY");
jQuery(function($) {
$('#payment-form').submit(function(event) {
var $form = $(this);
// Disable the submit button to prevent repeated clicks
$form.find('button').prop('disabled', true);
Stripe.card.createToken($form, stripeResponseHandler);
// Prevent the form from submitting with the default action
return false;
});
});
var stripeResponseHandler = function(status, response) {
var $form = $('#payment-form');
if (response.error) {
// Show the errors on the form
$form.find('.payment-errors').text(response.error.message);
$form.find('button').prop('disabled', false);
} else {
// token contains id, last4, and card type
var token = response.id;
// Insert the token into the form so it gets submitted to the server
$form.append($('<input type="hidden" name="stripeToken" />').val(token));
// and submit
$form.get(0).submit();
}
};
</script>
Вот мой роу tes.rb
get 'subscribe' => 'subscribe#stepone'
get 'subscribe/sliding-scale' => 'subscribe#steptwo'
get 'subscribe/sliding-scale/subscriber' => 'subscribe#subscriber'
get 'subscribe/sliding-scale/supporter' => 'subscribe#supporter'
get 'subscribe/sliding-scale/sustainer' => 'subscribe#sustainer'
post 'subscribe/sliding-scale/:type' => 'subscribe#createSubscription'
get 'subscribe/edit' => 'subscribe#edit', :as => :edit_subscription
post 'subscribe/edit'
post 'subscribe/edit/deleteCard'
post 'subscribe/edit/updateSubscription'
post 'subscribe/edit/changeSubscription'
и, наконец, вот мой контроллер подписки
class SubscribeController < ApplicationController
def stepone
end
def steptwo
end
def subscriber
@type = "subscriber"
end
def supporter
@type = "supporter"
end
def sustainer
@type ="sustainer"
end
def createSubscription
# Set your secret key: remember to change this to your live secret key in production
# See your keys here https://manage.stripe.com/account
# Get the credit card details submitted by the form
token = params[:stripeToken]
# Create a Customer
customer = Stripe::Customer.create(
:card => token,
:plan => params[:type],
:email => current_user[:email]
)
current_user[:stripeCustomerId] = customer[:id]
# sets role of user, we should have a check for successful signu
current_user.add_role params[:type]
current_user.save()
UserMailer.subscription_confirmation(current_user).deliver
redirect_to root_url, :notice => "Thank you for subscribing!"
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to root_url
end
def edit
@user = current_user
end
def updateSubscription
# Set your secret key: remember to change this to your live secret key in production
# See your keys here https://manage.stripe.com/account
# Get the credit card details submitted by the form
token = params[:stripeToken]
# Create A New Card
customer = Stripe::Customer.retrieve(current_user.stripeCustomerId)
customer.cards.create(stripeToken)
redirect_to root_url, :notice => "Your Card Has Been Updated!"
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to root_url
end
def changeSubscription
customer = Stripe::Customer.retrieve(@user.stripeCustomerId)
@user.update_subscription(:plan => :type, :prorate => true)
current_role = @user.roles.first.name
@user.remove_role current_role
current_user.add_role params[:type]
end
def deleteCard
customer = Stripe::Customer.retrieve(@user.stripeCustomerId)
customer.cards.retrieve(customer.default_card).delete()
current_role = @user.roles.first.name
@user.remove_role current_role
end
def currentCard
customer = Stripe::Customer.retrieve(@user.stripeCustomerId)
card = customer.cards.retrieve(customer.default_card)
end
end
В настоящее время, если я нажмите кнопку «Удалить карту» я получаю следующее в адресной строке http://localhost:3000/subscribe/edit?confirm=You+sure%3F&method=deleteCard
без изменения страницы, то же самое, если я представляю новую информацию о карте.
Позвольте мне знать, что я делаю неправильно и как исправить мои ужасные пути :)