【问题标题】:PayPal POST variables not working (PHP)PayPal POST 变量不起作用(PHP)
【发布时间】:2013-08-07 00:01:43
【问题描述】:

我正在尝试在我正在开发的网站上设置一个 PayPal“订阅”支付按钮。这是一个发送到 PayPal 的表单,然后在交易成功完成后将用户发送回返回 URL。我目前正在使用 PayPal Sandbox 进行测试。问题是 POST 变量没有被发送到感谢页面(这是一个 PHP 页面仅供参考)。

我需要这个的原因是我正在更新数据库,如果用户成功完成交易,它需要查看返回的变量,确定用户已付款,然后更新用户在MySQL 数据库自动。

在过去的两周里,我一直与 PayPal 代表保持联系,但他们似乎无法提供帮助。我还研究了整个网络和 Stack Overflow,目前的答案似乎都没有解决我的问题。这是我尝试过的:

  • 我首先尝试使用 GET 变量(例如,但这种方式不支持 GET 变量。它导致返回 URL 在其末尾返回一个疯狂的变量字符串,而不是我的 ID 变量(它就像一个字符集和其他东西)。PayPal 代表解释说我需要使用的变量是 POST 变量。

  • 我已经在三个不同的服务器/主机包上设置了页面,以查看主机是否是问题所在。我使用的三个是 GoDaddy、JustHost 和 123-reg(英国)。没有工作。我认为主机会很好,因为 PayPal 无处不在,但我仔细检查以确定。我知道 .htaccess 文件并没有阻止 POST 变量工作,因为我已经使用了这个站点上表单中的 PHP 邮件函数,所以一切正常。

  • 我尝试了 $_REQUEST 变量,而不是这里建议的 $_POST 变量:Paypal Hidden variables doesn't work

这是用于两页的代码。也可以随意访问这些页面来自己测试问题,看看这不起作用:

页面

http://www.miller-media.com/sites/paypal_test/test_form.php

代码

<html>
<head>
</head>
<body>
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" id="paypal_form" method="post" target="_top">
        <input type="hidden" name="cmd" value="_xclick-subscriptions">
        <input type="hidden" name="item_name" value="Test Monthly Subscription">
        <input type="hidden" name="business" value="mbizz@paypal.com">
        <input type="hidden" name="a3" value="7.00">
        <input type="hidden" name="p3" value="1">
        <input type="hidden" name="t3" value="M">
        <input type="hidden" name="src" value="1">
        <input type="hidden" name="sra" value="1">
        <input type="hidden" name="no_note" value="1">
        <input type="hidden" name="custom" value="20130731 it worked">
        <input type="hidden" name="cancel_return" value="http://www.miller-media.com">
        <input type="hidden" name="return" value="http://www.miller-media.com/sites/paypal_test/mmiller.php">
        <input type="hidden" name="rm" value="2">
        <input type="submit">
    </form>
</body>
</html>

还有返回网址

页面

http://www.miller-media.com/sites/paypal_test/mmiller.php

代码

<html>
<head>
</head>
<body>
    TEST FOR MILLER MEDIA

    THIS IS FOR POST 
    <?php
        echo ("Custom = " . $_POST['custom']);
        echo ("Transaction = " . $_POST['txn_id']);
        echo ("First name = " . $_POST['first_name']);
        echo ("Last name = ". $_POST['last_name']);
    ?>


</body>
</html>

上面的这段代码是 PayPal 代表提供给我的(我的代码在我第一次设置时略有不同)。如果您完成该过程(使用 PayPal 沙盒帐户),则感谢页面 (mmiller.php) 上不会显示任何变量。

这是 PayPal 代表提供给我的一条消息,它表明他让变量正常工作。看起来他是在本地测试,所以我不确定这是否与此有关:

Here is the screenshot http://i.imgur.com/zno0UkK.jpg . But I just noticed I was using a Buy Now button but your button is a subscription.

The txn_id is not returned for subscription (that is by design) . Please see below for variables that are returned. https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables#id091EB0901HT

This is what I get with subscription signup http://i.imgur.com/BOrw1Hn.jpg . A txn_id is not returned.

Here is also the complete POST data :

POSTDATA=txn_type=subscr_signup&subscr_id=I-0RSGVWA904CF&last_name=Connor&residence_country=GB&mc_currency=USD&item_name=StormAware+Monthly+Subscription&business=mbizz%40paypal.com&amount3=7.00&recurring=1&address_street=1+Main+Terrace&payer_status=verified&payer_email=UKrealPro%40paypal.com&address_status=confirmed&first_name=John&receiver_email=mbizz%40paypal.com&address_country_code=GB&payer_id=UXPBYWUW8ZDHA&address_city=Wolverhampton&reattempt=1&payer_business_name=John+Connor%27s+Test+Store&address_state=West+Midlands&subscr_date=16%3A37%3A38+Aug+05%2C+2013+PDT&address_zip=W12+4LQ&custom=20130731+it+worked&charset=windows-1252&period3=1+M&address_country=United+Kingdom&mc_amount3=7.00&address_name=John+Connor%27s+Test+Store&auth=AOgsYFMneBuxymkc0UoZ6OI6D-BXCQmWRz5xyilJR1-7uCvNI1kB Om1eHPbogzB7YnoOUIAZZiFOrx0ZcUgN-gQ&form_charset=UTF-8

任何帮助将不胜感激,因为这让我在过去几周感到沮丧。提前谢谢!

【问题讨论】:

  • 交易详情进入IPN页面,而不是返回页面。
  • IPN 页面是在 HTML 表单中设置的变量吗? PayPal 代表甚至没有提到 IPN,所以我不确定它是否需要?
  • 您应该阅读 IPN,这是该过程的重要组成部分
  • 我是。我只是想知道代表如何能够在不使用 IPN 的情况下让变量成功发布在他的屏幕截图上。

标签: php post paypal paypal-sandbox


【解决方案1】:

如果您希望退货页面中包含 POST 数据,您需要设置 PDT(支付数据传输)。

不建议更新数据库或任何您需要确保发生的事情,因为即使启用了自动返回,也不能保证用户实际上会回到您的站点,您无疑会最终得到未正确更新的交易。

这就是为什么推荐使用 IPN。无论用户是否返回您的网站,都会触发 IPN。

保持感谢页面简单,并在 IPN 内完成所有付款后处理。

【讨论】:

  • 太好了,谢谢。我查找了 IPN 并将数据发送到 HTML 表单中的 notify_url 参数。尽管有一点延迟,但它似乎工作正常(这不是立即更新;有时需要一两分钟)。我已经读到延迟只是系统的一部分,所以我们将使用它。谢谢安德鲁!
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2012-05-22
  • 2013-11-10
相关资源
最近更新 更多