【问题标题】:How to check if a paypal payment is completed or not?如何查看paypal支付是否完成?
【发布时间】:2011-08-27 06:02:52
【问题描述】:

我使用的是贝宝 IPN。现在一切正常。我得到VERIFIED 状态。但是如何检查payment_status 是否为completed?谢谢

if (strcmp ($res, "VERIFIED") == 0) {

// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
 }

没有这样的变量称为$_POST['payment_status']

Array
(
[txn_type] => subscr_signup
[subscr_id] => I-LDEC0BD3UYL7
[last_name] => User
[residence_country] => US
[mc_currency] => USD
[item_name] => Alice's Weekly Digest
[business] => savife_1314264698_biz@gmail.com
[amount3] => 35.00
[recurring] => 0
[verify_sign] => AkLS8p39eNu16-x1.zjarjEI8cwRAJTbKtOMbm2NinNXnj79aqkEZ5it
[payer_status] => verified
[test_ipn] => 1
[payer_email] => savife_1314427849_per@gmail.com
[first_name] => Test
[receiver_email] => savife_1314264698_biz@gmail.com
[payer_id] => SWCUEE3GNET7A
[reattempt] => 1
[item_number] => DIG Weekly
[subscr_date] => 00:02:52 Aug 27, 2011 PDT
[charset] => windows-1252
[notify_version] => 3.2
[period3] => 1 M
[mc_amount3] => 35.00
[auth] => _XXXXXXX   [form_charset] => UTF-8
)

【问题讨论】:

    标签: php paypal-sandbox


    【解决方案1】:

    您没有看到“payment_status”变量的原因是 Paypal 未在订阅响应中包含该变量。

    对于订阅,您应该检查

    if ($_POST['txn_type'] == "subscr_ signup") {
      //do whatever
    }
    

    其他选项包括: subscr_cancel, subscr_ modify, subscr_payment, subscr_ failed, and subscr_eot

    有关详细信息,请参阅此页面上的订阅变量摘要: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables#id091EB0901HT

    【讨论】:

    • 这应该是公认的答案——它是唯一能解决问题的——这在 PayPal 的文档中不是很清楚。
    【解决方案2】:

    查看 paypal 提供的示例脚本

    ...

    if (strcmp ($res, "VERIFIED") == 0) {
            if ($_POST['payment_status'] != "Completed") {
    

    ...

    【讨论】:

      【解决方案3】:

      尝试回显$_POST['payment_status']。 payment_status 是一个 ipn 变量,由 paypal 发送到您的 ipn 脚本。如果付款完成,它将打印完成,否则不会。

      以下代码显示IPN的有效性,而不是付款。

      if (strcmp ($res, "VERIFIED") == 0) {
      // IPN VERIFIED
      }
      else if (strcmp ($res, "INVALID") == 0) {
      // IPN INVALID
      }
      

      编辑 1:

      $_POST 数组在这里拆分,不需要自己拆分:

      foreach ($_POST as $key => $value) {
      $value = urlencode(stripslashes($value));
      $req .= "&$key=$value";
      }
      

      只需采用以下格式的变量值:

      // assign posted variables to local variables
      $item_name = $_POST['item_name'];
      $item_number = $_POST['item_number'];
      $payment_status = $_POST['payment_status'];
      $payment_amount = $_POST['mc_gross'];
      $payment_currency = $_POST['mc_currency'];
      $txn_id = $_POST['txn_id'];
      $receiver_email = $_POST['receiver_email'];
      $payer_email = $_POST['payer_email'];
      

      您会看到 paypal 发布了一个名为 payment_status 的变量。

      尝试将此行 echo $_POST['payment_status']; 添加到您的 ipn 页面,看看它打印了什么,如果打印完成,则表示您的付款状态已成功完成。

      希望这会有所帮助。

      【讨论】:

      • 我正在使用打印整个数组。 print_r($_GET)。如果我像print_r($_POST) 这样打印。它的打印空数组。
      • 没有名为$_POST['payment_status'] 的变量。 $_POST['item_name']',$_POST['item_number']'等存在但不存在$_POST['payment_status']
      • 您是否尝试过呼应它。我正在使用这个变量。请附和。它存在。它是非常重要的变量之一。
      • 是的,我尝试回应它。我没有收到任何消息。所有其他变量都存在...请帮助我,我被卡住了
      • 这很奇怪。在此处发布您的脚本。我会检查的。
      猜你喜欢
      • 2011-07-29
      • 2014-02-21
      • 2014-01-18
      • 2015-08-14
      • 1970-01-01
      • 2021-02-23
      • 2020-08-13
      • 2021-04-26
      • 2016-02-21
      相关资源
      最近更新 更多