[英]PayPal IPN - Paypal Website Standard
我一直在关注Railscasts实施Paypal标准付款。 在接收IPN通知时,我意识到我没有收到诸如item_name, item_number, & quantity
类的项目详细item_name, item_number, & quantity
。 经过一番调查,我算了一下,在我的控制器错字他们作为PayPal发送的变量item_name1
, item_number1
, quantity1
, item_name2
, item_number2
, quantity2
等
我已经安装了Railscasts。 通知通过控制器来
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
等。 命名这些变量的正确方法是什么,以便能够接受贝宝IPN通知而无需为每个额外的项目添加列?
提前致谢!
您可以在调用PaymentNotification.create!
之前查看这些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!
如果您要为每个项目单独通知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.