我目前正试图以固定价格进行“立即购买”按钮。
用户付款后,我想将它们重定向到根网址,并向他们发送附带PDF文件的电子邮件。
我一直在研究如何使用paypal创建一个简单的结账但没有成功,我发现这些教程已经存在了很多年,而且有些代码已被弃用。
我尝试过使用BRAINTREE,它在测试/沙盒上工作得很好,但由于我目前居住在波多黎各,因此无法创建生产帐户(这限制了我支付网关的选项)。
到目前为止我做了什么
遵循教程
我使用products
和name
unit_price
创建了一个脚手架
在我的product
模型中:
# This defines the paypal url for a given product sale
def paypal_url(return_url)
values = {
:business => YOUR_MERCHANT_EMAIL,
:cmd => '_cart',
:upload => 1,
:return => return_url,
:invoice => UNIQUE_INTEGER
}
values.merge!({
"amount_1" => unit_price,
"item_name_1" => name,
"item_number_1" => id,
"quantity_1" => '1'
})
# This is a paypal sandbox url and should be changed for production.
# Better define this url in the application configuration setting on environment
# basis.
"https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query
end
在教程中他们说这应该足以处理付款但是他们要求点击“立即购买”链接,我不知道在哪里指出它或如何创建它。
如果问的不多,有人可以指出我在这里正确的方向(一步一步 - >使用paypal轻松单一结账支付 - >文件)。
万分感谢。
修改
能够创建checkout
按钮:
<%= link_to 'checkout', product.paypal_url(products_url) %>
现在它可以工作但我如何制作它以便您通过notice
重定向回我的网站?
谢谢!
答案 0 :(得分:4)
好的,经过一整天的研究和测试,我已经设法让几乎一切正常。这就是我所做的
第1步
rails g scaffold product name:string unit_price:decimal
product
控制器:
def index
@products = Product.all
if @products.length != 0
@product = Product.find(1)
end
end
然后创建您的第一个产品
第2步
在产品索引中,您可以为paypal结帐添加这样的按钮:
<%= link_to 'checkout', @product.paypal_url(payment_notification_index_url, root_url) %>
第3步
<{1>}模型中的
product
您可以找到有关HTML Variables for PayPal Payments Standard
的更多信息在这段代码中,对我来说最重要的是:
# This defines the paypal url for a given product sale
def paypal_url(return_url, cancel_return)
values = {
:business => 'your_sandbox_facilitato_email@example.com',
:cmd => '_xclick',
:upload => 1,
:return => return_url,
:rm => 2,
# :notify_url => notify_url,
:cancel_return => cancel_return
}
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
PayPal重定向买家的网址&#39;浏览器完成付款后。例如,在您的网站上指定一个显示&#34;感谢您付款的网址&#34;页。
:return
PayPal以即时付款通知邮件的形式发布付款信息的网址。
:notify_url
PayPal重定向买家的网址&#39;浏览器,如果他们在完成付款前取消结帐。例如,在您的网站上指定一个显示&#34;已取消的付款&#34;页。
和
:cancel_return
退货方式。 FORM METHOD用于将数据发送到指定的URL 由return变量。允许值为:
0 - 所有购物车付款都使用GET方法
1 - 通过使用,将买家的浏览器重定向到返回URL GET方法,但不包括付款变量
2 - 通过使用,将买家的浏览器重定向到返回URL POST方法,包括所有付款变量
第4步
:rm
在这里,您需要添加以下内容:
rails g controller PaymentNotification create
第5步
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])
# render nothing: true
if @payment.status == 'Completed'
redirect_to root_url, notice: 'Success!'
else
redirect_to root_url, notice: 'Error'
end
end
end
在这里添加以下内容
rails g model PaymentNotification
路线中的:
class PaymentNotification < ActiveRecord::Base
belongs_to :product
serialize :params
after_create :success_message
private
def success_message
if status == "Completed"
puts 'Completed'
...
else
puts 'error'
...
end
end
end
现在您应该可以通过PayPal进行全面的处理付款。
每次resources :payment_notification, only: [:create]
和rake db:migrate
创建后,不要忘记scaffold
。
另一件事,为了获得自动重定向,你必须在paypal的沙箱中指定url。 Click here to know how
如果我忘记了什么让我知道,已经工作超过10个小时才能得到这个工作lol