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的主要内容,如果未能解决你的问题,请参考以下文章
即使我按照 PayPal 示例代码操作,PayPal IPN 总是返回 INVALID?
IPN 验证返回 INVALID,因为 PayPal 在 POST 中向 IPN 侦听器发送了不正确的字符集