【问题标题】:Is there a way to save Paypal's payKey in Rails有没有办法在 Rails 中保存 Paypal 的 payKey
【发布时间】:2014-07-03 09:40:13
【问题描述】:

任何人都可以提供任何帮助,我们将不胜感激。

我正在尝试使用 PayPal 在成功付款时返回的 payKey 作为变量?这样我就可以使用 if else 语句将某物标记为已付款或未付款;告诉应用程序显示立即付款或下载选项...这是我的贝宝库文件,其中定义了付费方法的模型和使用付费方法的控制器:

lib/pay_pal_api.rb

require "pp-adaptive"

class PayPalAPI

  def self.payment_url(submission)
    amount = submission.amount_in_cents.to_f / 100.0
    recipient_cut = amount * 0.9
    recipient_email = submission.submitter.paypal_email

    client.execute(:Pay,
      :action_type     => "PAY",
      :currency_code   => "USD",
      :cancel_url      => "http://session-logix.herokuapp.com/my-studio",
      :return_url      => "http://session-logix.herokuapp.com/submissions/#{submission.id}",
      :feesPayer       => "PRIMARYRECEIVER",
      :receivers       => [
        { :email => "barrypas37@gmail.com", :amount => amount, :primary => true },
        { :email => recipient_email, :amount => recipient_cut, :primary => false }
      ]
    ) do |response|

      if response.success?
        puts "Pay key: #{response.pay_key}"

        # send the user to PayPal to make the payment
        # e.g. https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=abc
        return client.payment_url(response)
      else
        puts "#{response.ack_code}: #{response.error_message}"
      end

    end
    return nil
  end

models/submission.rb

class Submission < ActiveRecord::Base
belongs_to :submitter, :class_name => "User"
belongs_to :project

def price
    sprintf "%.2f", (self.amount_in_cents.to_f/100.0)
end

def price=(val)
    self.amount_in_cents = (val.to_f*100.0).to_i
end

def paid?
    !!self.$payKey
end
end

submissions_controller

def pay
  @submission = Submission.find(params[:id])
  if @submission.project.user_id == current_user.id
    if !@submission.paid?
      redirect_to PayPalAPI.payment_url(@submission)
      return
    end
    flash[:notice] = "You have already paid for this submission"
  else
    flash[:error] = "You are not authorized to view this page"
  end 
end

【问题讨论】:

    标签: ruby-on-rails paypal paykey


    【解决方案1】:

    我意识到 payKey 不能解决我的问题。 payKey 仅用于尝试付款,即使您取消;它会返回一个payKey...

    我需要弄清楚付款成功时实际返回的内容(如确认号码)......以及如何将该号码保存到字符串......

    【讨论】:

      【解决方案2】:

      我希望我能正确理解这个问题。是的,有一种方法,您可以添加一列,例如paypalkey 到您的 Submission 模型。 (你也可以命名为paid,不知道要不要留key)。

      为了做到这一点:

      $ rails generate migration AddPayPalKeyToSubmission paypalkey:string
      $ rake db:migrate
      $ rake db:test:prepare
      

      那么你可以:

      if response.success?
        submission.update_attributes(paypalkey: response.pay_key)
      

      def paid?
         self.paypalkey.present?
      end
      

      从那时起就会知道这个提交有一个贝宝密钥。

      编辑:

      作为免责声明,我之前没有使用 PayPal 的经验,也不知道 paypal 密钥是保密的还是应该以安全的方式存储。

      【讨论】:

      • 它似乎真的接近工作了。我试着把它放在几个地方......但似乎基本上它会将payKey保存到url(这是处理付款所必需的)或变量......当它将它保存到变量时,它会未正确重定向到贝宝网站;但它确实将 payKey 存储在 paypalkey: 变量中,并做我想做的事(即使没有支付)......
      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 2011-06-22
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多