Rails 监听器 Paypal IPN 总是返回 INVALID

Posted

技术标签:

【中文标题】Rails 监听器 Paypal IPN 总是返回 INVALID【英文标题】:Rails listener Paypal IPN always return INVALID 【发布时间】:2016-04-26 18:01:43 【问题描述】:

我已经为我的 IPN 构建了一个监听器。我可以通过 IPN Simulator 接收请求,并且所有参数都是正确的,但是当我将其发送回 link for sending my request to make validations 时,它总是会返回 INVALID。

我尝试将我的 PayPal 帐户的编码更改为 UTF-8,但没有成功。

我没有为此使用任何 gem,我对此并不期待。

class PaymentNotificationController [:create] #否则来自 PayPal 的请求不会发送到控制器 定义创建 响应 = validate_IPN_notification(request.raw_post) 个案回应 当“验证” P'工作' 当“无效” p'没用' 别的 结尾 渲染 :nothing => true, :status => 200, :content_type => 'text/html' 结尾 受保护 def validate_IPN_notification(原始) uri = URI.parse('https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate') #uri = URI.parse('https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate') http = Net::HTTP.new(uri.host, uri.port) http.open_timeout = 60 http.read_timeout = 60 http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.use_ssl = 真 响应 = http.post(uri.request_uri, raw, '内容长度' => "#raw.size", 'User-Agent' => "我的自定义用户代理" )。身体 结尾 结尾

请帮帮我,我整个下午都被它困住了,无法弄清楚。

【问题讨论】:

【参考方案1】:

我认为你的问题是not follow exactly what papal requires

来自Paypal document

您的侦听器 HTTP 将完整的、未更改的消息发送回 PayPal。

注意此消息必须包含与来自 PayPal 的原始 IPN 相同的字段,以相同的顺序,都以 cmd=_notify-validate 开头。此外,此消息必须使用与原始消息相同的编码。

所以你validate function 会是:

def validate_IPN_notification(ipn_url)
  validate_url = "#ipn_url?cmd=_notify-validate"
  # Post validate_url
  ...
end

注意ipn_url是IPN的同一个url

【讨论】:

我认为这行不通。正如developer.paypal.com/docs/classic/ipn/integration-guide/… 中所说,我必须将请求发送到我当前正在发送的 URL。我的原始字段与我从 PayPal 收到的字段相同,顺序相同 你能检查一下日志,你收到和发送了什么?【参考方案2】:

原来是 Windows 问题,我不知道如何解决。

我在我的 Ubuntu 15 上尝试了同样的方法,它运行良好。

【讨论】:

您能解释一下问题所在吗?否则这对任何人都没有帮助

以上是关于Rails 监听器 Paypal IPN 总是返回 INVALID的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的贝宝 ipn 验证总是返回无效?

即使我按照 PayPal 示例代码操作,PayPal IPN 总是返回 INVALID?

IPN 验证返回 INVALID,因为 PayPal 在 POST 中向 IPN 侦听器发送了不正确的字符集

Paypal IPN 侦听器不返回值

Paypal SandBox IPN 总是返回 INVALID

未调用 Rails 应用程序上的 Paypal IPN