首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PayPal IPN - Paypal网站标准

PayPal IPN - Paypal网站标准
EN

Stack Overflow用户
提问于 2016-06-21 13:15:49
回答 1查看 102关注 0票数 0

我一直跟踪铁路执行贝宝标准支付。在接收到IPN通知时,我意识到我并没有收到像item_name, item_number, & quantity这样的项目细节。经过一些调查,我想我在控制器中写错了,因为PayPal发送变量item_name1item_number1quantity1item_name2item_number2quantity2等等。

我已经安排好铁道了。通知是通过控制器发出的。

代码语言:javascript
复制
  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等等。什么是正确的方法来命名这些变量,能够接受paypal IPN通知而不为每一个额外的项目添加一列?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 14:02:12

您可以在调用params之前查看PaymentNotification.create!。使用循环检查params中的字段,您可以计数有多少项,并将它们的所有属性提取到数组中。之后,您可以使用该数组中的数据,但是您需要。

这段代码假设PayPal从未用字段item_name发送响应--如果有一个项,它们仍然发送字段item_name1。我不知道这是不是真的。

代码语言:javascript
复制
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

给出了一些类似的

代码语言:javascript
复制
{"item_name1"=>"cards", "item_number1"=>"123", "quantity1"=>"1",
 "item_name2"=>"book", "item_number2"=>"55", "quantity2"=>"2",
 "other_fields"=>"whatever"}

上面的方法应该返回这个散列数组:

代码语言:javascript
复制
[{"item_name"=>"cards", "item_number"=>"123", "quantity"=>"1"},
 {"item_name"=>"book",  "item_number"=>"55",  "quantity"=>"2"}]

希望这种格式可以让您轻松地对该信息进行任何需要的操作。例如,您可以在它上调用.length来计算有多少项,如果您想要对每个项单独发出通知,可以迭代每个元素并将每个散列传递给PaymentNotification.create!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37945541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档