我正在构建一个页面,其中包含一些将通过paypal
销售的商品。首先我做了固定价格的通用按钮,点击后你重定向到贝宝页面,你的值如下:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top" class="payPalBtn">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="test@gmail.com">
<input type="hidden" name="item_name" value="test">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/he_IL/IL/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
但这是非常危险的,因为客户可以更改金额值。。。这可能会带来一些问题。所以我选择使用他们的API-这意味着,在服务器端发送一些值,如价格,金额。。。ang返回token id
。之后再发送一些数据,最后付款被转移,所有的东西都被关闭了。其中一个参数是:$PayPalReturnURL
,这是成功后的页面结果,用户重定向到.
现在,在我这样做并验证了支付通行证后,我想启动一个私人程序,该程序可以执行一些私人功能(每次运行都要花费我的钱),而在支付通行证之后,该程序只能执行一次。例如,我重定向的页面是:payment.php,在那里我只需启动我的功能。
问题是:我如何才能确保用户不会直接进入那个PHP地址并自动启动这个函数。我有什么选项可以保证这个函数在贝宝重定向到我之后只运行一次。
您正在使它变得复杂。以下是我如何进行贝宝集成。
与输入价格单独发送交易号在一个隐藏字段如下。
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="tx_id" value="1234">
在生成此表单之前,插入一个数据库记录,其中事务的状态为挂起,如下所示。
tx_id = 1234
amount = 10.00
tx_status = 0 // pending
当交易完成时,贝宝将返回金额、您的tx_id和交易状态。使用SELECT查询,您可以检查返回的金额是否与数据库表中的金额相同。
SELECT amount FROM table_name WHERE tx_id = 1234
然后,如果正确,请将tx_status更改为payed。否则就把它标记为欺诈。
为了保护您的按钮,您可以通过Payments Standard设置托管按钮,或者如果您熟悉使用web服务,您可以集成Express Checkout API。
至于订单后的自动处理,你不想在退货URL上这样做。即使在您的PayPal帐户中启用了自动退货功能,也不能保证该页面会被点击。如果买家在重定向发生之前关闭了他们的浏览器,你的代码将永远不会运行,你的自动化也将无法正常工作。
为了避免这种情况,并防止人们直接访问您的退货URL,您可以使用即时付款通知。无论用户是否返回您的网站,每次付款都会触发这一点,您可以使用PayPal验证数据,以确保数据确实来自他们,这样人们就不会试图偷偷使用您的IPN脚本。