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

时间:2016-10-15 01:07:37

标签: ruby-on-rails paypal braintree

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

根据Braintree Docs for PayPal client-side implementation(JS v2 SDK),我将有一个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中为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 个答案:

答案 0 :(得分:3)

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

Braintree的javascript SDK会生成新的payment_method_nonce,但它不会自动将其发送到您的服务器。这个过程的一部分由你决定。您可以通过实施onPaymentMethodReceived callback`

来访问和使用新的nonce
<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等端点设置帖子。您还可以在用户稍后提交的表单中设置nonce,然后在提交表单时从表单中选取nonce。