Rails PayPal Checkout SDK在视图中存储请求体,而不是控制器



我正在运行Rails 5.2,目前我的PayPal Checkout设置如下:

视图:

paypal.Buttons({

env: "#{ENV['PAYPAL_ENV']}",
createOrder: async () => {
const response = await fetch('/create_order', {method: 'POST'});
const responseData = await response.json();
return responseData.token;
},

控制器:

def create_order
price = '100.00'

request = PayPalCheckoutSdk::Orders::OrdersCreateRequest::new
request.request_body({
:intent => 'CAPTURE',
:purchase_units => [
{
:amount => {
:currency_code => 'USD',
:value => price
}
}
]
})
begin
response = @client.execute request
order = Order.new(order_params)
order.price_cents = price.to_i
order.token = response.result.id
if order.save
return render :json => {:token => response.result.id}, :status => :ok
end
rescue PayPalHttp::HttpError => ioe
return render html: ERROR_MESSAGE
end
end

但是。。。我宁愿在JavaScript中这样处理请求体:

createOrder: function(data, actions) {

return actions.order.create({

purchase_units: [{
amount: {
value: document.getElementById('payprice').value
}
}]
});

},

我如何设置我的控制器,使其仍然给我PayPal令牌。。。但是它接受了视图中JavaScript的请求主体,而不是现在的设置方式?或如果失败。。。我如何将视图(价格(中的表单数据输入控制器以替换"价格";价格;就在那里?

您似乎希望您的JS代码调用您的Ruby代码来获取订单令牌,并且可能稍后在批准后捕获交易。

您需要这样的服务器端集成模式:https://developer.paypal.com/demo/checkout/#/pattern/server

然后,您需要在服务器上创建两个JS代码可以调用的路由,并将其指向它们。

Preston PHX为我指明了正确的方向,值得称赞。。。但是是我的朋友Gary在两小时前解决了这个小难题:

视图:

paypal.Buttons({

env: "#{ENV['PAYPAL_ENV']}",
createOrder: async () => {
const response = await fetch('/create_order', {method: 'POST',
headers: {'Content-Type': 'application/json'}, 
body: JSON.stringify({"price" : document.getElementById('amount').value})
});
const responseData = await response.json();
return responseData.token;
},

控制器:

def create_order
price = params[:amount]
request = PayPalCheckoutSdk::Orders::OrdersCreateRequest::new
request.request_body({
:intent => 'CAPTURE',
:purchase_units => [
{
:amount => {
:currency_code => 'USD',
:value => price
}
}
]
})

就是这样。这完全回答了如何将价格输入控制器的问题。。。以及如何将价格从表单中获取到javascript中,以便将其发布到控制器。

令我惊讶的是,经过一个月的搜索,我从未看到任何地方提到如何做到这一点。我想有很多应用程序,你会希望用户选择他们要支付的金额和货币。

最新更新