【发布时间】:2014-07-21 16:29:09
【问题描述】:
我的 Rails4 应用程序中有一个 Order 和一个 OrderTransactions 模型。他们之间有一个基本的has_one和belongs_to关系。
我正在从 /orders/new 页面向银行的 URL 发布请求,如下所示:
<%= simple_form_for(@order, :url => "https://testsanalpos.est.com.tr/servlet/est3Dgate", :method => :post) do |f| %>
<% @hashing.each do |k, v| %>
<%= f.input k, input_html: {name: k, value: v}, as: :hidden %>
<% end %>
<%= f.input :participation_id, ... %>
<%= f.button :submit, "Ödeme Yap" %>
<% end %>
@hashing, hash 来自我的控制器 =>
class OrdersController < ApplicationController
before_filter :authenticate_user!
before_action :set_order, only: [:show, :edit, :update, :destroy]
skip_before_action :verify_authenticity_token
def new
@order = Order.new
@hashing = {
clientid: POS['clientid'],
oid: Time.now.to_i.to_s,
amount: POS['amount'],
okUrl: POS['okUrl'],
failUrl: POS['failUrl'],
rnd: Time.now.to_i.to_s,
}
end
def create
@order = Order.new(order_params)
respond_to do |format|
@order.purchase
end
end
def success
end
def fail
end
private
def set_order
@order = Order.find(params[:id])
end
def order_params
params.require(:order).permit(:id, :ip_address, :first_name, :last_name, :card_brand, :card_number, :card_verification, :card_expires_on, :user_id, :participation_id)
end
end
Order.rb =>
class Order < ActiveRecord::Base
belongs_to :user
belongs_to :participation
has_one :transaction, :class_name => "OrderTransaction"
def purchase
participation.update_attribute(:payment_status, true)
create_transaction(:action => "purchase", :response => response)
end
end
银行页面正在从用户那里获取所有必要的信息,例如信用卡号、卡到期日期等。我的应用程序没有对购买过程做任何事情,所有这些都发生在银行方面。
然后银行给我回了一堆关于支付过程的参数。如果付款成功,银行会将参数发布到我的/orders/success.html.erb,如果失败则发布到/order/fail.html.erb。
我有 2 个问题 =>
1) 无论响应成功还是失败,我都希望创建 Order 模型实例。似乎这应该通过控制器中的 create 方法发生,但它不起作用:/
2) 如何获取银行发送到我的 /fail 或 /success URL 的参数?我需要将它们放入我的应用程序并将它们作为 OrderTransaction 实例保存在我的数据库中。我可以在我的日志中看到这样的参数 =>
Started POST "/orders/fail" for 127.0.0.1 at 2014-06-01 13:40:28 +0300
Processing by OrdersController#fail as HTML
Parameters:
{
"TRANID"=>"",
"Faturafirma"=>"OMÜ Uzaktan Eğitim Merkezi",
"islemtipi"=>"Auth",
"refreshtime"=>"5",
"lang"=>"tr",
"amount"=>"30",
"ACQBIN"=>"490740",
"clientIp"=>"193.140.28.145",
"name"=>"AKBANK",
"cardHolderName"=>"dsadas dasdsa",
"okUrl"=>"http://localhost:3000/orders/success",
"storetype"=>"3d_pay_hosting",
"Response"=>"Declined"
....
}
数据库架构 =>
create_table "orders", force: true do |t|
t.integer "participation_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "order_transactions", force: true do |t|
t.integer "order_id"
t.string "clientip"
t.string "cardholdername"
t.string "response"
t.string "errmsg"
...
t.datetime "created_at"
t.datetime "updated_at"
end
Routes.rb =>
...
post 'orders/success' => 'orders#success'
post 'orders/fail' => 'orders#fail'
resources :orders, only: [:index, :new, :create]
...
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3