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



我发现关于为我正在尝试做的事情集成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 还允许您处理退款、争议、订阅付款等事情,其中结帐可能没有发生,但某种交易发生了。

最新更新