https://www.code-sell.net/ Nous avons créé un service qui vous permet de vendre des codes! Si vous avez du code dont vous n'avez pas besoin, veuillez l'utiliser. En passant, j'utilise la bande décrite dans cet article.
https://qiita.com/UTOG/items/6a00135a5114a70727c3 C'est une continuation de.
La dernière fois que j'ai fait une fonction d'achat. Cette fois, je vais créer un compte Stripe (standard et personnalisé). Cependant, j'ai dit que je le ferais à partir de la nouvelle fonction d'enregistrement de l'appareil la dernière fois, mais si tel est le cas, l'article sera trop long (généralement gênant ...) et je ne ferai aucun réglage inhabituel, donc je suppose que l'appareil est installé.
Reportez-vous à l'article ci-dessous pour savoir comment installer l'appareil. Aucune fonction d'authentification Twitter ou d'authentification de courrier électronique n'est requise. [* Rails *] Comment utiliser l'appareil (version rails6)
Lors de la création d'un compte standard Article de référence
Standard Le formulaire et le tableau de bord sont du type préparé par bande. Pour plus de détails, veuillez consulter l'article précédent, mais si vous présentez brièvement les fonctionnalités
C'est très facile à mettre en œuvre, vous n'avez pas besoin de créer un formulaire ou un système de soumission, et si quelque chose ne va pas, c'est votre responsabilité.
Cependant, la conception du formulaire et du tableau de bord ne peut pas être modifiée, et le sentiment de "J'utilise stripe!" Ressort beaucoup. On a le sentiment qu'un service n'est pas complet.
gemfile
gem 'omniauth-stripe-connect'
N'oubliez pas le bundle
rails g migration AddStripeAccountToUsers access_code:string publishable_key:string uid:string
Ajoutez access_code, publishable_key et uid à votre modèle utilisateur. En particulier, uid est une colonne importante qui relie le compte Stripe et l'application. Ensuite, définissez le rappel.
devise.rb
Devise.setup do |config|
・ ・ ・
config.omniauth :stripe_connect,
ENV["CLIENT_ID"],
ENV["SECRET_KEY"],
scode: 'read_write',
stripe_landing: 'login'
・ ・ ・
end
Ensuite, définissez la méthode stripe_connect à appeler après l'enregistrement.
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
Définissez stripe_url dans helper. Si je l'écris directement dans les vues, cela ne fonctionne pas.
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
Ceci est le lien pour vous inscrire. Veuillez le faire où vous le souhaitez. Je recommande de le placer dans l'écran de modification du profil.
slim:edit.html.slim
= link_to "enregistrer", stripe_url
Si vous écrivez en erb
erb:edit.html.erb
<%= link_to "enregistrer", stripe_url %>
c'est tout. C'est si facile! Cependant, comme vous n'avez pas à créer vous-même le formulaire et le système de soumission, vous ne pouvez pas modifier la conception.
custom Le formulaire, le système de soumission et le tableau de bord sont tous conçus par vous-même. Sentiment de n'utiliser que l'API J'aimerais que vous voyiez l'article précédent pour les mêmes détails.
Vous pouvez modifier les formulaires et les tableaux de bord sans ressentir de rayures, avec un seul service
C'est difficile à mettre en œuvre, vous devez créer tous les formulaires et tableaux de bord, c'est votre responsabilité en cas de problème
rails g migration AddStripeAccountToUsers access_code:string publishable_key:string uid:string
Ajoutez access_code, publishable_key et uid à votre modèle utilisateur. En particulier, uid est une colonne importante qui relie le compte Stripe et l'application.
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: 'Je l'ai sauvé.'
rescue Stripe::CardError => e
flash[:alert] = "Une erreur est survenue.{e.message}"
render :top
# Invalid parameters were supplied to Stripe's API
rescue Stripe::InvalidRequestError => e
flash[:alert] = "Une erreur s'est produite (InvalidRequestError)#{e.message}"
render :top
# Authentication with Stripe's API failed(maybe you changed API keys recently)
rescue Stripe::AuthenticationError => e
flash[:alert] = "Une erreur s'est produite (AuthenticationError)#{e.message}"
render :top
# Network communication with Stripe failed
rescue Stripe::APIConnectionError => e
flash[:alert] = "Une erreur s'est produite (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] = "Une erreur s'est produite (StripeError)#{e.message}"
render :top
#Lorsqu'une erreur se produit autre que celle liée à la bande
rescue => e
flash[:alert] = "Une erreur est survenue#{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: 'ça a changé.'
rescue Stripe::CardError => e
flash[:alert] = "Une erreur est survenue.{e.message}"
render :top
# Invalid parameters were supplied to Stripe's API
rescue Stripe::InvalidRequestError => e
flash[:alert] = "Une erreur s'est produite (InvalidRequestError)#{e.message}"
render :top
# Authentication with Stripe's API failed(maybe you changed API keys recently)
rescue Stripe::AuthenticationError => e
flash[:alert] = "Une erreur s'est produite (AuthenticationError)#{e.message}"
render :top
# Network communication with Stripe failed
rescue Stripe::APIConnectionError => e
flash[:alert] = "Une erreur s'est produite (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] = "Une erreur s'est produite (StripeError)#{e.message}"
render :top
#Lorsqu'une erreur se produit autre que liée à la bande
rescue => e
flash[:alert] = "Une erreur est survenue#{e.message}"
render :top
end
end
Il n'y a pas de temps pour expliquer un par un. Pour le dire horriblement brièvement, Stripe :: Account.create crée un compte Stripe. Il existe différents éléments (nom, sexe, adresse, numéro de compte, etc.) et je les saisirai avec les paramètres envoyés dans le formulaire que je vais faire maintenant. Stripe :: Account.update met à jour votre compte. Le mécanisme est le même
Ensuite, nous allons créer des vues.
slim:accounts/top.html.slim
- if current_user.uid
= render "edit"
- else
= render "new"
Ceci est divisé en nouvelle création et mise à jour selon qu'il y a ou non uid. Il semble y avoir un meilleur moyen ...
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: "Nom (prénom / kanji)"
= f.text_field :last_name_kanji, placeholder: "Nom (nom, kanji)"
= f.text_field :first_name_kana, placeholder: "Nom (nom / kana)"
= f.text_field :last_name_kana, placeholder: "Nom (nom de famille, kana)"
= f.label :Anniversaire
= f.date_select :day, class: "sign_field", include_blank: true, :start_year => 1900, :end_year => Date.today.year
= f.label :sexe
= f.select :gender, {"Masculin": "male", "Femelle": "female"}, include_blank: true
= f.text_field :state, placeholder: "Préfectures"
= f.text_field :postal_code, placeholder: "Code postal"
= f.text_field :city, placeholder: "Ville / quartier / village"
= f.text_field :town, placeholder: "Chome"
= f.text_field :line1, placeholder: "adresse"
= f.text_field :line2, placeholder: "Bâtiment (facultatif)"
= f.label :Nom (Katakana)
= f.text_field :account_holder_name, placeholder: "Yamada Taro"
|Organiser dans l'ordre du code bancaire, du code de l'agence
br
|Veuillez saisir une chaîne de 7 caractères
= f.number_field :routing_number, placeholder: "1234567"
.sign_plase
= f.label :numéro de compte
= f.number_field :account_number
.actions
= f.submit "sauvegarder"
Enfin, écrivez l'itinéraire.
routes.rb
get "accounts/top"
resources :accounts, only: [:new, :create, :update, :edit]
Cela devrait fonctionner ...
Après tout, le compte personnalisé est difficile (; ∀;). Étant donné que le compte standard est facile à implémenter et à perdre, si vous voulez l'essayer, vous pouvez essayer standard pour le moment (je l'ai fait aussi). Même ainsi, je me souviens avoir eu beaucoup de mal à créer un compte personnalisé. J'ai eu du mal à ne payer que pour la partie création de compte personnalisé de cet article. Je n'ai aucune information du tout. Eh bien, ce n'est pas grave si cela aide quelqu'un qui trébuche dans la création d'un compte Stripe.
De plus, je n'aime pas ou ne commente pas du tout cette série. Si vous l'aimez, s'il vous plaît LGTM. Ce sera motivant.
Recommended Posts