贝宝 IPN - 贝宝网站标准
PayPal IPN - Paypal Website Standard
我一直在关注 Railscasts 如何实施 Paypal 标准支付。
在收到 IPN 通知时,我意识到我没有收到像
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
。使用循环检查 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"}
上述方法应该return这个哈希数组:
[{"item_name"=>"cards", "item_number"=>"123", "quantity"=>"1"},
{"item_name"=>"book", "item_number"=>"55", "quantity"=>"2"}]
希望这种格式能让您轻松地使用这些信息做任何您需要做的事情。例如,您可以对其调用 .length
来计算有多少项目,如果您希望为每个项目单独通知,则可以迭代每个元素并将每个散列传递给 PaymentNotification.create!
。
我一直在关注 Railscasts 如何实施 Paypal 标准支付。
在收到 IPN 通知时,我意识到我没有收到像
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
。使用循环检查 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"}
上述方法应该return这个哈希数组:
[{"item_name"=>"cards", "item_number"=>"123", "quantity"=>"1"},
{"item_name"=>"book", "item_number"=>"55", "quantity"=>"2"}]
希望这种格式能让您轻松地使用这些信息做任何您需要做的事情。例如,您可以对其调用 .length
来计算有多少项目,如果您希望为每个项目单独通知,则可以迭代每个元素并将每个散列传递给 PaymentNotification.create!
。