2017-02-01 7 views
0

У меня есть несколько клиентов, которые полагаются на мой сервер, который обрабатывает запросы оплаты Stripe. Когда плата обрабатывается, я хочу отправить моему клиенту обратно JSON о том, была ли плата успешно создана, а если нет, причины.Rails: возвращает JSON ответа Stripe от сервера

Мой сервер можно посмотреть here.

Код для моего контроллера заключается в следующем:

class ChargesController < ApplicationController 
    protect_from_forgery 
    skip_before_action :verify_authenticity_token 

    def new 
    end 

    def create 
     # Amount in cents 
     @amount = 500 

     customer = Stripe::Customer.create(
     :email => params[:stripeEmail], 
     :source => params[:stripeToken] 
    ) 

     charge = Stripe::Charge.create(
     :customer => customer.id, 
     :amount  => @amount, 
     :description => 'Rails Stripe customer', 
     :currency => 'usd' 
    ) 

     #*WHAT I TRIED DOING THAT DIDN'T WORK* 
     # respond_to do |format| 
     # msg = { :status => "ok", :message => "Success!"} 
     # format.json { render :json => msg } 
     # end 

    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     redirect_to new_charge_path 
    end 
end 

Я пытаюсь вызвать мой RESTful API с помощью следующего URL:

curl -XPOST https://murmuring-wave-13313.herokuapp.com/charges.json?stripeToken=tok_*****************&[email protected] 

Я предполагаю, что мне нужно, чтобы получить доступ к некоторым metadata, но я не уверен, как это сделать.

Какие результаты в 500 Response

Как правильно структурировать мой контроллер заряжает, чтобы вернуть JSON в ответ Stripe в?

ответ

0

Так что я сам врежу. То, что я понял, было после того, как вы сделали объект Stripe::Charge, ему назначен JSON-сериализованный объект Charge.

Из-за этого вы можете получить доступ ко всем метаданным в экземпляре Charge, просто позвонив charge.attribute_name. Например, если это действительный платеж, charge.status вернется «с успехом». Потому что то, что назначено обратно для оплаты, это JSON, вы можете просто вернуть render charge, если запрошенный формат JSON.

Рабочий контроллер зарядки выглядит следующим образом:

class ChargesController < ApplicationController 
    protect_from_forgery 
    skip_before_action :verify_authenticity_token 

    def new 
    end 

    def create 
     # Amount in cents 
     @amount = 500 

     customer = Stripe::Customer.create(
     :email => params[:stripeEmail], 
     :source => params[:stripeToken] 
    ) 

     charge = Stripe::Charge.create(
     :customer => customer.id, 
     :amount  => @amount, 
     :description => 'Rails Stripe customer', 
     :currency => 'usd' 
    ) 

     # If in test mode, you can stick this here to inspect `charge` 
     # as long as you've imported byebug in your Gemfile 
     byebug 

     respond_to do |format| 
     format.json { render :json => charge } 
     format.html { render :template => "charges/create"} 
     end 

    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     redirect_to new_charge_path 
    end 
end 
0

Почему это не работает?

#*WHAT I TRIED DOING THAT DIDN'T WORK* 
respond_to do |format| 
    msg = { :status => "ok", :message => "Success!"} 
    format.json { render :json => msg } # don't do msg.to_json 
    format.html { render :template => "charges/create"} 
end 

Каковы ошибки в журнале?

+0

Я понял, что я царски ввернул и забыл совершить 'format.html {визуализации: шаблон =>«заряды/создать»}' в этом состоянии до heroku, поэтому ошибки, которые я получал, не были бы уместны для моего первоначального вопроса (я не думаю, по крайней мере). извините за любую путаницу. – beckah