2015-01-07 2 views
2

Полностью ударяя головой о стену, пытаясь выяснить, как отменить подписку на пользователя. Я прошел через StackOverflow и, похоже, не нашел ничего, что могло бы помочь. Поскольку я довольно новичок в RoR, API-интерфейс Stripe только смущает меня немного больше. Я понимаю, что мне нужно как-то захватить и сохранить идентификатор пользователя, прежде чем я смогу отменить. Я не смог понять это ... поэтому почему я не могу отменить подписки. HELP PLEASEStripe Отмена подписки пользователя

Subscribe_controller.rb

class SubscribeController < ApplicationController 
    before_filter :authenticate_user! 

    def new 
    unless (params[:plan_id] == '1' || params[:plan_id] == '2' || params[:plan_id] == '3') 
     flash[:notice] = "Please select a plan to sign up." 
     redirect_to new_subscribe_path 
    end 
    end 

    def update 
    # Amount in cents 
    token = params[:stripeToken] 
    customer = Stripe::Customer.create(
    :email => current_user.email, 
    :card => token, 
    plan: params[:id] 
) 

    current_user.subscribed = true 
    current_user.stripe_id = customer.id 
    current_user.save 

    redirect_to demo_path, notice: "Your Plan was created. Enjoy the demo!" 
    end 

    def cancel_plan 
    @user = current_user 
    if @user.cancel_user_plan(params[:customer_id]) 
     @user.update_attributes(customer_id: nil, plan_id: 1) 
     flash[:notice] = "Canceled subscription." 
     redirect_to pricing_path 
    else 
     flash[:error] = "There was an error canceling your subscription. Please notify us." 
     redirect_to edit_user_registration_path 
    end 
    end 

    def update_plan 
    @user = current_user 
    if (params[:user][:stripe_id] != nil) && (params[:plan] == "2") 
     @user.update_attributes(plan_id: params[:plan], email: params[:email], stripe_id: params[:user][:stripe_id]) 
     @user.save_with_payment 
     redirect_to edit_user_registration_path, notice: "Updated to premium!" 
    else 
     flash[:error] = "Unable to update plan." 
     redirect_to :back 
    end 
    end 
end 

User_controller.rb

class UsersController < ApplicationController 
    before_action :authenticate_user! 

    def update 
    if current_user.update_attributes(user_params) 
     flash[:notice] = "User information updated" 
     redirect_to edit_user_registration_path 
    else 
     flash[:error] = "Invalid user information" 
     redirect_to edit_user_registration_path 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:name) 
    end 
end 

Edit User Info Page

<div class="col-md-9 text-center"> 
    <h2>Manage Plan</h2> 
    </div> 
    <div class="text-center"> 
    <%= button_to "Cancel my account", cancel_plan_path, :data => { :confirm => "Are you sure?" }, :method => :delete, class: "btn btn-danger" %> 
    <button class="btn-lg btn btn-primary" disabled="disabled">Update Plan</button> 
    </div> 

routes.rb

get 'cancel_plan' => 'subscribe#cancel_plan' 
resources :subscribe 
devise_for :users 

ответ

1

Я уверен, что вы видели это раньше stripe cancel subscription

сначала вы должны получить клиенту вы можете найти там подписки, так что вы можете удалить его

# Definition 
customer = Stripe::Customer.retrieve({CUSTOMER_ID}) 
customer.subscriptions.retrieve({SUBSCRIPTION_ID}).delete 

# Example 
require "stripe" 
Stripe.api_key = "sk_test_fSaKtH5qZMmhyXiF7YXup2wz" 
customer = Stripe::Customer.retrieve("cus_5LXt66ikj5nYz5") 
# customer.subscriptions returns a list of all subscriptions 
customer.subscriptions.retrieve("sub_5TGMEBBALjNcD6").delete 
+0

Спасибо за вход ... да, и вот тут у меня проблемы. Что происходит вместо CUSTOMER_ID и SUBSCRIPTION_ID? Также я предполагаю, что это помещено в его собственный метод совершенно правильно? Я полностью понимаю эту концепцию, но понятия не имею, что разместить в этих двух областях или в .retrieve ("cus _...") или .retrieve ("sub _...") – Fdwillis

+0

, если вы войдете в свою полосу в соответствии с вами увидит 'CUSTOMER_ID' он loos, как *** cus_5LXt66ikj5nYz5 *** Когда я создаю клиента, мне нравится его сохранять в моем DB – MZaragoza

+0

Да. Я думал, что делаю это с вызовами '' 'current_user.subscribed = true current_user.stripe_id = customer.id current_user.save' '', которые у меня есть по методу обновления. Неправильная ли эта часть? Потому что я не могу сохранить их в своем DB – Fdwillis

1

Окончательный ответ

token = params[:stripeToken] 
    customer = Stripe::Customer.create(
    :email => current_user.email, 
    :card => token, 
    plan: params[:id] 
) 
    current_user.subscribed = true 
    current_user.stripe_id = customer.id 
    current_user.stripe_subscription_id = customer.subscriptions['data'][0].id 
    current_user.plan_name = customer.subscriptions['data'][0].plan.name 
    current_user.save 

    redirect_to demo_path, notice: "Your Plan was created. Enjoy the demo!" 
Смежные вопросы