Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息

Posted

技术标签:

【中文标题】Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息【英文标题】:Paypal adaptive payments IPN callback: how to return the complete unaltered ipn message 【发布时间】:2013-04-23 14:17:09 【问题描述】:

我在市场(买家和卖家)工作,中间人从每次购买中分得一杯羹。我想让买家在购买按钮被重定向到 Paypal 后立即购买商品。这很好并且有效。

response = ADAPTIVE_GATEWAY.setup_purchase(
  :return_url => 'return_url',
  :cancel_url => 'cancel_url',
  :ipn_notification_url => 'ipn_notification_url',
  :receiver_list => recipients,
)
# ADAPTIVE_GATEWAY.set_payment_options(...)
redirect_to (ADAPTIVE_GATEWAY.redirect_url_for(response['payKey']))

下一步是使用 ipn 验证交易。我确实收到了 paypal 回调,但我不清楚应该返回什么?

def notify_cb
  notify = ActiveMerchant::Billing::Integrations::PaypalAdaptivePayment::Notification.new(request.raw_post)

  if notify.acknowledge
    update_attributes(
      :transaction_id => notify.transaction_id,
      :status => notify.status
    )
  end

  render :nothing => true # render nothing?!? RENDER_LINE
end

此处关于 SO 的大多数示例都没有渲染 (RENDER_LINE),而在 paypal 文档中,流程被描述为 (https://www.x.com/developers/paypal/documentation-tools/ipn/integration-guide/IPNIntro#protocol_and_arch):

IPN 协议由三个步骤组成:

    PayPal 向您的 IPN 侦听器发送一条消息,通知您该事件

    您的听众将完整的未更改消息发送回 PayPal;消息必须以相同的顺序包含相同的字段,并以与原始消息相同的方式进行编码

    PayPal 回送一个字,如果消息来自 PayPal,则该字已验证;如果与最初发送的内容有任何差异,则该字为无效

我的问题是如何将完整的未更改消息返回给 PayPal,或者我对流程的理解缺失/错误?

【问题讨论】:

【参考方案1】:

您是要回帖到https://sandbox.paypal.com/ 或https://www.sandbox.paypal.com/cgi-bin/webscr(或者包括“cmd=_notify-validate 作为 POST 数据的一部分,或者通过 GET 包括在内)?

前者返回 HTTP 301,因为您基本上是直接指向主页,而后者将直接指向托管 IPN 验证逻辑的页面。

【讨论】:

感谢 Robert 并深入研究 SO 和 Paypal 文档=_notify-validate 到最后帮助我得到了 INVALID/VERIFIED 3。根据activemerchant.rubyforge.org/classes/ActiveMerchant/Billing/…notify.acknowledge 实际上是向贝宝发帖

以上是关于Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 IPN 使用 Paypal 自适应支付?

paypal自适应支付IPN中的自定义字段

Paypal 自适应支付 IPN 费用信息

自适应支付 IPN 交易 ID 未出现

Paypal 自适应支付和 IPN

自适应支付 paypal - 没有支付 api 操作的 pdt 数据