我尝试使用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
问题
如何让客户在一个字段中输入他们的电子邮件并将该值传递给link_to
的参数,以便paypal返回电子邮件,以便我可以将其存储在数据库中并发送电子邮件给客户端?
由于
答案 0 :(得分:1)
这可能是 更多 ,而不是您期望的......但请继续阅读。
在进一步深入实施之前,请注意,您已使用sandbox
版本的Paypal进行测试,并且生产,您希望paypal_url
为user
返回加密网址,以避免篡改交易,例如更改价格(详情请见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 %>