(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 支付的主要内容,如果未能解决你的问题,请参考以下文章