Rail的PayPal与自动返回和动态URL数据集成的标准做法是什么?

时间:2015-03-03 11:15:32

标签: ruby-on-rails ruby paypal

我发现有关将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>

提前感谢您提供的任何指导。

2 个答案:

答案 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还允许您处理诸如退款,争议,订阅付款等事情,其中​​可能没有结账,但某种交易确实如此。