我已经设置了付款(使用php),以便当客户返回success.php文件时(使用IPN监听器在Paypal上进行付款处理后),他们会被添加到具有新会员编号的数据库中,这也是在success.php文件中生成。如果客户以访客身份付费,则流程正常,他们将按原样返回success.php页面。但是,如果客户登录到paypal而不是以访客身份付款,则会将其重定向到Paypal用户帐户页面,而不是返回到我网站上的success.php页面。这意味着已经付款但是他们的会员编号没有创建或添加到数据库中。
有没有办法强制所有客户回到我的成功页面,或者是否应该将创建新成员的代码添加到ipn listener(ipn.php)文件中,这样如果他们没有回来就没关系到成功页面?
这是我在结帐页面中用来设置返回网址的代码。
<form action="<?php echo $paypalURL; ?>" method="post">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" name="business" value="<?php echo $paypalID; ?>">
<!-- Specify a Buy Now button. -->
<input type="hidden" name="cmd" value="_xclick">
<!-- Specify details about the item that buyers will purchase. -->
<input type="hidden" name="item_name" value="<?php echo $item_name; ?>">
<input type="hidden" name="item_number" value="<?php echo $item_number; ?>">
<input type="hidden" name="amount" value="<?php echo $price; ?>">
<input type="hidden" name="currency_code" value="GBP">
<!-- Specify URLs -->
<input type='hidden' name='cancel_return' value='http://example.com/payment-cancelled'>
<input type='hidden' name='return' value='http://example.com/thanks-for-joining/'>
<!-- Display the payment button. -->
<input type="submit" name="submit" class="button" value="Pay Now">
</form>
我应该补充一点,到目前为止我只在沙盒模式下对此进行了测试,所以如果有人知道这是否只是沙盒问题,请告诉我。
更新:进一步测试显示返回网址不再适用于访客结帐。这种情况才开始发生,因为沙箱付款正在通过新的付款页面(附上截图)。
paypal是否更改了请求返回网址的方法?
答案 0 :(得分:1)
我通过几种方式将paypal的付款整合到我的网站中。从我在stackoverflow,paypal网站以及整个网络上阅读的内容来看,最好将所有后端工作都放到你的监听器中。您可以在前端设置一些内容来为客户准备数据库,但使用成功页面获取此信息的主要问题是:
1)如果已知,您的客户只需输入您的成功页面的URL即可
2)客户可以选择不在paypal之后重定向,并且根本不会返回您的网站(这是我能看到的最好的理由)。
3)有时候paypal重定向,但是监听器可能没有收到完成,待定,.etc的paypals响应(这就是为什么他们在重定向之前等待10秒),所以你不希望用户去其他地方或过早地验证。
老实说,将所有代码放在您的监听器中也非常简单,并减少您的成功页面和PayPal之间的错误沟通。至于测试,我只是使用IPN模拟器来测试我的代码,这很好。
至于重定向网址,paypal有一些减少,如果你使用按钮,选项3(我相信)将提供一个覆盖其他的返回URL。我不确定使用沙箱,但请确保您的代码中包含.sandbox.paypal以确保其正常工作(https://gist.github.com/xcommerce-gists/3440401#file-completelistener-php)。
我希望这会有所帮助。