php - 如何在不干扰 PayPal 智能按钮的情况下向服务器发送表单
问题描述
我正在尝试在 PayPal 付款处理获得批准后发送订单确认电子邮件。我认为问题在于,当我提交表单时,页面会刷新,而当 PayPal 付款被批准时,它也会刷新页面。PHP 代码可以很好地满足我目前的需要,PayPal 智能按钮也是如此,主要问题是它们只能单独工作,我需要两者都执行。我一直在寻找一段时间,并没有找到解决这个问题的具体方法,但也许我只是没有看到它们。
我曾想过使用 AJAX 来提交我的表单而无需刷新,但我承认我对这类东西还很陌生,而且我添加的代码似乎并没有太大的不同。
onApprove: function (data, actions) {
// Get the order details
return actions.order.get().then(function (orderDetails) {
$(function () {
$( "#ppCheckoutForm" ).on('submit', function (event) {
event.preventDefault();
$.ajax({
url: '/OrderConfirmation.php',
type: 'post',
data: $('#ppCheckoutForm').serialize(),
success: function () {
alert('Form was submitted');
}
});
});
});
document.getElementById("ppCheckoutForm").submit();
document.querySelector('#confirm-button')
.addEventListener('click', function () {
return actions.order.capture().then(function () {
解决方案
关于上面的代码,在 onApprove 中,您应该立即运行ajax 函数,而不是将事件处理程序绑定到提交按钮。
如果您要将这样的事件处理程序绑定到提交按钮(不同的、单独的解决方案,这不是您所需要的),那么该按钮将需要一些东西来防止其默认的重定向操作。
最好的解决方案是在 ajax/fetch 调用中提交所有数据,并让此操作本身触发服务器端的捕获。
以下是用于审批流程的 JavaScript 代码:https ://developer.paypal.com/demo/checkout/#/pattern/server
您的服务器上需要两条路由,一条用于“设置事务”,一条用于“捕获事务”,记录在此处。
当您的 JavaScript 执行“捕获事务”时,您将发送表单数据以及要捕获的 orderId,并且当且仅当它能够成功捕获时,您的服务器应该将该表单数据保留在您的数据库中(通过 API)。
推荐阅读
- javascript - Form in HTML with button assigns the value of the last button, no matter which one was selected
- vue.js - Vuetify dialog and vue-signature-pad draw problems
- numpy - how to speed up numpy.dot for a neural network? (matrix with about 4.5 million elements as result)
- c# - Interactive game, card won't reveal other card when flipped for UWP application
- javascript - How to store cloned form values in array
- go - Detect Go routine interruption
- javascript - 快递服务器配置问题,公共目录
- phpstorm - 如何在远程服务器上使用 Xdebug 仅触发我的请求
- php - 为菜单生成链接时传递一些数组的函数
- r - Legends not visible in Line Area Graph