[RAILS] Erstellen eines Payjp-Kunden und Festlegen der Standardkarte

Einführung

Es gibt viele Artikel über Payjp-Zahlungsmethoden, aber ich werde sie schreiben, da es keine Einstellungsmethode für default_card gab. Andere haben über Tokenisierung geschrieben, daher werde ich die Beschreibung von Javascript weglassen.

Entwicklungsumgebung

ruby 2.6.5 Rails 6.0.3.3

Referenz

Bitte machen Sie den Mangel an Erklärung hier wieder gut.

Referenz: https://pay.jp/docs/api/#customer-%E9%A1%A7%E5%AE%A2 https://pay.jp/docs/customer

Kartenmodell

In meinem Fall habe ich die folgenden Spalten im Kartenmodell gespeichert.

id user_id card_token customer_token
integer tok_~ cus_~

Kunden erstellen

Card_token (tok_ ~) ist erforderlich, um einen Kunden zu erstellen. Übergeben Sie das von Javascript empfangene Token an den Controller und schreiben Sie Folgendes.

cards_controller.rb


def create
    # card_Überprüfen Sie, ob das Token korrekt ist
    if params[:card_token] == nil
      redirect_to new_user_card_path
      return
    end
    #Benutzer Kunde_Wenn ein Token vorhanden ist
    if Card.find_by(user_id: current_user.id)
      card = current_user.card
      customer = Payjp::Customer.retrieve(card[0][:customer_token])
      customer.cards.create(
        card: params[:card_token]
      )
    else
    #Benutzer ist Kunde_Wenn kein Token vorhanden ist
    customer = Payjp::Customer.create(
      description: "test",
      card: params[:card_token],)
    end
    #In Kartentisch speichern
    card = Card.new(
      user_id: current_user.id,
      card_token: params[:card_token],
      customer_token: customer.id)
end

Kundeninformationserfassung

Definieren Sie das Array "@ Karten" und geben Sie die Karteninformationen basierend auf customer_token ein

ruby:card.controller.rb


cards = Card.where(user_id: current_user.id)
      @cards = []
      cards.each do |card|
        @customer = Payjp::Customer.retrieve(card.customer_token)
        @cards << @customer.cards
      end

Erstellen Sie ein Formular, mit dem der Benutzer eine Karte auswählen und den mit dem Argument "i" ausgewählten Index erhalten kann. Sie können die Karteninformationen mit der folgenden Beschreibung in jedem_mit_Index für @ Karten in der Ansicht anzeigen.

ruby:select.html.erb



<%= form_with url: set_default_card_path, method: :post, local: true do |f| %>
 <% @cards.each_with_index do |card, i| %>
   <%=f.radio_button :selected, :"#{i}" ,id: "check_card", checked: (card.data[i] [:id] == @customer[:default_card])  %>
   <%= "**** **** **** #{ + card.data[i][:last4]}" %> 
   <%= "#{card.data[i][:exp_year]}Jahr#{+ card.data[i][:exp_month]}Mond" %>
 <% end %>
 <%= f.submit "Fahren Sie mit dem nächsten fort" %>
<% end %>

So legen Sie die Standardkarte fest

Ich verwende radio_button in form_with von select.html.erb und erhalte den Wert von # {i} in params [: selected]. Weisen Sie [: default_card] von @ customer zu und vervollständigen Sie mit @ customer.save.

cards_controller


def set_default_card
 cards = Card.where(user_id: current_user.id)
      @cards = []
      cards.each do |card|
        @customer = Payjp::Customer.retrieve(card.customer_token)
        @cards << @customer.cards
      end
 @customer = Payjp::Customer.retrieve(card.customer_token)
 index = params[:selected].to_i
    @customer[:default_card] = @cards[0].data[index][:id]
    @customer.save
end

Nur für den Fall

Schließlich

Es mag eine einfachere Beschreibung geben, aber sie kann damit implementiert werden. Danach vereinbaren Sie bitte jeden einzelnen.

Recommended Posts

Erstellen eines Payjp-Kunden und Festlegen der Standardkarte
4. Erstellen eines Manifests und Ausführen eines Webmoduls
Erstellen eines lokalen Repositorys