我正在开发一款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按钮路由到我的结账方式?
由于
答案 0 :(得分:3)
完全披露:我在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
等端点设置帖子。您还可以在用户稍后提交的表单中设置nonce,然后在提交表单时从表单中选取nonce。