2010-12-31 16 views
2

私はRyan Bates' railcast 146に従っています。本当に役に立ちます。しかし、私はプロセスからカートのオブジェクトを削除しようとし、ちょうど注文を個別に処理します。私が抱えている問題は、購入をセットアップするために1回、実際にそれを実行するために1回、2回使用する金額を設定する方法です。これは私がやってに頼ってきたものですが、それは私はおそらく悪い習慣だと思いreturn_urlの金額、公開します、私は量で隠しフィールドを追加するビューで次にPaypal Express ActiveMerchantインテグレーション

class OrdersController < ApplicationController 
    def express 
    response = EXPRESS_GATEWAY.setup_purchase(params[:amount], 
     :ip    => request.remote_ip, 
     :return_url  => new_order_url(:amount=>params[:amount]), 
     :cancel_return_url => root_url 
    ) 
    redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token) 
    end 

    def new 
    @order = Order.new(:express_token => params[:token], :price_in_cents=>params[:amount]) 
    end 

をするようにする場合オーダーが作成されます(オーダー・モデルにprice_in_centsフィールドを追加しました)。それはうまく動作しますが、量をparamとして公開することは少し難しいかもしれません。私はのparamsの量の周りに通過することなくこれを行うことができますどのように、要するに

def purchase 
    response = process_purchase 
    transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response) 
    cart.update_attribute(:purchased_at, Time.now) if response.success? 
    response.success? 
    end 

:最後に、購入コードは次のようになりますか?

ありがとうございます!

答えて

0

あなたの入力をお寄せいただきありがとうございます。私は、ユーザーのセッションに金額を保存することになりました。session[:amount]のようにしてから、プロセスを完了するとすぐにnilに設定しました。その方法はユーザーから隠され、新しいオブジェクトの作成や暗号化の手間を省くことができます。

0

URLの金額を送信することは非常に悪いことです - 価格を変更し、URLで指定した金額で販売しているものを購入することができます。

この問題については、2つの方法があります。
1.渡すパラメータを暗号化し、URLから復号化することができます。 here
2.購入の価格を保持する新しいエンティティを作成できます(またはカートを使用していないため、特定のアイテムを販売している場合など)。このアイテムのIDを渡すことができます必要なときにその価格を問い合わせる)。このようなもの:

class OrdersController < ApplicationController 
    def express 
    @product = Product.find(params(:product_id)); 
    response = EXPRESS_GATEWAY.setup_purchase(product.price_in_cents, 
     :ip    => request.remote_ip, 
     :return_url  => new_order_url(product.price_in_cents), 
     :cancel_return_url => root_url 
    ) 
    redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token) 
    end 

    def new 
    @product = Product.find(params(:product_id)); 
    @order = Order.new(:express_token => params[:token], :price_in_cents=> @product.price_in_cents) 
    end 

関連する問題