0

PayPalからIPNを機能させようとしていますが、INVALID代わりにIPNが返され続け、VERIFIED何が間違っているのかわかりません。

現在、paypalの開発者サイトのサンプルコードを使用した2つのphpファイルがあります。コードは正常に実行されているようですsandbox。支払いが送金されているのを確認できるように使用しているので、なぜ取得されているのかわかりませんINVALID

私が間違ったことを理解できないので、誰かがコードを見ることができますか?

1. basic_payment.php(支払いデータをpaypalに送信するファイル)

<?php
  require_once ("paypalplatform.php");

  $actionType = "PAY";
  $cancelUrl = "http://[my server details go here]/cancel.php";
  $returnUrl = "http://[my server details go here]/success.php";  
  $currencyCode = "GBP";
  $receiverEmailArray = array( 'seller_15456764326_biz@mail.com' );
  $receiverAmountArray = array( '2' );
  $receiverPrimaryArray = array();
  $senderEmail = "";      
  $feesPayer = "";
  $ipnNotificationUrl = "http://[my server details go here]/ipn.php";
  $memo = "";     
  $pin = "";      
  $preapprovalKey = "";       
  $reverseAllParallelPaymentsOnError = "";        
  $trackingId = generateTrackingID(); 
  $receiverInvoiceIdArray = array( $trackingId );
  $resArray = CallPay ($actionType, $cancelUrl, $returnUrl, $currencyCode, $receiverEmailArray,
                          $receiverAmountArray, $receiverPrimaryArray, $receiverInvoiceIdArray,
                          $feesPayer, $ipnNotificationUrl, $memo, $pin, $preapprovalKey,
                          $reverseAllParallelPaymentsOnError, $senderEmail, $trackingId
  );
  $ack = strtoupper($resArray["responseEnvelope.ack"]);
  if($ack=="SUCCESS")
  {
      if ("" == $preapprovalKey)
      {
          $cmd = "cmd=_ap-payment&paykey=" . urldecode($resArray["payKey"]);
          RedirectToPayPal ( $cmd );
      }
      else
      {
          $payKey = urldecode($resArray["payKey"]);
          $paymentExecStatus = urldecode($resArray["paymentExecStatus"]);
      }
  } 
?>

2. ipn.php(ペイパルの応答をリッスンするファイル)

<?php

    $ipn_post_data = $_POST;

    $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';

    $request = curl_init();
    curl_setopt_array($request, array
    (
        CURLOPT_URL => $url,
        CURLOPT_POST => TRUE,
        CURLOPT_POSTFIELDS => http_build_query(array('cmd' => '_notify-validate') + $ipn_post_data),
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_HEADER => FALSE,
    ));

    $response = curl_exec($request);
    $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);

    curl_close($request);

    $to = "oshirowanen@mail.com";
    $from = "me@desktop.com";
    $subject = "response";
    $message = "<pre>".print_r($status,true)." - ".print_r($response,true)."</pre>\n";

    $header = 'To: Oshirowanen <oshirowanen@mail.com>' . "\r\n";
    $header .= 'From: Me <me@desktop.com>' . "\r\n";

    mail($to,$subject,$message,$header);

?>

エラーメッセージ:

Apacheエラーログ-エラーなし

これが、何かをキャプチャしようとするためにipn.phpに電子メールを追加した理由であり、次のように返されます。

<pre>200 - INVALID</pre>

誰かが私が間違っていることを見ることができますか?

4

2 に答える 2

1

これは私にとっても最初は混乱を引き起こしました。あなたが話しているのは、2種類のIPTNメッセージです。

  1. 最初の質問のURLはipnNotificationUrlで構成されており、トランザクションを仲介するサイトに移動します。これは、パラメータをPaypalに返送しても確認できません。そのURLに自分でパラメータを追加できるのでHMAC、セキュリティのメカニズムを実装できます。

  2. IPTN2つ目は、ソリューションからのもので、設定で有効になっている場合は、お金を受け取るアカウントに送られます。これは、パラメータをPaypalに返送することで確認できます。

両方のメッセージに同じURLを設定すると、両方が取得されますが、Paypalを使用して検証できるのは1つだけです。売り手とサイトが異なるエンティティである場合、つまり、サイトが買い手と売り手の間のトランザクションを仲介するだけの場合、サイトは最初のトランザクションを受け取り、売り手は2番目のエンティティを受け取ります。

于 2012-11-28T16:09:31.610 に答える
1
  1. 基本的なサンプル コード4bを使用して動作するようになりました。

  2. $ipnNotificationUrl = "";自分で追加した値がそこにあったので、基本的なサンプルコードからクリアしました。

  3. サンドボックスでビジネス プロ アカウントの代わりにセラー アカウントを作成し、

  4. 販売者アカウントを設定して、ipn url を有効にします。

  5. IPN リスナーには、次の PHP 5.2サンプル コードを使用しました。

  6. hereで説明されているように、リスナーに 2 行を追加しました。2 行を以下に示します。

  7. ここcacert.pemからサーバーに証明書をダウンロードし、ipn リスナーと同じディレクトリに配置します。

ポイント6で言及された2行:

CURLOPT_SSL_VERIFYPEER => TRUE,
CURLOPT_CAINFO => 'cacert.pem',

サンドボックス ビジネス プロ アカウントでは IPN URL を設定できないのに、セラー アカウントでは設定できる理由がわかりません。

于 2012-08-16T09:48:07.250 に答える