Kreditkarteninformationen ändern (Streifen)
Ich endlich herausgefunden, wie das umzusetzen, Streifen Monatliche Abrechnung mit diesem tutorial.
http://railscasts.com/episodes/288-billing-with-stripe
So weit, die Ein Nutzer Erstellen kann & Löschen Sie Ihr Abonnement mit Streifen.
Aber wie kann ein Benutzer ändern seine Kreditkarten-Informationen, wenn Sie eine Subskription angelegt haben
Dies ist mein Code mit Kommentaren und Fragen. Bitte helfen Sie neu zu Schienen. 🙂
CONTROLLER
class SubscriptionsController < ApplicationController
def new
plan = Plan.find(params[:plan_id])
@subscription = plan.subscriptions.build
@subscription.user_id = current_user.id
end
def create
@subscription = Subscription.new(params[:subscription])
if @subscription.save_with_payment
redirect_to @subscription, :notice => "Thank you for subscribing!"
else
render :new
end
end
def update
@subscription = current_user.subscription
if @subscription.save
redirect_to edit_subscription_path, :success => 'Updated Card.'
else
flash.alert = 'Unable to update card.'
render :edit
end
end
end
MODELLE
class Subscription < ActiveRecord::Base
attr_accessible :plan_id, :user_id, :email, :stripe_customer_token, :last_4_digits,
:card_token, :card_name, :exp_month, :exp_year, :stripe_card_token
attr_accessor :stripe_card_token
belongs_to :plan
belongs_to :user
def save_with_payment
if valid?
save_with_stripe_payment
end
end
def save_with_stripe_payment
customer = Stripe::Customer.create(card: stripe_card_token, email: email, plan: plan_id, description: "Unlimited Comics")
self.stripe_customer_token = customer.id
self.card_token = customer.cards.data.first["id"]
self.card_name = customer.cards.data.first["type"]
self.exp_month = customer.cards.data.first["exp_month"]
self.exp_year = customer.cards.data.first["exp_year"]
self.last_4_digits = customer.cards.data.first["last4"]
save!
rescue Stripe::InvalidRequestError => e
logger.error "Stripe error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card."
false
end
def update_card
customer = Stripe::Customer.retrieve(stripe_customer_token)
card = customer.cards.retrieve(card_token)
*** This Update works, but how do I pass a new Credit Card Number, Expiration Date etc.
card.name = "My new name"
customer.save
rescue Stripe::StripeError => e
logger.error "Stripe Error: " + e.message
errors.add :base, "#{e.message}."
false
end
end
ANSICHTEN
<%= form_for @subscription do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :plan_id %>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :stripe_card_token %>
<h4>Change Credit Card</h4>
<div class="field">
<%= label_tag :card_number, "Credit Card Number" %>
<%= text_field_tag :card_number, nil, name: nil %>
</div>
<div class="field">
<%= label_tag :card_code, "Security Code on Card (CVV)" %>
<%= text_field_tag :card_code, nil, name: nil %>
</div>
<div class="field">
<%= label_tag :card_month, "Card Expiration" %>
<%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
<%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
</div>
<%= f.submit "Change Credit Card", :class => "btn btn-primary" %>
<% end %>
ROUTEN
App::Application.routes.draw do
resources :subscriptions
end
SCHEMA
create_table "subscriptions", :force => true do |t|
t.integer "plan_id"
t.integer "user_id"
t.string "email"
t.string "card_name"
t.string "exp_month"
t.string "exp_year"
t.string "card_token"
t.string "stripe_customer_token"
t.string "last_4_digits"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
InformationsquelleAutor der Frage Surge Pedroza | 2013-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Antwort wurde aktualisiert, danke für den Hinweis von @TimSullivan
Hatte ich zu tun die gleiche Sache, die in meiner app. Streifen nicht erlauben, die Aktualisierung der Karten-Nummer. Dies lässt Sie mit zwei Optionen: 1) erstelle eine neue Karte, und löschen Sie die original-Karte; und 2) Erstellen Sie eine neue Karte, legen Sie es als default_card und lassen Sie die original-Karte. Ich wählte die zweite route.
Hier ist, wie ich es gemacht habe:
models/subscriber.rb
Controller/subscribers_controller.rb
views/Abonnenten/edit_card.html-Code.erb
config/routes.rb
app/js/update_card.js
Hoffe, das hilft.
InformationsquelleAutor der Antwort Hunter
Die akzeptierte Antwort hier ist gefährlich unsicher zu verwenden. Es hat eine end-Lauf um den Sicherheits-Streifens fordert. Einen eigenen server sollte nie Holen Sie sich die Kreditkarten-details.
Sollten Sie stattdessen verwenden Stripe.js übergeben Sie die Karte zu Streifen, direkt (ähnlich, wie es bereits getan wird in den Railscast Sie link) und das abrufen von token, dann erstellen Sie die Karte basiert auf dem token.
InformationsquelleAutor der Antwort Tim Sullivan
Aktualisieren können Sie die Kreditkarten-details wie dieses (PHP-CODE)
Erstellen Streifen-token und weiter die gleichen server wie diese:
und in den server aktualisieren können Sie die details wie diese:
Dass ist es. Dadurch wird das überschreiben der vorhandenen Karte mit den neuen details.
InformationsquelleAutor der Antwort Mudasir Bhat
2015-02-18
Die Karten und default_card Attribute sind nicht mehr zurückgekehrt auf die Kunden. Sollten Sie jetzt verwenden, - Quellen und-default_source beziehungsweise. Der Kunde.- Karte.* und der Kunde.bank_account.* webhooks sind jetzt mit dem Namen Kunden.Quelle.*. Wenn Sie nur Karten, befestigt an den Kunden (im Gegensatz zu Zahlung Datenquellen von anderen Typen) können Sie dann die neuen Attribute genau so wie die alten. Wenn Sie die Bezahlung Quellen von mehreren Arten, dann die Quellen-Liste enthält heterogene Objekte, und Sie können überprüfen Sie die Objekt-Attribut von jeder Quelle zu bestimmen, deren format. Ältere API-Versionen geben sowohl die neuen und die alten Attribute.
InformationsquelleAutor der Antwort user3462369
So Streifen die ruby-Bibliothek hat die update-Methodedie Sie bereits haben
card.name
aber für das Ablaufdatum können Siecard.exp_month
undcard.exp_year
check-out update-Methode für alle Argumente.Beachten Sie, dass es nicht ein update-card-Nummer drauf ist, also mein Vorschlag wäre, die Benutzer erstellen Sie eine weitere Karte, wenn Sie wollen, ändern Sie Ihre Kreditkartennummer und aktualisieren Sie dann die Kunden zu haben, die Karte als Standard-Kreditkarte (check-out erstellen Karte und update Kunde der stripe ruby-Bibliothek-Dokumentation).
Hoffe, das hilft
InformationsquelleAutor der Antwort user2262149
Verwenden Stripe.js wie Tim Sullivan schlägt. Hier ist seinen code aktualisiert, die für die neuere Streifen-API.
InformationsquelleAutor der Antwort Stephen