레일에 스트라이프 웹 호크
-
09-12-2019 - |
문제
나는 이것과 비슷한 존재하는 또 다른 질문이 있다는 것을 알고 있지만, 나는 그것이 물어 보거나 잘 대답되었다고 생각하지 않는다.
기본적으로 사용자가 내 가입에 가입 할 수있는 작업 레일 앱이 있으며, 모두 일하고있는 신용 카드 정보 등을 입력하십시오.그러나이 반복 구독 중에 어떤 시점에서 사용자 카드가 거부되는 상황을 처리해야합니다.
보내는 이벤트의 유형은 다음과 같습니다. https://stripe.com/docs/ API? LANG= Ruby # event_types .
저는 앱의 Charge.Failed 객체에 액세스하는 데 어려움이 있습니다.
WebHooks의 문서도 다음과 같습니다. https://stripe.com/docs/webhooks ,그리고 어떤 도움이되는데 도움이 될 것입니다.
해결책
기본적으로 요청을 수락하고 처리하기 위해 컨트롤러를 만들어야합니다.처음에 마음을 감싸는 것이 똑바로 앞으로 똑바로 앞으로 똑바로 앞으로 나아갔습니다.다음은 내 hooks_controller.rb의 예입니다.
class HooksController < ApplicationController
require 'json'
Stripe.api_key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def receiver
data_json = JSON.parse request.body.read
p data_json['data']['object']['customer']
if data_json[:type] == "invoice.payment_succeeded"
make_active(data_event)
end
if data_json[:type] == "invoice.payment_failed"
make_inactive(data_event)
end
end
def make_active(data_event)
@profile = Profile.find(User.find_by_stripe_customer_token(data['data']['object']['customer']).profile)
if @profile.payment_received == false
@profile.payment_received = true
@profile.save!
end
end
def make_inactive(data_event)
@profile = Profile.find(User.find_by_stripe_customer_token(data['data']['object']['customer']).profile)
if @profile.payment_received == true
@profile.payment_received = false
@profile.save!
end
end
end
.
DEF 수신자는 스트라이프 인터페이스에서 웹 훅을 가리키는보기입니다.이보기는 JSON을 수신하고 지불이 실패하거나 성공하는 경우 사용자 프로필을 업데이트하는 데 사용합니다.
다른 팁
stripe_event
Gem을 사용하여 훨씬 쉽습니다 :
이것은 이상적인 테스트 상황보다 적습니다 ...
스트라이프는 테스트 목적으로 웹 호스를 "강제로"할 수있는 방법이 필요합니다.현재, 당신이 할 수있는 최단 구독은 1 주일 (테스트 모드에서)입니다.1 분, 1 시간 동안 설정할 수있는 경우 훨씬 더 도움이 될 것입니다.
로컬 테스트는 훌륭하지만, 실제, 라이브, 인터넷, 웹 훅 / 콜백을 대체하는 것은 아무 것도 없습니다.일주일을 기다려야합니다 (!) 심각하게 프로젝트가 늦어졌습니다.