2017-05-27 6 views
1

PayPal Express Checkout機能を備えた基本的なショッピングカートをまとめています。チェックアウトボタンをクリックするまでは、すべてが機能しているように見えますが、「no token passed」という空白のページが表示されます。サーバーのログには、トークンが作成されていないように見えますが、その理由はわかりません。私はこれがエクスプレスチェックアウトトークンの作成に最も問題があると思っていますが、私が間違っていることは本当に分かりません。ここ は、サーバのログは次のようになります。ここではトークンなしPayPal Express Checkout in Rails 5

Started GET "/express_checkout" for 10.240.0.204 at 2017-05-27 16:54:43 +0000 
Cannot render console from 10.240.0.204! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by OrdersController#express_checkout as HTML 
    Order Load (0.1ms) SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] 
    OrderItem Load (0.1ms) SELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = ? [["order_id", 1]] 
    Product Load (0.2ms) SELECT "products".* FROM "products" WHERE "products"."active" = ? AND "products"."id" = ? LIMIT ? [["active", true], ["id", 1], ["LIMIT", 1]] 
Redirected to https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token= 
Completed 302 Found in 615ms (ActiveRecord: 0.5ms) 

は私Order.rbです:

class Order < ApplicationRecord 
    has_many :order_items 
    before_save :update_subtotal 

    def subtotal 
    order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.unit_price) : 0 }.sum 
    end 

    def purchase 
    response = EXPRESS_GATEWAY.purchase(order.total, express_purchase_options) 
    order.update_attribute(:purchased_at, Time.now) if response.success? 
    response.success? 
    end 

    def express_token=(token) 
     self[:express_token]=token 
     if new_record? && !token.blank? 
     details = EXPRESS_GATEWAY.details_for(token) 
     self.express_payer_id = details.payer_id 
     end 
    end 

private 

    def update_subtotal 
    self[:subtotal] = subtotal 
    end 

    def express_purchase_options 
    { 
     :ip => ip, 
     :token => express_token, 
     :payer_id => express_payer_id 
    } 
    end 
end 

マイorders_controller.rb:

class OrdersController < ApplicationController 

    def express_checkout 
     @order = current_order 
     response = EXPRESS_GATEWAY.setup_purchase(@order.subtotal, 
     ip: request.remote_ip, 
     return_url: 'carts/show', 
     cancel_return_url: 'carts/cancel', 
     currency: "USD", 
     allow_guest_checkout: true, 
     items: [{name: "Order", description: "Order description", quantity: "1", amount: @order.subtotal}] 
    ) 
     redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token) 
    end 

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

def create 
    @order = current_order.create!(order_params) 
    @order.ip = request.remote_ip 
    if @order.save 
     if @order.purchase 
      redirect_to order_url(@order) 
     else 
      render :action => "failure" 
     end 
    else 
     render :action => 'new' 
    end 
end 

private 
def order_params 
    params.require(:order).permit(:subtotal, :total, :ip, :express_token, :express_payer_id) 
end 
end 

マイapplication_controller.rb:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    helper_method :current_order 

    def current_order 
    if !session[:order_id].nil? 
     Order.find(session[:order_id]) 
    else 
     Order.new(order_params) 
    end 
    end 

end 

私development.rbでアクティブマーチャントコード:

config.after_initialize do 
ActiveMerchant::Billing::Base.mode = :test 
paypal_options = { 
    login: "merchant_api1.christianorourke.com", 
    password: ************, 
    signature: *************************** 
} 
::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options) 
    end 

マイルートファイル:

Rails.application.routes.draw do 

    root "products#index" 
    resources :products, only: [:index] 
    resource :cart, only: [:show] 
    resources :order_items, only: [:create, :update, :destroy] 
    get 'express_checkout', to: 'orders#express_checkout' 
    resources :orders do 
    collection do 
     post 'express_checkout' 
    end 
    end 
end 
+0

あなたは、HTTPSをこのチェックアウトでした:// stackoverflowの。 com/questions/29417328/how-to-disable-can-render-console-from-on-rails#29417509 –

+0

@ fabrizio-bertoglioしかし、それは10.240.0.204からコンソールをレンダリングできません!私は修正しようとしているNo Token Passedエラーを修正していません –

+0

あなたはStackoverflowでパスワードを共有してはいけません、それらを削除してください..それらが本当であれば.. –

答えて

1

私はちょうどそれが

ペイパルエクスプレスさ

を設定する方法について説明します。このリンクを見つけました

https://github.com/nov/paypal-express/wiki

paypal_options = { 
    no_shipping: true, # if you want to disable shipping information 
    allow_note: false, # if you want to disable notes 
    pay_on_paypal: true # if you don't plan on showing your own confirmation step 
} 

request = Paypal::Express::Request.new(
    :username => SET_YOUR_OWN, 
    :password => SET_YOUR_OWN, 
    :signature => SET_YOUR_OWN 
) 
payment_request = Paypal::Payment::Request.new(
    :currency_code => :JPY, # if nil, PayPal use USD as default 
    :description => FOO, # item description 
    :quantity  => 1,  # item quantity 
    :amount  => 1.00, # item value 
    :custom_fields => { 
    CARTBORDERCOLOR: "C00000", 
    LOGOIMG: "https://example.com/logo.png" 
    } 
) 
response = request.setup(
    payment_request, 
    YOUR_SUCCESS_CALLBACK_URL, 
    YOUR_CANCEL_CALLBACK_URL, 
    paypal_options # Optional 
) 
response.redirect_uri 

その後、ActiveMerchantのcofigurationを持っていて、ガイドが聞く見つけることができます:

https://duckduckgo.com/?q=rails+paypal+active+merchant+gem&atb=v52-6_b&ia=qa

How to integrate Paypal with Ruby on Rails

https://spin.atomicobject.com/2011/10/24/integrating-paypal-express-with-rails-3-1-part-1/

+0

素晴らしい、ありがとう男!! –

+0

@ ChristianO'Rourke GOOD LUCK! –

関連する問題