我在大约3年前实现了一个paypal结账,目前运行良好。现在,我想为一组新项目创建一个新的结帐页面。我从我之前使用的页面复制了代码,并为新项目更新了它。我将新页面设置为使用沙箱进行初始测试。下面的代码是从实际页面中剪切出来的,以便在这里显示。
<!DOCTYPE HTML >
<html>
<head>
</head>
<body>
<div>
<form id='paypal_form' action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="add" value="1" />
<input type="hidden" name="business" value="buyer@test.com" />
<input type="hidden" name="item_name" value="non-member RTV Renewal" />
<input type="hidden" name="amount" value="75.00" />
<input type="hidden" name="custom" value="Id=Joe;fixedName=Joe Smith;pw=1234;email=buyer@google.com;expdate=2024-02-14" />
<input type="hidden" name="currency_code" value="USD" />
<input type="hidden" name="lc" value="US" />
<input type="hidden" name="cancel_return" value="https://www.roundalab.org/Figures_Subscriptions_All/test_renew.htm">
<input type="hidden" name="return" value="https://www.roundalab.org/Figures_Subscriptions_All/success_test.php">
<input type="hidden" name="rm" value="2">
<center>
<div id="add-cart" style="padding:30px;">
<button onClick="document.getElementById('paypal_form').submit();">Click Here To Submit Order To Paypal</button>
</div>
</center>
</form>
</div>
</div>
</body>
</html>代码可以工作,并在paypal沙箱中创建订单。然后它应该去“返回”项目的网址,它确实。问题是贝宝应该返回一堆数据在$_POST中。当返回页面显示时,$_POST是空的。我还显示$_GET,它包含1个字段,这是payer_id。几个问题……
有人知道为什么$_POST中没有数据吗?
有没有一种方法可以让我得到任何类型的错误消息,显示为什么在转到返回项中的url时没有发送POST数据的信息?
我假设这个使用paypal的方法已经被弃用了。有没有什么地方我还能找到使用这个接口的文档?
发布于 2021-09-19 20:54:13
接收沙盒业务账号需要为要返回的任何数据启用Payment Data Transfer。
使用这种从您的站点重定向的纯HTML型(无应用程序接口) PayPal集成,永远不能保证在完成事务后返回。PayPal可能有义务向付款人出示收据,或者他们可能永远不会单击返回,或者他们的浏览器可能会关闭或崩溃。因此,对于任何重要的事情,您都不应该依赖这些返回的数据。它仅用于额外的信息目的。
如果您试图对通过_GET/_POST返回的数据执行任何重要的操作,那么您的集成是有缺陷的。
有了这种仅限HTML的post集成,接收数据的唯一可靠方法就是实现IPN服务,这也是非常古老的。如果您需要对返回的数据做任何重要的事情,那么所有这些都是糟糕的选择。
相反,请使用当前的PayPal检出集成。按照Set up standard payments指南在您的服务器上创建两个路由,一个用于“创建订单”,另一个用于“捕获订单”,即documented here。两个路由都应该只返回JSON数据(不返回HTML或文本)。在第二条路径中,当采集接口成功时,您应该将生成的支付明细存储在您的数据库中(特别是purchase_units[0].payments.captures[0].id,这是PayPal交易ID),并在将返回的JSON转发给前端调用者之前立即执行任何必要的业务逻辑(例如发送确认邮件或预留产品)。
将这两条路线与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
https://stackoverflow.com/questions/69246923
复制相似问题