Rails5.2에서 Stripe 사용
먼저 Gemfile에 gem을 추가하고
bundle install
를 실행합니다 (gem 버전은 5.11이었습니다).Gemfile
gem 'stripe'
Stripe의 대시보드 Developers -> API Keys를 방문하여 Publishable key와 Secret Key를 가져옵니다.
정액의 상품을 1개 구입하는 샘플로서, 구입 페이지(payment1)와 구입 완료 페이지(payment2)를 작성합니다.
config/routes.rb
get '/payment1', to: 'pages#payment1'
post '/payment2', to: 'pages#payment2'
pages_controller.rb가 없으면 다음 명령으로 작성하십시오. 마지막 기사 에서 컨트롤러를 만드는 경우에는 필요하지 않습니다.
rails g controller Pages payment1 payment2
컨트롤러의 코드는 다음과 같습니다. payment1은 버튼(JavaScript)을 두는 것만으로 payment2에서는 post되어 온 메일 주소와 토큰을 바탕으로 Customer(고객)를 작성해, 한층 더 그 ID를 사용해, 500엔의 Charge(결제)를 작성합니다 . 카드가 승인되지 않는 등의 오류가 발생하면 해당 메시지와 함께 payment1로 리디렉션합니다.
app/controllers/pages_controller.rb
def payment1
end
def payment2
customer = Stripe::Customer.create(
:email => params[:stripeEmail],
:source => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => 500,
:description => 'From Rails Demo',
:currency => 'jpy'
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to payment1_path
end
대응하는 뷰의 분은 이하와 같은 느낌. 가능한 한 간단하게 쓰고 있습니다. 방금 취득한 키 중 「Publishable」쪽을 버튼의 속성으로서 세트 하고 있습니다.
app/views/pages/payment1.html.erb
<%= form_tag payment2_path do %>
<% if flash[:error].present? %>
<div id="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<p>Total(tax included): ¥500 </p>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_DfoKFBIrAGKhxBbDgP0G954e"
data-description="テスト"
data-amount="500"
data-currency="jpy"
data-locale="auto"></script>
<% end %>
app/views/pages/payment2.html.erb
<p>Thank you for purchasing!</p>
<p><%= link_to 'Back', payment1_path %></p>
"Secret"쪽의 API Key는 Rails의 credentials 안에 보관하기로 합니다. 다음 명령으로 파일을 열고,
EDITOR=vim rails credentials:edit
맨 아래 줄에 다음과 같이 정의합니다.
stripe_secret_key: sk_test_xxxxxx
(덤) docker-composer를 사용하는 경우에는 편집기를 설치해야 합니다.
docker-compose exec web apt install vim
docker-compose exec -e EDITOR=vim web rails credentials:edit
다음과 같이 initializers 에 기술해, credentials 에 보존한 키의 값을 Stripe 의 프레임워크에 세트 합니다.
config/initializers/stripe.rb
Stripe.api_key = Rails.application.credentials.stripe_secret_key
이상으로 로컬 환경에서는 동작하게 될 것입니다. Stripe 대시보드 Payments 목록에 결제가 등록되어 있는지 확인해 보세요.
(덤) Rails의 credentials를 참조하기 위해서는
config/master.key
라는 파일이 필요하지만 Heroku에는 업로드 할 수 없기 때문에 master.key에 쓰여졌습니다 해시 값을 환경 변수로 설정합니다.heroku config:set RAILS_MASTER_KEY=xxxxx
이제 로컬 환경과 마찬가지로 API Key가 로드됩니다.
참고 링크
Stripe가 Rails에서 움직이는 메커니즘
거의 이쪽의 기사를 베이스로 했습니다. Rails5.2 이후의 사양에 맞추어 열쇠의 잡는 방법을 변경하고 있습니다.
Reference
이 문제에 관하여(Rails5.2에서 Stripe 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lumbermill/items/5be5dee3bf646c07e47c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)