1

私はペイパル IPN を使用しています。今、すべてが正常に動作しています。そして、私はVERIFIEDステータスを取得しています。しかし、チェックする方法payment_statuscompletedありますか?ありがとう

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
)
4

3 に答える 3

9

「payment_status」変数が表示されない理由は、Paypal がサブスクリプションの応答にそれを含めていないためです。

サブスクリプションについては、チェックする必要があります

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

その他のオプションは次のとおりです。subscr_cancel、subscr_modify、subscr_payment、subscr_failed、subscr_eot

詳細については、このページのサブスクリプション変数の概要を参照してください: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables#id091EB0901HT

于 2011-12-03T00:22:59.473 に答える
1

ペイパルが提供するスクリプトの例を見てください

...

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

...

于 2011-08-27T06:49:44.297 に答える
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";
}

次の形式で変数の値を取得するだけです。

// 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

この行のエコー$_POST['payment_status'];をipnページに追加して、何が印刷されるかを確認してください。印刷が完了した場合は、支払いステータスが正常に完了したことを意味します.

お役に立てれば。

于 2011-08-27T06:53:43.890 に答える