-1

なぜこれが機能しないのか、過去 12 時間ずっと調べていました。誰もが IPN システムで使用する必要がある最新の更新されたコードを見つけました。POST ヘッダーがHTTP/1.0ではなくHTTP/1.1になった理由がわからない場合は、 https : //www.x.com/content/bulletin-ipn-and-pdt-scripts-and-http を参照してください。 -1-1

このスクリプトのどのブロックでも、log.txt にメッセージを配置する必要がありますが、それも行われません。

誰でも提供できる洞察は素晴らしいでしょう。

<?php 

  //read the post from PayPal system and add 'cmd'
  $req = 'cmd=_notify-validate';

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

  //post back to PayPal system to validate (replaces old headers)
  $header .="POST /cgi-bin/webscr HTTP/1.1\r\n";
  $header .="Content-Type: application/x-www-form-urlencoded\r\n";
  $header .="Host: www.paypal.com\r\n";
  $header .="Connection: close\r\n";

  $fp = fsockopen ('ssl://paypal.com', 443, $errno, $errstr, 30);
  //

  //error connecting to paypal
  if (!$fp) {
    file_put_contents('log.txt', 'httperror');
  }

  //successful connection    
  if ($fp) {
    fputs ($fp, $header . $req);

    while (!feof($fp)) {
      $res = fgets ($fp, 1024);
      $res = trim($res); //NEW & IMPORTANT

      if (strcmp($res, "VERIFIED") == 0) {
        if ($_POST["payment_status"] == "Completed") {
          $link = mysqli_connect("localhost", "removedforsecurity", "removedforsecurity", "removedforsecurity");
          if (!$link) {
            printf("Can't connect to localhost. Error: %s\n", mysqli_connect_error());
            exit();
          }

          $username = $_POST["custom"];
          $date = date('Y-m-d');

          /* update rows */
          mysqli_query($link, "UPDATE users SET access='user' WHERE username='myusername'");

          file_put_contents('log.txt', 'veri');
          /* close connection */
          mysqli_close($link);
        }
      }

      if (strcmp ($res, "INVALID") == 0) {
        file_put_contents('log.txt', 'failed');
      }
    }
    fclose($fp);
  }

?>
4

1 に答える 1

0

これらのIPN トラブルシューティングの手順をご覧ください。これらが役立つ場合があります。また、PayPal アカウントの IPN 履歴を調べて、IPN が実際に送信されていることを確認してください。また、正常に送信されたかどうか、または失敗して再試行中であるかどうかも表示されます。IPN履歴メッセージの詳細内に、サーバーが返すもののステータスコードもあるはずです. PayPal は 200ok の応答を期待しています。

于 2013-05-02T13:44:47.347 に答える