传递状态在rails上的ruby中的notify_url IPN失败

我收到以下错误:

2015-08-17T18:46:59.095260+00:00 heroku[router]: at=info method=POST path="/payment_notification" status=500 

这是我的模特:

 class Product  'facilitatoremail@example.com', :cmd => '_xclick', :upload => 1, :return => return_url, :rm => 1, :notify_url => notify_url, :cancel_return => cancel_return, :custom => useremail, :cert_id => 'myid' } values.merge!({ "amount" => unit_price, "item_name" => name, "item_number" => id, "quantity" => '1' }) encrypt_for_paypal(values) end has_many :payment_notifications end PAYPAL_CERT_PEM = File.read("#{Rails.root}/certs/paypal_cert.pem") APP_CERT_PEM = File.read("#{Rails.root}/certs/app_cert.pem") APP_KEY_PEM = File.read("#{Rails.root}/certs/app_key.pem") def encrypt_for_paypal(values) signed = OpenSSL::PKCS7::sign(OpenSSL::X509::Certificate.new(APP_CERT_PEM), OpenSSL::PKey::RSA.new(APP_KEY_PEM, ''), values.map { |k, v| "#{k}=#{v}" }.join("\n"), [], OpenSSL::PKCS7::BINARY) OpenSSL::PKCS7::encrypt([OpenSSL::X509::Certificate.new(PAYPAL_CERT_PEM)], signed.to_der, OpenSSL::Cipher::Cipher::new("DES3"), OpenSSL::PKCS7::BINARY).to_s.gsub("\n", "") end 

我的post控制器是:

 class PaymentNotificationController  [:create] def create @payment = PaymentNotification.create!(params: params, product_id: 1, status: params[:payment_status], transaction_id: params[:txn_id], email: params[:custom] ) render nothing: true if @payment.status == 'Completed' PaymentTransactions.success(@payment).deliver_now end end end 

我的按钮:

       

我不确定我在这里做错了什么。

Paypal发送POST但我收到错误STATUS = 500

所有付款都正常进行但我只是希望paypal使用notify_url进行POST。

我在Heroku测试这个,因为在本地测试不会起作用。

此外,如果我使用return_url代替发布post,它将工作并返回STATUS = 200。

但我不想使用这个,因为用户执行事务和重定向回return_url之间的差距。

编辑

整合Airbrake这就是我得到的回报

在此处输入图像描述

编辑2

我将从PayPal发送的数据的数据编码更改为UTF-8

在此处输入图像描述

当我再次尝试时,状态仍然是500,但我将事务保存在数据库中但是,paypal保持尝试失败并继续重试,因此没有保存一条记录我有多条记录

我现在得到的错误就是这个:

在此处输入图像描述

现在至少保存了交易但PayPal似乎未能认识到这一点。

解决了

显然,这是我的邮件没有在生产中配置..我只是能够评论该部分并推进heroku并再次尝试。 它成功地以STATUS = 200进入低谷,并且在Airbrake中解决了错误。

谢谢你们!

您是否在PayPal帐户中设置了系统编码? 它位于您的个人资料中的“PayPal按钮编码”下,您应该将“以相同编码方式发送数据”设置为UTF-8。

正如在评论中发现的那样,另一个错误是由于错误配置的邮件程序。 请注意,#render调用不会立即将数据发送到客户端,它只会将其排队直到操作结束。