2014-08-28 51 views
1

我有一个网站,我将不得不实施电子支付。问题是,我对这些东西有0知识,我的网站甚至运行在http不是https ..从电子商务和Rails开始4

我知道我可以使用active_merchant来处理付款,但我该如何开始?

任何资源请为初学者?

回答

1

我一直在思考这个做一个教程 - 我们已经有了一个基本的Rails的电子商务应用程序,你可以在http://firststopcosmeticshop.co.uk

查看这不是完全结束,但应该给你一个想法,怎么样你可以为人们创建一个电子商务应用程序。我将详细介绍一下结构的一些东西在这里为你:

-

电子商务

有几个特点考虑与电子商务应用:

  1. “购物车”将如何持续
  2. 如何在屏幕上显示产品
  3. 如何管理选项的产品
  4. 如何管理商店

的“后台”,我将介绍一些功能,这些在这里。我不能写太多,因为它最终会迷惑你...


1.车

如果你打算做一个电子商务应用程序,你需要一辆推车。我们使用了session-based model;但另一种方法是创建一个Cart模型本身,它依赖于数据库

购物车的底线是你需要一种方法来保存数据。数据持久性就是让数据在浏览器中“停留”的方式,即使在您对Rails服务器的请求之间也是如此。由于Rails是一个stateless框架,它会将每个请求视为“裸体” - 这意味着如果要保留数据,则必须使用某种方法来识别它。

对于我们的车,我们用一个非常简单的sessions系统 - 因此,如果你添加一个新的产品加入购物车,这将是产品ID添加到您的会话,从而给你一个永久车店:

[我可以包含代码,如果你想让它]

-

2。产品

您可以创建一个Product模型:

#config/routes.rb 
resources :products, only: [:index, :show] 

#app/models/product.rb 
class Product < ActiveRecord::Base 
    belongs_to :category 
end 

#app/controllers/products_controller.rb 
class ProductsController < ApplicationController 
    def index 
     @products = Product.all 
    end 

    def show 
     @product = Product.find params[:id] 
    end 
end 

#app/views/products/index.html.erb 
<% @products.each do |product| %> 
    <%= product.name %> 
<% end %> 

-

您还需要一种方法来管理产品

3.产品选项选项。如果你买了一件T恤,你要确保你有不同的sizes等,这是棘手的(尤其是在那里你必须容纳这么多不同的选择化妆品),但我们找到了一种方法:

#app/models/option.rb 
class Option < ActiveRecord::Base 
    has_many :product_options 
    has_many :products, through: :product_options 
end 

#app/models/product_option.rb 
class ProductOption < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :option 
end 

#app/models/product.rb 
class Product < ActiveRecord::Base 
    has_many :product_options 
    has_many :options, through: :product_options 
end 

这会给你打电话的能力@product.options

这里的窍门是填充ProductOption模型一系列有关选项本身不同属性的。例如:

#products 
id | title | price | created_at | updated_at 
x | xbox | 399.99 |  x  |  x 

#product_options 
id | product_id | option_id | name | created_at | updated_at 
x |  1  |  2  | blue |  x  |  x 
x |  1  |  1  | wifi |  x  |  x 
x |  1  |  3  | chip |  x  |  x 
x |  1  |  2  | pink |  x  |  x 

#options 
id | name  | created_at | updated_at 
x | accessory |  x  |  x 
y | colour  |  x  |  x 
z | upgrades |  x  |  x 

这会给你巨大的可扩展性 - 为您提供建立一个真正引人注目的结构店里的能力&你的产品

-

4.后端

您可以通过使用namespace

#config/routes.rb 
namespace :admin do 
    root "products#index" 
    resources :products, only: [:index, :new, :create] #-> domain.com/admin/products/new 
end 

这允许您创建/admin文件夹内的“迷你应用程序”:

#app/controllers/admin/products_controller.rb 
class Admin::ProductsController < ApplicationController 
    before_action :authenticate_user! 

    def index 
     @products = Product.all 
    end 

    def new 
     @product = Product.new 
    end 

    def create 
     @product = Product.new product_params 
     @product.save 
    end 

    private 

    def product_params 
     params.require(:product).permit(:title, :price) 
    end 
end 

你会想验证使用Devise管理区,让您创建仅用于用户/管理员的一个私人区域。是为Rails最全面的支付网关管理器 -


更新

要处理款项,您使用ActiveMerchant

这已经从一些Shopify源的提取是最好的。我会高度推荐使用它,特别是如果你是新的。

我就不赘述了(你可以看到如何使用this Railscast设置它) - 来得到它的工作,我会创建一个“订单”控制器&型号:

#config/routes.rb 
resources :orders, only: [:new, :create], path_names: { new: "" }, path: :order 

#app/models/order.rb 
Class Order < ActiveRecord::Base 
end 

#app/controllers/orders_controller.rb 
class OrdersController < ApplicationController 

    def new 
     #start payment here 
    end 

    def create 
     #if payment successful, continue 
     @order = Order.new order_params 
     @order.save 
    end 

    private 

    def order_params 
     params.require(:order).permit(:x, :y, :z) 
    end 
end 

这您可以拨打以下网址:domain.com/order,您可以从中输入付款详细信息,将付款发送至PayPal或类似商品,然后将买家退还至“谢谢”页面。

+0

你好,感谢您的答案!但我想知道你如何处理银行/网关和东西?我的网站只需要支付一次,这不是产品相关 – 2014-08-28 11:58:08

+0

嘿芽!你应该在你的问题上更具体一些!我会为你写一个更新! – 2014-08-28 12:39:50