我发现有关将PayPal集成到我正在尝试的标准方法上的相互矛盾的信息。这是一个更高层次的问题。
我的任务:在我的应用程序的未经过身份验证的用户(“访客”)支付PayPal预订后,我需要将它们自动重定向回来,我在其中创建此记录,发送相应的电子邮件,然后开始我的帐户创建流程。
我倾向于设置as described in this SO answer
它使用'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上使用CC付款,自动退货将无效?如果这是真的,自动返回不是我应该依赖的东西所以我需要找到更好的实现。
所以也许我应该使用:
1)即时付款通知(IPN)
或
2)付款数据传输(PDT)。
我应该使用这些,如果是的话,哪一个?他们是否达到了同样的目标?
我真的只想要最简单,最快速的实现。 PayPal不是我的应用程序上的主要支付方式,我正在质疑我现在是否应该费心支持它,因为通过比较以及需要注意的增长任务列表,我已经为我提供了直截了当的其他解决方案(如Stripe)。 / p>
提前感谢您提供的任何指导。
答案 0 :(得分:1)
我建议你使用这个gem paypal sdk rest,你可以按照所有步骤安装gem,运行bundle install
命令,rails g paypal:sdk:install
也需要登录< strong> 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")
还建议您转到我上面显示的链接的执行付款部分,然后单击
仅支付pay_method付款为&#34; paypal&#34;
然后您将看到另一个代码,因此将其复制并粘贴到您的应用中,在该代码的末尾您将看到此
# 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
在那里,您无法添加此行以及其他语句redirect_to @redirect_url
该行代码会将您重定向到Paypal,当用户接受付款时,它会将您重定向到您在代码的这一部分中的return_url
# ###Redirect URLs
:redirect_urls => {
:return_url => "http://localhost:3000/payment/execute",
:cancel_url => "http://localhost:3000/" },
答案 1 :(得分:0)
你肯定想要使用IPN。即使启用了自动返回功能,也无法保证用户将其恢复到该页面,因此如果您尝试处理后付款处理任务,则会遇到问题,有时用户无法进行此操作所以不会发生更新。
无论用户是否将其恢复到您的网站,IPN都会触发,因此您可以确保它始终按预期运行代码。此外,IPN将允许您正确处理电子支票等内容,原始IPN会将付款显示为待处理,当清除(或失败)时,您将获得具有相同事务ID但更新状态的另一个IPN。
IPN还允许您处理诸如退款,争议,订阅付款等事情,其中可能没有结账,但某种交易确实如此。