(Rails) 使用 Braintree v.zero SDK 进行 PayPal 支付

Posted

技术标签:

【中文标题】(Rails) 使用 Braintree v.zero SDK 进行 PayPal 支付【英文标题】:(Rails) PayPal payment with Braintree v.zero SDK 【发布时间】:2017-02-24 12:34:10 【问题描述】:

我正在开发一款 Rails 应用程序,该应用程序将具有可修改的购物车、可选择的运费,并通过简单的 PayPal 付款完成。根据 PayPal 开发者文档,Express Checkout 似乎是合适的,Rails 的一个简单方法可能是 Braintree 的 v.zero SDK。

根据PayPal client-side implementation(JS v2 SDK)的 Braintree Docs,我将有一个用于 PayPal 按钮的容器和一个包含所有选项的 javascript 和一个提供的 Client-Token:

<div id="paypal-container"></div>

<script type="text/javascript">
  braintree.setup("CLIENT-TOKEN-FROM-SERVER", "custom", 
    paypal: 
      container: "paypal-container",
    ,
    onPaymentMethodReceived: function (obj) 
      doSomethingWithTheNonce(obj.nonce);
    
  );
</script>

提交这个按钮应该让我从braintree获得一个payment_method_nonce,调用一个服务器端方法来填写必要的支付信息(payment_method_nonce、金额等),最后完成交易。比如在server-side implementation docs for ruby​​:

def checkout
    result = Braintree::Transaction.sale(
      :amount => "10.00",
      :payment_method_nonce => params[:payment_method_nonce],
      :order_id => "Mapped to PayPal Invoice Number",
      :options => 
        :paypal => 
          :custom_field => "PayPal custom field",
          :description => "Description for PayPal email receipt",
        ,
      
    )
    if result.success?
      "Success ID: #result.transaction.id"
    else
      result.message
    end
  end

我想,我基本上了解这个过程,但我不明白 javascript 如何路由到我的服务器端方法。拥有一张信用卡表格,我可以定义一个要发布到的目标,例如/checkout,并将/checkout 路由到我的结帐方法。但仅使用 PayPal,如何从我的 PayPal 按钮路由到我的结帐方式?

谢谢

【问题讨论】:

【参考方案1】:

全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support。

Braintree 的 javascript SDK 会生成一个新的payment_method_nonce,但它不会自动将其发送到您的服务器。该过程的这一部分由您决定。您可以通过实现onPaymentMethodReceived callback` 来访问和使用新的随机数:

<script type="text/javascript">
  braintree.setup("CLIENT-TOKEN-FROM-SERVER", "custom", 
    paypal: 
      container: "paypal-container",
    ,
    onPaymentMethodReceived: function (obj) 
      // you may submit the nonce to your server here
      doSomethingWithTheNonce(obj.nonce);
    
  );
</script>

该函数doSomethingWithTheNonce 是一个占位符,表示您将在此处处理随机数。正如您所想的那样,您可以在/checkout 之类的端点上设置一个帖子。您还可以在用户稍后提交的表单中设置随机数,然后在提交时从表单中提取随机数。

【讨论】:

以上是关于(Rails) 使用 Braintree v.zero SDK 进行 PayPal 支付的主要内容,如果未能解决你的问题,请参考以下文章

Braintree 支付网关 - 获取客户的订阅详情

生成 Braintree 收据

Braintree v2 托管字段卡空间和 v3 托管字段

如何使用 Braintree.js 与 Braintree 支付网关集成? [关闭]

如何使用 Braintree 保存卡片详细信息?

Braintree 的沙盒 PayPal 集成(使用 JS 和 PHP)