我的目标:处理三个目标: (1)在处理付款之前插入临时表。 (2)使用我的表单操作属性转到paypal等第三方支付处理网站。 (3)从支付登录页面读取$ _POST数据以确定支付是否成功,然后从登台表中获取数据并插入到真实表中。
我希望的实施方式如下:
<form name="demo" method="post" onsubmit="<?php insertStagingData() ?>" action="3rdpartyPaymentProcessingLink"> <input name ="Submit" type"submit" value"Submit"> </form>
我知道Web浏览器执行onsubmit处理程序,当处理程序完成时,浏览器继续执行表单提交。在将表单转发到Web服务器进行php处理之前,我已经将此概念用于java脚本客户端验证。
当两个处理程序都需要服务器端处理时,我不知道是否可以这样做,一个在我的网络服务器上,另一个在第三方网站上。
提前感谢您的建议和帮助!
答案 0 :(得分:1)
PHP是一种服务器端脚本语言。这意味着它在发出页面请求时执行代码。就像onclick浏览器事件一样,不能让网络服务器运行代码。
为了在PHP中实现这一点,您需要在目标表单页面上启动PHP功能。
了解Paypal API以获得更高级的实施。
答案 1 :(得分:1)
no-js解决方案的理论是这样的:
<form name="demo" method="post" action="/scriptOnYourServer.php">
<input name ="Submit" type"submit" value"Submit">
</form>
然后完全在scriptOnYourServer.php中你会先做你想要的任何验证,然后进行临时表插入,然后使用第三方支付PHP API(或宁静的服务或肥皂服务 - 无论什么可用)来处理付款 - 然后你应该成功/失败,你要么显示错误/提供重试,要么从登台转移到真实的表 - 所有这一切都在你的脚本的请求中。
如果您的目标是避免在PHP中编写支付API集成代码,那么您的基本大纲将仅适用于javascript / AJAX,如果您必须执行服务器端操作并仍然将表单操作转到支付处理器,通常是提供表单发布解决方案的支付供应商将允许“返回URL”,他们可以将成功/失败发送到您进行进一步处理的位置,我认为您在步骤3中描述了这一点。
所以更像是:
<form name="demo" method="post" onsubmit="jsFunctionName()" action="3rdpartyPaymentProcessingLink">
<input name ="Submit" type"submit" value"Submit">
</form>
<script type="text/javascript">
function jsFunctionName() {
// js ajax code, probably easiest to use a lib like jQuery for this
// You tell it the url on your server you will post vars to / generate a success/fail response, probably in json is best.
// based on your servers "insert into staging table" success/fail json response you decide whether to proceed or not (allow the submit to 3rd party), because you would not want to proceed if your staging table insert failed I presume
// so this implies you have a way to display errors in JS on this page, or you will be redirecting to a script of yours which would reload the page but display any errors - or you just completely ignore the possibility your staging data insert could fail and let the payment processor deal with it
}
</script>
请参阅http://api.jquery.com/jQuery.ajax/
所以有了一些活动部件 - 你的脚本 - insertStagingData.php - 它的工作是读取发布数据,你应该进行某种验证,然后插入到临时数据库中(确保你使用参数化查询或清理数据,因为你将用户数据转储到数据库中),然后它生成一个json响应,如:
{"success":true}
或
{"success":false}
你需要让PHP使用JSON头 - 所以在这个脚本的末尾你需要做这样的事情:
$response = array("success" => true); // or false depending on if your db insert was successful
header("HTTP/1.1 200 OK");
header('Content-type: application/json');
echo json_encode($response);
然后在jsFunctionName上面的脚本块中,您将从json响应中读取“success”变量并显示错误并返回false或使用preventDefault()来停止提交到第三方脚本,或者如果成功,则允许表单提交发布。
然后,您可以为付款处理器设置一个单独的脚本,以便回发到他们的文档将告诉您他们将向您发布哪些数据的位置,并根据他们的成功/失败,您可以显示错误,或成功,然后移动数据到真实表。
您可能还需要考虑staging / real表应该是SAME表,其中包含payment_success = 0或1之类的列,默认情况下它为0,如果支付处理器发回成功,您只需将记录更新为payment_success = 1。这应该是一个完全独立的表格,这是很好的理由。
这有望帮助您指明正确的方向。祝你好运
答案 2 :(得分:0)
您可以做的是将同一变量$_POST["TODO"]
内的数据发布到javascript / ajax到第二页。在第二页上,您解析数据,然后提交它。可以在其中发布一个带有两个get变量的数组,每个变量都包含自己的表单信息数组。希望这可以帮助。