我一直跟踪铁路执行贝宝标准支付。在接收到IPN通知时,我意识到我并没有收到像item_name, item_number, & quantity这样的项目细节。经过一些调查,我想我在控制器中写错了,因为PayPal发送变量item_name1,item_number1,quantity1,item_name2,item_number2,quantity2等等。
我已经安排好铁道了。通知是通过控制器发出的。
PaymentNotificationsController < ApplicationController
protect_from_forgery except: [:create]
def create
PaymentNotification.create!(params: params,
item_number: params[:item_number], item_name: params[:item_name], quantity: params[:quantity]
render nothing: true
end在一个订单有多个项目的情况下,它将是item_name1、item_name2、item_name3等等。什么是正确的方法来命名这些变量,能够接受paypal IPN通知而不为每一个额外的项目添加一列?
提前感谢!
发布于 2016-06-21 14:02:12
您可以在调用params之前查看PaymentNotification.create!。使用循环检查params中的字段,您可以计数有多少项,并将它们的所有属性提取到数组中。之后,您可以使用该数组中的数据,但是您需要。
这段代码假设PayPal从未用字段item_name发送响应--如果有一个项,它们仍然发送字段item_name1。我不知道这是不是真的。
ITEM_PARAM_PREFIXES = ["item_name", "item_number", "quantity"]
def extract_ipn_items_params(params)
item_params = []
loop do
item_num_to_test = item_params.length + 1
item_num_suffix = item_num_to_test.to_s
possible_param_name = ITEM_PARAM_PREFIXES[0] + item_num_suffix
if params.include?(possible_param_name)
this_item_params = {}
ITEM_PARAM_PREFIXES.each do |prefix|
this_item_params[prefix] = params[prefix + item_num_suffix]
end
item_params.push this_item_params
else
return item_params
end
end
end给出了一些类似的
{"item_name1"=>"cards", "item_number1"=>"123", "quantity1"=>"1",
"item_name2"=>"book", "item_number2"=>"55", "quantity2"=>"2",
"other_fields"=>"whatever"}上面的方法应该返回这个散列数组:
[{"item_name"=>"cards", "item_number"=>"123", "quantity"=>"1"},
{"item_name"=>"book", "item_number"=>"55", "quantity"=>"2"}]希望这种格式可以让您轻松地对该信息进行任何需要的操作。例如,您可以在它上调用.length来计算有多少项,如果您想要对每个项单独发出通知,可以迭代每个元素并将每个散列传递给PaymentNotification.create!。
https://stackoverflow.com/questions/37945541
复制相似问题