我发现关于为我正在尝试做的事情集成PayPal的标准方法的信息相互矛盾。这是一个更高层次的问题。
我的任务:在我的应用程序的未经身份验证的用户("访客"(支付PayPal预订费用后,我需要他们自动重定向回去,在那里我创建此记录,发送适当的电子邮件,并开始我的帐户创建流程。
我倾向于按照这个SO答案中的描述进行设置
它使用"PayPal-sdk-rest"gem,并将数据哈希发送到PayPal终结点,如下所示:
values = {
:business => business,
:cmd => '_cart',
:upload => 1,
:return => return_url
}
values.merge!({
"amount_1" => amount,
"item_name_1" => name,
"item_number_1" => id,
"quantity_1" => '1'
})
"https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query
但这似乎是基于2008年的Railscast实现!我怀疑这仍然是一种理想的方式。
自动返回:
1( 在上面的实现中,尽管在我的业务配置文件中设置了它,但我无法自动恢复工作。
2( 配置文件页面上的自动返回设置需要静态 URL,但我想将动态数据传递给自动返回以触发后续操作。上面指定的return_url是否会覆盖配置文件页面上设置的静态 URL,它应该覆盖(因为我无法让它工作,我无法测试和查看(?
3(我读过如果用户在PayPal上使用抄送付款,自动退货将不起作用??如果这是真的,自动返回不是我应该依赖的东西,所以我需要找到一个更好的实现。
所以也许我应该使用:
1( 即时付款通知
或
2( 支付数据传输 (PDT(。
我应该使用这些,如果是,是哪一个?他们是否实现了相同的目标?
我真的只想要最简单、最快速的实现。PayPal不是我应用程序上的主要付款方式,我质疑我现在是否应该费心支持它,因为相比之下,其他解决方案(如 Stripe(对我来说是多么简单,再加上需要关注的不断增长的任务列表。
提前感谢您提供的任何指导。
我建议您在 sdk rest PayPal使用此 gem,您可以按照所有步骤操作,例如安装 gem,运行 bundle install
命令,rails g paypal:sdk:install
还需要登录以 developer.paypal.com 并创建 REST API,因为您将需要本节中的client_id和client_secret:
PayPal::SDK::REST.set_config(
:mode => "sandbox", # "sandbox" or "live"
:client_id => "EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM",
:client_secret => "EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM")
还建议您转到我上面向您展示的链接的"执行付款"部分,然后单击
仅适用于payment_method为"PayPal"的付款
然后你会看到另一个代码,所以复制并粘贴到你的应用程序中,在该代码的末尾,你会看到这个
# Create Payment and return status
if @payment.create
# Redirect the user to given approval url
@redirect_url = @payment.links.find{|v| v.method == "REDIRECT" }.href
logger.info "Payment[#{@payment.id}]"
logger.info "Redirect: #{@redirect_url}"
else
logger.error @payment.error.inspect
end
在那里,您不能在 else 语句中添加此行redirect_to @redirect_url
该行代码会将您重定向到PayPal,当用户接受付款时,它会将您重定向到代码的这一部分return_url
# ###Redirect URLs
:redirect_urls => {
:return_url => "http://localhost:3000/payment/execute",
:cancel_url => "http://localhost:3000/" },
你肯定想为此使用 IPN。 即使启用了自动退货,也不能保证用户会回到该页面,因此,如果您尝试在那里处理付款后处理任务,您会遇到有时用户无法到达那里的问题,因此不会发生更新。
无论用户是否返回到您的网站,IPN 都会触发,因此您可以确定它将始终按预期运行代码。 此外,IPN 将允许您正确处理电子支票等事情,其中原始 IPN 会将付款显示为待处理,当它清除(或失败(时,您将获得另一个具有相同交易 ID 但状态更新的 IPN。
IPN 还允许您处理退款、争议、订阅付款等事情,其中结帐可能没有发生,但某种交易发生了。