繁体   English   中英

贝宝IPN-贝宝网站标准

[英]PayPal IPN - Paypal Website Standard

我一直在关注Railscasts实施Paypal标准付款。 在接收IPN通知时,我意识到我没有收到诸如item_name, item_number, & quantity类的项目详细item_name, item_number, & quantity 经过一番调查,我算了一下,在我的控制器错字他们作为PayPal发送的变量item_name1item_number1quantity1item_name2item_number2quantity2

我已经安装了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_name1item_name2item_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM