0

埋め込み支払いで処理されたアダプティブ支払いがあります。すべて正常に動作します (購入は処理されます) が、私の IPN リスナーには通知されません。私は PayPal が提供する IPN テスト ツールを使用しました。リスナーはそこから電話を受けますが、埋め込み支払いからではありません。

これは、paykey で送信される情報です。

$bodyparams = array (
 "requestEnvelope.errorLanguage" => \"en_US",         
 "actionType" => "PAY",   
 "cancelUrl" => "http://mysite.com/cancel",       
 "returnUrl" => "http://mysite.com/buying",       
 "currencyCode" => "USD",          
 "paymentType" => "DIGITALGOODS",     
 "ipnNotificationUrl" => 'http://mysite.com/listener.php',    
 "trackingId" => $rows['key'],    
 "memo" => 'You are buying ' . $title . ' from ' . $paypal . '',
 "receiverList.receiver.email" => $paypal,             
 "receiverList.receiver.amount" => $price
);

そして、これは私のリスナー コードです (PayPal Web サイトから取得)。

<?php
  $req = 'cmd=' . urlencode('_notify-validate');

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

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr');
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: https://www.sandbox.paypal.com'));
  $res = curl_exec($ch);
  curl_close($ch);
  $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'];

  if (strcmp ($res, "VERIFIED") == 0) {
    $myFile = "log.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    $stringData = "logged ' . $txn_id . '\n";
    fwrite($fh, $stringData);
    fclose($fh);
  }
  else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
  }
?>

繰り返しになりますが、PayPal IPN テスト ツールはリスナーが機能することを証明していますが、実際の支払いがリスナーに通知されないのはなぜでしょうか?

4

1 に答える 1

1

ライブ コードでサンドボックス URL を使用していないことを確認してください。

PayPal ログインに移動していない場合は、[履歴] > [IPN 履歴] に移動します。

IPN の送信先を確認するには。

メッセージ ID をクリックします。

通知 URL を確認し、HTTP 応答コードが 200 であることを確認し、最後に、IPN メッセージに期待するすべてのパラメーターが含まれていることを確認します。

IPN 履歴画面に戻ると、必要に応じて IPN を再送信できます。

于 2012-08-03T13:14:53.440 に答える