2012-02-02 9 views
0

私は完全に迷っています。私は「誤った情報を得ている」と思うかもしれませんが、できる限り私の状況を説明しようとします。POST情報によるPaypal取引の確認

アイデア

  • 私たちは、クレジットを購入するユーザーのためのフォームを持っています。クレジット番号 ppボタンをクリックします。
  • ボタンをクリックすると、トランザクションログ情報が に設定され、保留状態に設定されています(正常に動作しています)。
  • 有効な投稿が返されたら、paypalフォームを提出し続けます(同様に動作します)。
  • ユーザーはpaypalページにリダイレクトされ、支払いが行われます(これまでのところ良い状態です)。
  • 支払いが完了した後、彼らは返品をクリックし、「成功」ページ(まだ動作中)に向けられます。私は、データが「真」頁データで検証し、トランザクションログ(HOW !?)
を更新
  • (それは粘着性が取得する場所ああ、ええと、ここにある)、PPからのPOSTデータを取り込み、このページに到達したとき
  • 私は(それが偽装されていなかったことを確認)私が最初に受け取ったデータを確認するために戻ってPayPalにポストを行うにはIPNを使用するつもりだった私は

    を試してみた&を言われてる何

    、しかし、私はコストのために、私はIPNを使用することはできません....

    私は試しに大きなステップを逃したか、または私は何もしていないので、ISNTはまったく動作していないことを除いて、PDTを使うつもりでした右。ここで私はどこにいるのですか?直接リンク先、スパーク(CI用)を使ってデータを設定したり、ペイパルリンクなどに電話したりなど、十数種類のものを試しました...

    私は、ここでは、他の半ダースのフォーラムでは、すべてのペイパルの質問を見て何も起こっているように見えることはできません。

    正常にPayPal取引のPOSTデータを確認して、IPNについて誤解されている場合は、ドキュメントを見て原因がわかりません私は言われたことも、実際に私の解決策を見つけることもできません。

    私は愚かな気がします、助けてください。

  • +0

    "私は、費用のために" ipnサーバー "をセットアップする必要があると言われています。私たちはIPNを使用できません。"まったく新しいサーバーは必要ありません。あなたは他のすべてがホストされている通常のWebサーバーを使用することができます。 – ceejayoz

    +0

    それは私が思ったことですが、管理者が理解できないものをコーディングしないようにするのはちょっと束の間だと思っていましたが、彼は正規のプロトコールを理解していないようです。ソリューション – SpYk3HH

    +0

    POSTデータを検証する[IPN Listener](https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation)のPayPalサンプルコード。 – Josh

    答えて

    0

    最後に、IPNの情報の更新により正しく動作しました。私はこれを実行notifyTest機能に続いて

    <input type="hidden" name="notify_url" value="<?= site_url('payment/notifyTest'); ?>"> 
    

    : 私のソリューションは、私のフォームに次の行を追加したWEが見られるよう

    $pDat = $this->input->post(NULL, TRUE); 
        $isSandBox = array_key_exists('test_ipn', $pDat) && 1 === (int)$pDat['test_ipn'] ? TRUE : FALSE; 
        $verifyURL = $isSandBox ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr'; 
        $token = random_string('unique'); 
    
        $request = curl_init(); 
        curl_setopt_array($request, array 
        (
         CURLOPT_URL => $verifyURL, 
         CURLOPT_POST => 0, 
         CURLOPT_POSTFIELDS => http_build_query(array('cmd' => '_notify-validate') + $pDat), 
         CURLOPT_RETURNTRANSFER => 0, 
         CURLOPT_HEADER => 0, 
         CURLOPT_SSL_VERIFYHOST => 0, 
         CURLOPT_SSL_VERIFYPEER => 0, 
         CURLOPT_CAINFO => 'cacert.pem', 
        )); 
    
        $response = curl_exec($request); 
        $status = curl_getinfo($request, CURLINFO_HTTP_CODE); 
    
        curl_close($request); 
    
        if($status == 200 && $response == 'VERIFIED') { 
         // SUCCESS 
         $data = array (
          ... => ... 
         ); 
         $this->db->insert('transactions', $data); 
        } 
        else { 
         // FAILED 
         $data = array (
          ... => ... 
         ); 
         $this->db->insert('transactions', $data); 
        }; 
    

    重要な違いは - YOUR CURLを設定していない>はTO VARS真または偽 真実と偽りの場合は1、愚かではありますが、それはうそです!!!

    2

    ユーザーがPayPalボタンをクリックしてPayPalに行くと、取引が完了すると、選択したURLにIPN POSTが送信されます。したがって、別のWebサーバーを持つ必要はありません。

    IPNリクエストが届くと、PayPalは、自分が作成したPOST全体を、すべてのフィールドを含めて、正確な順序で再送信して、「VERIFIED」という単語を返します'または' INVALID '確認されたら、txnログを保留中から検証済みに切り替えるために必要な処理を実行します。また、ボタンに含める情報(ボタンは実際はformなので、独自のフィールドを含めることができます)がPOSTに含まれています。あなたのトランザクションにマッピングするための「トランザクションID」や他の識別子を保持するのに便利です。

    IPNが失敗した場合は、数日間、n + 4分単位で再送信されます(nは最後の時間(4分後、8分後、次の12分後など)です。