gpt4 book ai didi

ruby-on-rails - 如何使用 paypal_permissions gem 获取 PayPal 的用户数据和交易详细信息?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:59 24 4
gpt4 key购买 nike

我需要获取交易数据(日期,估值)和用户数据。我可以使用此 gem 进行一些修改,如 question ?
此外,从文档:

For example, if you plan to query PayPal using getBasicPersonalData and getAdvancedPersonalData, you might generate a merchant model like:


rails generate paypal_permissions merchant email:string first_name:string last_name:string full_name:string country:string payer_id:string street1:string street2:string city:string state:string postal_code_string phone:string birth_date:string 
bundle exec
rake db:migrate

我应该使用付款数据传输 (PDT) 还是 TRANSACTION_DETAILS?
这是我将写入数据的地方,但是如何从 PayPal 获取数据?
谁能给我代码示例?

最佳答案

Paypal 自适应 似乎是这样做的方法,这里是我找到的一些文档,希望它有所帮助。

PayPal 自适应与 Rails 3

像往常一样,PayPal 文档非常困惑和杂乱无章,因此我想我会记录我如何设法让 PayPal Adaptive 在市场风格的网站上工作。

警告!

请使用这篇文章作为关于 paypal API 如何与您的 rails 应用程序连接的指南。正如 Jamesw 在下面的评论中指出的那样,我没有创建一种适当的方式来记录每笔交易的所有细节;无疑是法律要求的。所以也许在读完这篇文章后看看他的评论。希望你能找到一种方法来做到这一点

设置

经过一番搜索,我发现现在最好的 gem 是 paypal_adaptive . ActiveMerchant 目前不支持 PayPal Adaptive(有一个 gem 添加了它,但它似乎没有得到维护。)

# Gemfile
gem 'paypal_adaptive'

这个怎么运作

PayPal Adaptive 相对简单,但杂乱的文档可能会让人望而生畏。简单地说,我是这样做的:
  • 在您的配置文件夹中创建 paypal_adaptive.yml 并添加您的详细信息
  • 创建一个资源来处理付款——我创建了一个“购买”资源(模型:购买)
  • 当用户单击购买按钮时,它会调用我在 PurchasesController 中称为“购买”的操作
  • 在“购买”操作中,我首先创建一个新的购买项目(Purchase.new),然后添加一些详细信息,例如 user_id、product_id、金额等。
  • 然后,我在新创建的购买对象 (purchase.pay)
  • 上调用名为“pay”的模型方法。
  • 在我的购买模型中,我定义了“pay”方法,并在其中我最终通过创建它的 Request 类(PaypalAdaptive::Request.new)来使用 paypal_adaptive gem
  • 我将所有想要发送到 PayPal 的必要数据添加到一个散列中,然后调用 Request.pay 方法,传入该数据散列。这会向 PayPal 发出 API 调用,PayPal 会回复此请求成功的确认
  • 如果 API 调用成功,我会将用户重定向到 PayPal 以登录并确认付款
  • 用户付款后,PayPal 会向您指定的 IPN 地址发送一个 IPN(即时付款通知)——我将其路由到我的 PurchasesController
  • 中的一个方法。
  • 在这个方法中,我找到了 Purchase 对象并将其标记为已付款(purchase.paid = true),然后就大功告成了!


  • paypal_adaptive.yml

    here创建一个沙箱帐户(您将需要它)。登录后,转到“创建预配置帐户”。创建两个帐户 - 一个买家和一个卖家。如果您使用链式或并行支付(分给多个人的支付),则创建更多账户。

    单击左侧面板中的 Api Credentials。

    现在使用这些凭据填写您的 paypal_adaptive.yml(也使用我在下面提供的 application_id - 这是 www.x.com 提供的测试 application_id
    development:
    environment: "sandbox"
    username: "platts_xxxxxxxx_biz_api1.gmail.com"
    password: "xxxxxxxxxxxx"
    signature: "xxxxxxx"
    application_id: "APP-80W284485P519543T"

    test:
    environment: "sandbox"
    username: "platts_xxxxxxxx_biz_api1.gmail.com"
    password: "xxxxxxxx"
    signature: "xxxxxxxx"
    application_id: "APP-80W284485P519543T"

    production:
    environment: "production"
    username: "my_production_username"
    password: "my_production_password"
    signature: "my_production_signature"
    application_id: "my_production_app_id"

    创建 Controller 操作来处理购买请求

    在这里,您只需要支付的金额和您希望这笔钱转到的电子邮件列表。所以写下你的逻辑来解决这个问题,然后调用 PayPal 来设置购买。
    pay_request = PaypalAdaptive::Request.new
    data = {
    "returnUrl" => return_url,
    "requestEnvelope" => {"errorLanguage" => "en_US"},
    "currencyCode" => "USD",
    "receiverList" =>
    { "receiver" => [
    {"email" => "platts_xxxxxxxx_biz@gmail.com", "amount"=> amount}
    ]},
    "cancelUrl" => cancel_url,
    "actionType" => "PAY",
    "ipnNotificationUrl" => ipn_url
    }

    #To do chained payments, just add a primary boolean flag:{“receiver”=> [{"email"=>"PRIMARY", "amount"=>"100.00", "primary" => true}, {"email"=>"OTHER", "amount"=>"75.00", "primary" => false}]}

    pay_response = pay_request.pay(data)

    if pay_response.success?
    # Send user to paypal
    redirect_to pay_response.approve_paypal_payment_url
    else
    puts pay_response.errors.first['message']
    redirect_to "/", notice: "Something went wrong. Please contact support."
    end

    处理 IPN 调用

    我将我的 IPN 调用从 PayPal 路由到此方法:
    def ipn_notification
    ipn = PaypalAdaptive::IpnNotification.new
    ipn.send_back(request.raw_post)

    if ipn.verified?
    logger.info "IT WORKED"
    else
    logger.info "IT DIDNT WORK"
    end

    render nothing: true
    end

    不幸的是,如果您在本地主机上,PayPal 无法向您发送 IPN,因此测试整个过程存在问题。 Ryan Bates 的解决方案是使用 curl 来模拟 IPN 请求。但是,正如您在上面的代码中看到的,我们向 PayPal 发出另一个请求,确认 IPN 是真实的。因此,即使 curl 发送假 IPN,我们也会遇到问题。我现在要去寻找解决方案,但如果您有任何想法,请发表评论。

    关于ruby-on-rails - 如何使用 paypal_permissions gem 获取 PayPal 的用户数据和交易详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11408674/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com