如何仅在交易完成后重定向?
Posted
技术标签:
【中文标题】如何仅在交易完成后重定向?【英文标题】:How can I redirect only after transaction is finalized? 【发布时间】:2020-01-01 05:07:10 【问题描述】:在我使用 paypal 结帐的示例代码中,有一个重定向请求到路由 purchase/complete
。我想确保仅在对/paypal/purchase/complete
的发布请求完成后才请求此路由,以便我可以获取在服务器端创建的orderID
并将其作为get 参数传递给purchase/complete
路由这样它就类似于purchase/complete?orderId=XXXX
。这里的 XXXX 将是收到的data.orderID
客户端:
// Render the PayPal button into #paypal-button-container
paypal.Buttons(
// Set up the transaction
createOrder: function(data, actions)
var payableAmount = $("#finalAmountTotalOrders").attr("amountData");
return actions.order.create(
purchase_units: [
amount:
value: payableAmount
]
);
,
// Finalize the transaction
onApprove: function(data, actions)
return actions.order.capture().then(function(details)
//will redirect user to custom page change values as desired
window.location.replace("/purchase/complete");
// Call your server to save the transaction
return fetch('/paypal/purchase/complete',
method: 'post',
headers:
'content-type': 'application/json',
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
,
body: JSON.stringify(
orderID: data.orderID,
details: details
)
);
);
).render('#paypal-button-container');
编辑:
我想这样做的原因是,虽然我能够创建一个订单并将其存储在我的数据库中,一旦发出/paypal/purchase/complete
发布请求,我不确定我什么时候会做类似电子邮件的事情具有我刚刚创建的订单 ID(数据库行)的客户和商家。尝试在 post 请求中执行此操作会引发错误,因此如果我可以在 /purchase/complete
路由上获取 ID,我可以查询数据库并获取订单详细信息并通过电子邮件发送。任何其他方法都会对我有用。
【问题讨论】:
【参考方案1】:我发现你可以在第一个 actions.order.capture().then
块之后链接另一个 .then
块
onApprove: function(data, actions)
return actions.order.capture().then(function(details)
//will redirect user to custom page change values as desired
// Call your server to save the transaction
return fetch('/paypal/purchase/complete',
method: 'post',
headers:
'content-type': 'application/json',
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
,
body: JSON.stringify(
orderID: data.orderID,
details:details
)
).then((response) =>
window.location.replace("/purchase/complete?paypalOrderId="+data.orderID);
);
);
【讨论】:
以上是关于如何仅在交易完成后重定向?的主要内容,如果未能解决你的问题,请参考以下文章