2011-08-27 83 views
2

我正在使用PayPal 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] => [email protected] 
[amount3] => 35.00 
[recurring] => 0 
[verify_sign] => AkLS8p39eNu16-x1.zjarjEI8cwRAJTbKtOMbm2NinNXnj79aqkEZ5it 
[payer_status] => verified 
[test_ipn] => 1 
[payer_email] => [email protected] 
[first_name] => Test 
[receiver_email] => [email protected] 
[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 
) 

回答

0

尝试回显$_POST['payment_status']。 payment_status是一个由paypal发送给你的ipn脚本的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"; 
} 

只是采取的变量的值在follwoing格式:

// 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']; 

您会看到有一个由名为payment_status的PayPal发布的变量。

尝试将此线路回声$_POST['payment_status'];添加到您的ipn页面,看看它打印了什么,如果打印完成,这意味着您的付款状态已成功完成。

希望这会有所帮助。

+0

我使用的是打印整个数组。 '的print_r($ _ GET)'。如果我打印这个像'print_r($ _ POST)'。它的打印空数组。 –

+0

看到我更新的答案。 – AlphaMale

+0

没有变量叫'$ _POST ['payment_status']'。 ''_POST ['item_name']','$ _POST ['item_number']'等存在但不是'$ _POST ['payment_status']' –

1

看看贝宝

提供的示例脚本,变量...

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

...

10

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

对于订阅,你应该检查

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

其他选项是: subscr_取消,subscr_修改,subscr_payment,subscr_失败,subscr_eot

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

+1

这应该是被接受的答案 - 它是唯一一个能够回答问题的答案 - 从PayPal的文档中不太清楚。 – colincameron