https://www.code-sell.net/ Wir haben einen Service erstellt, mit dem Sie Codes verkaufen können! Wenn Sie Code haben, den Sie nicht benötigen, verwenden Sie ihn bitte. Ich verwende übrigens den in diesem Artikel beschriebenen Streifen.
https://qiita.com/UTOG/items/6a00135a5114a70727c3 Es ist eine Fortsetzung von.
Das letzte Mal habe ich eine Kauffunktion gemacht. Dieses Mal werde ich ein Streifenkonto erstellen (Standard und Benutzerdefiniert). Ich sagte jedoch, dass ich dies beim letzten Mal über die neue Registrierungsfunktion von devise tun würde, aber wenn dies der Fall ist, wird der Artikel zu lang (normalerweise mühsam ...) und ich werde keine ungewöhnlichen Einstellungen vornehmen, sodass ich davon ausgehen werde, dass devise installiert ist.
Informationen zur Installation des Geräts finden Sie im folgenden Artikel. Es ist keine Twitter-Authentifizierung oder E-Mail-Authentifizierungsfunktion erforderlich. [* Rails *] Verwendung von Devise (Rails6-Version)
Beim Erstellen eines Standardkontos Referenzartikel
Standard Sowohl das Formular als auch das Dashboard sind von dem Typ, der durch Streifen vorbereitet wird. Einzelheiten finden Sie im vorherigen Artikel, aber wenn Sie die Funktionen kurz vorstellen
Es ist sehr einfach zu implementieren, Sie müssen kein Formular oder Übermittlungssystem erstellen, und wenn etwas schief geht, liegt es in Ihrer Verantwortung.
Das Design des Formulars und des Dashboards kann jedoch nicht geändert werden, und das Gefühl "Ich verwende Streifen!" Kommt sehr häufig heraus. Es besteht das Gefühl, dass ein Dienst nicht vollständig ist.
gemfile
gem 'omniauth-stripe-connect'
Vergiss das Bündel nicht
rails g migration AddStripeAccountToUsers access_code:string publishable_key:string uid:string
Fügen Sie Ihrem Benutzermodell den Zugriffscode, den publizierbaren Schlüssel und die UID hinzu. Insbesondere ist uid eine wichtige Spalte, die das Stripe-Konto und die App verbindet. Stellen Sie als Nächstes den Rückruf ein.
devise.rb
Devise.setup do |config|
・ ・ ・
config.omniauth :stripe_connect,
ENV["CLIENT_ID"],
ENV["SECRET_KEY"],
scode: 'read_write',
stripe_landing: 'login'
・ ・ ・
end
Legen Sie als Nächstes die Methode stripe_connect fest, die nach der Registrierung aufgerufen werden soll.
omniauth_callbacks_controller.rb
def stripe_connect
auth_data = request.env["omniauth.auth"]
@user = current_user
if @user.persisted?
@user.access_code = auth_data.credentials.token
@user.publishable_key = auth_data.info.stripe_publishable_key
@user.uid = auth_data.uid
@user.save
sign_in_and_redirect @user, event: :authentication
flash[:notice] = 'Stripe Account Created And Connected' if is_navigational_format?
else
session["devise.stripe_connect_data"] = request.env["omniauth.auth"]
redirect_to root_path
end
end
Setzen Sie stripe_url im Helfer. Wenn ich es direkt in Ansichten schreibe, funktioniert es nicht.
application_helper.rb
module ApplicationHelper
def stripe_url
"https://connect.stripe.com/oauth/authorize?response_type=code&client_id=#{ENV["CLIENT_ID"]}&scope=read_write"
end
end
Dies ist der Link zur Registrierung. Bitte mach es wo immer du willst. Ich empfehle, es um den Profilbearbeitungsbildschirm zu legen.
slim:edit.html.slim
= link_to "zu registrieren", stripe_url
Wenn Sie in erb schreiben
erb:edit.html.erb
<%= link_to "zu registrieren", stripe_url %>
das ist alles. So einfach ist das! Da Sie das Formular- und Übermittlungssystem jedoch nicht selbst erstellen müssen, können Sie das Design nicht ändern.
custom Das Formular, das Übermittlungssystem und das Dashboard sind alle selbst erstellt. Ich habe das Gefühl, nur API zu verwenden Ich möchte, dass Sie den vorherigen Artikel für die gleichen Details sehen.
Mit einem einzigen Service können Sie Formulare und Dashboards ändern, ohne Streifen zu spüren
Es ist schwer zu implementieren, Sie müssen alle Formulare und Dashboards erstellen. Es liegt in Ihrer Verantwortung, wenn etwas schief geht
rails g migration AddStripeAccountToUsers access_code:string publishable_key:string uid:string
Fügen Sie Ihrem Benutzermodell den Zugriffscode, den publizierbaren Schlüssel und die UID hinzu. Insbesondere ist uid eine wichtige Spalte, die das Stripe-Konto und die App verbindet.
rails g controller accounts
accounts_controller.rb
class AccountsController < ApplicationController
before_action :authenticate_user!
def new
end
def create
user = current_user
data = Stripe::Account.create(
type: "custom",
country: "JP",
email: user.email,
requested_capabilities: ['card_payments', 'transfers'],
business_type: 'individual',
individual: {
first_name_kana: params[:first_name_kana],
first_name_kanji: params[:first_name_kanji],
last_name_kana: params[:last_name_kana],
last_name_kanji: params[:last_name_kanji],
gender: params[:gender],
email: user.email,
dob: {
day: params[:"day(3i)"].to_i,
month: params[:"day(2i)"].to_i,
year: params[:"day(1i)"].to_i,
},
address_kanji: {
country: "JP",
postal_code: params[:postal_code],
state: params[:state],
city: params[:city],
town: params[:town],
line1: params[:line1],
line2: params[:line2],
},
address_kana: {
line1: params[:line1],
},
},
tos_acceptance: {
date: Time.now.to_i,
ip: request.remote_ip,
},
external_account: {
object: "bank_account",
country: "JP",
currency: 'jpy',
account_holder_name: params[:account_holder_name],
account_holder_type: 'individual',
routing_number: params[:routing_number],
account_number: params[:account_number],
},
)
user.update(uid: data.id)
redirect_to "/accounts/top", notice: 'Ich habe es gespeichert.'
rescue Stripe::CardError => e
flash[:alert] = "Ein Fehler ist aufgetreten.{e.message}"
render :top
# Invalid parameters were supplied to Stripe's API
rescue Stripe::InvalidRequestError => e
flash[:alert] = "Ein Fehler ist aufgetreten (InvalidRequestError)#{e.message}"
render :top
# Authentication with Stripe's API failed(maybe you changed API keys recently)
rescue Stripe::AuthenticationError => e
flash[:alert] = "Ein Fehler ist aufgetreten (AuthenticationError)#{e.message}"
render :top
# Network communication with Stripe failed
rescue Stripe::APIConnectionError => e
flash[:alert] = "Ein Fehler ist aufgetreten (APIConnectionError)#{e.message}"
render :top
# Display a very generic error to the user, and maybe send yourself an email
rescue Stripe::StripeError => e
flash[:alert] = "Ein Fehler ist aufgetreten (StripeError)#{e.message}"
render :top
#Wenn ein anderer Fehler als streifenbezogen auftritt
rescue => e
flash[:alert] = "Ein Fehler ist aufgetreten#{e.message}"
render :top
end
def update
user = current_user
data = Stripe::Account.update(
current_user.stripe_user_id,
email: user.email,
requested_capabilities: ['card_payments', 'transfers'],
business_type: 'individual',
individual: {
first_name_kana: params[:first_name_kana],
first_name_kanji: params[:first_name_kanji],
last_name_kana: params[:last_name_kana],
last_name_kanji: params[:last_name_kanji],
gender: params[:gender],
email: user.email,
dob: {
day: params[:"day(3i)"].to_i,
month: params[:"day(2i)"].to_i,
year: params[:"day(1i)"].to_i,
},
address_kanji: {
country: "JP",
postal_code: params[:postal_code],
state: params[:state],
city: params[:city],
town: params[:town],
line1: params[:line1],
line2: params[:line2],
},
address_kana: {
line1: params[:line1],
},
},
external_account: {
object: "bank_account",
country: "JP",
currency: 'jpy',
account_holder_name: params[:account_holder_name],
account_holder_type: 'individual',
routing_number: params[:routing_number],
account_number: params[:account_number],
},
)
redirect_to "/accounts/top", notice: 'es hat sich geändert.'
rescue Stripe::CardError => e
flash[:alert] = "Ein Fehler ist aufgetreten.{e.message}"
render :top
# Invalid parameters were supplied to Stripe's API
rescue Stripe::InvalidRequestError => e
flash[:alert] = "Ein Fehler ist aufgetreten (InvalidRequestError)#{e.message}"
render :top
# Authentication with Stripe's API failed(maybe you changed API keys recently)
rescue Stripe::AuthenticationError => e
flash[:alert] = "Ein Fehler ist aufgetreten (AuthenticationError)#{e.message}"
render :top
# Network communication with Stripe failed
rescue Stripe::APIConnectionError => e
flash[:alert] = "Ein Fehler ist aufgetreten (APIConnectionError)#{e.message}"
render :top
# Display a very generic error to the user, and maybe send yourself an email
rescue Stripe::StripeError => e
flash[:alert] = "Ein Fehler ist aufgetreten (StripeError)#{e.message}"
render :top
#Wenn ein anderer Fehler als streifenbezogen auftritt
rescue => e
flash[:alert] = "Ein Fehler ist aufgetreten#{e.message}"
render :top
end
end
Es ist keine Zeit, eins nach dem anderen zu erklären. Kurz gesagt, Stripe :: Account.create erstellt ein Stripe-Konto. Es gibt verschiedene Elemente (Name, Geschlecht, Adresse, Kontonummer usw.) und ich werde sie mit den Parametern eingeben, die in dem Formular gesendet werden, das ich jetzt erstellen werde. Stripe :: Account.update aktualisiert Ihr Konto. Der Mechanismus ist der gleiche
Als nächstes werden wir Ansichten erstellen.
slim:accounts/top.html.slim
- if current_user.uid
= render "edit"
- else
= render "new"
Dies ist in neue Erstellungen und Aktualisierungen unterteilt, je nachdem, ob eine UID vorhanden ist oder nicht. Es scheint einen besseren Weg zu geben ...
slim:_new.html.slim
= form_with url: accounts_path, local: true do |f|
= render "form", f:f
slim:_edit.html.slim
= form_with url: update_accounts_path(current_user.uid), local: true, method: :patch do |f|
= render "form", f:f
slim:_form.html.slim
= f.text_field :first_name_kanji, placeholder: "Name (Vorname / Kanji)"
= f.text_field :last_name_kanji, placeholder: "Name (Nachname, Kanji)"
= f.text_field :first_name_kana, placeholder: "Name (Name / Kana)"
= f.text_field :last_name_kana, placeholder: "Name (Nachname, Kana)"
= f.label :Geburtstag
= f.date_select :day, class: "sign_field", include_blank: true, :start_year => 1900, :end_year => Date.today.year
= f.label :Sex
= f.select :gender, {"männlich": "male", "Weiblich": "female"}, include_blank: true
= f.text_field :state, placeholder: "Präfekturen"
= f.text_field :postal_code, placeholder: "Postleitzahl"
= f.text_field :city, placeholder: "Stadt / Gemeinde / Stadt"
= f.text_field :town, placeholder: "Chome"
= f.text_field :line1, placeholder: "Adresse"
= f.text_field :line2, placeholder: "Gebäude (optional)"
= f.label :Name (Katakana)
= f.text_field :account_holder_name, placeholder: "Yamada Taro"
|Ordnen Sie in der Reihenfolge der Bankleitzahl, Filialcode
br
|Bitte geben Sie als 7-stellige Zeichenfolge ein
= f.number_field :routing_number, placeholder: "1234567"
.sign_plase
= f.label :Kontonummer
= f.number_field :account_number
.actions
= f.submit "sparen"
Schreiben Sie zum Schluss die Route.
routes.rb
get "accounts/top"
resources :accounts, only: [:new, :create, :update, :edit]
Das sollte funktionieren ...
Immerhin ist ein benutzerdefiniertes Konto schwierig (; ∀;). Da das Standardkonto leicht zu implementieren und leicht zu verlieren ist, können Sie, wenn Sie es ausprobieren möchten, vorerst Standard ausprobieren (das habe ich auch getan). Trotzdem erinnere ich mich, dass ich große Probleme hatte, ein benutzerdefiniertes Konto zu erstellen. Es fiel mir schwer, nur für den Teil zur Erstellung eines benutzerdefinierten Kontos in diesem Artikel bezahlen zu wollen. Ich habe überhaupt keine Informationen. Nun, es ist in Ordnung, wenn dies jemandem hilft, der beim Erstellen eines Stripe-Kontos stolpert.
Außerdem mag oder kommentiere ich diese Serie überhaupt nicht. Wenn es Ihnen gefällt, bitte LGTM. Es wird motivierend sein.
Recommended Posts