将text_field自定义参数传递给link_to paypal IPN

时间:2015-08-13 22:34:21

标签: ruby-on-rails paypal parameters parameter-passing paypal-ipn

我尝试使用paypal成功进行交易时向客户发送电子邮件。

我已经设法将自定义email参数发送到他们提供的custom参数中的paypal。

我现在拥有的

我的product型号:

class Product < ActiveRecord::Base

    # This defines the paypal url for a given product sale
        def paypal_url(return_url, cancel_return, useremail) 
        values = { 
        :business => 'your_business_email@example.com',
           :cmd => '_xclick',
        :upload => 1,
        :return => return_url,
        :rm => 2,
        :cancel_return => cancel_return,
        :custom => useremail
        }   
        values.merge!({ 
        "amount" => unit_price,
        "item_name" => name,
        "item_number" => id,
        "quantity" => '1'
        })
             # For test transactions use this URL
    "https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query
    end

    has_many :payment_notifications


end

在这里,我传递了:custom对象的参数,我在按钮link_to帮助中将其硬编码

<%= link_to 'checkout', @product.paypal_url(payment_notification_index_url, root_url, 'testing@testing.com') %>

这非常有效,我可以将custom电子邮件存储在数据库中:

class PaymentNotificationController < ApplicationController
    protect_from_forgery except: [:create]

  def create
    # @payment = PaymentNotification.create!(params: params, product_id: params[:invoice], status: params[:payment_status], transaction_id: params[:txn_id] )
    @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
      redirect_to root_url, notice: 'Success!'
    else
      redirect_to root_url, notice: 'Error'
    end

  end
end

enter image description here

问题

如何让客户在一个字段中输入他们的电子邮件并将该值传递给link_to的参数,以便paypal返回电子邮件,以便我可以将其存储在数据库中并发送电子邮件给客户端?

由于

2 个答案:

答案 0 :(得分:1)

这可能是 更多 ,而不是您期望的......但请继续阅读。

在进一步深入实施之前,请注意,您已使用sandbox版本的Paypal进行测试,并且生产,您希望paypal_urluser返回加密网址,以避免篡改交易,例如更改价格(详情请见Railscast #143)。

现在,请注意客户端通过javascript获取用户电子邮件字段并修改链接的任何方法都不会安全,因为应该从您的服务器生成链接加密(并且您需要在呼叫过程中传入用户电子邮件)。

那么,你能做什么?使用 ajax 将请求发送到包含参数的服务器(例如return_url,user_email等),并在服务器中使用加密链接进行响应。然后,您可以使用javascript替换链接,并允许用户点击该链接。

如您所知,上述实施非常笼统,任何答案都不适合您的具体情况。你应该记住以上内容,因为无论如何你都需要这样做。

答案 1 :(得分:1)

你不应该使用link_to,而应使用form :: tag with method :: get

<%= form_tag (@product.paypal_url(payment_notification_index_url, root_url, :custom)),method: :post do %>
  <%= text_field_tag :custom %>
  <%= submit_tag 'checkout' %>
<% end %>