更新1:
PHPでのPaypalの即時支払い通知の使用 に関するこのチュートリアルによると、特定のルーターポートが開かれていない限り、PaypalはローカルにホストされているWebサイトにアクセスできません。これは、ウェブサイトがIPN
に関するものか、すべてのPaypal APIに当てはまりますか?
元の質問:
私のラップトップでは、LAMP
環境をセットアップしています。http://localhost
公開前にウェブサイトを作成します。
新しいプロジェクトでは、Paypal APIを使用する必要があります。ラップトップをインターネットに接続した場合、ローカルホストを使用してPaypal APIをテストできますか?または、自分のWebサイトを他の場所のLAMPホストにアップロードする必要がありますか?
おそらくあなたは考えているでしょう、なんてばかげた質問なのか、それがうまくいくかどうか確かめてみてください。私はそれを試してみましたが機能していません。次のステップに進む前にこの質問を除外したいと思いました。
うまくいくはずです。私は昨年Paypalと支払いの統合を行いましたが、問題なくlocalhostで動作しました。
Paypalサンドボックスを開発に使用していますか? https://developer.Paypal.com/
IPNコードをデバッグする場合は、何らかの方法でサーバーを公開する必要があります。これは、Paypalがリクエストを送信した後、非同期でサーバーにポストバックできるようにするためです。通常、これはかなり速いと思います(15秒以内)が、もっと長くなることもあります。
開発サーバーを公開する簡単な方法の1つは、 ngrok 、または forwardhq.com を使用することです。これにより、IDEで通常どおり開発を継続し、デバッグモードでコードを実行できます。Paypalがエンドポイントにポストバックすると、IDEで直接デバッグできます。これらのサービスはラップしますこれはあなたのためにあるので、技術的なノウハウがなくても非常に簡単です。
私の理解では、これは「リバースSSHトンネル」を使用して行われ、すでに公開されているサーバーを介してサイトをプロキシすることで、サイトを公開できます。これを行う前に、Paypalが公開された後にサイトにヒットするだけでなく、anyoneがヒットする可能性があることを考慮する必要があることに注意してください。最初に考慮に入れます。
また、パブリックドメインを所有していて、SSHを備えたターミナルで遊んで構わない場合は、おそらく次のシェルスクリプトのように実行できます( このGistからコピー )
# Usage: show <local-port> <subdomain>
function show() {
DOMAIN=".yourdomain.com"
REMOTE="$2$DOMAIN"
ssh -tR 1080:127.0.0.1:$1 vps "Sudo ssh -Nl \$USER -L $REMOTE:80:127.0.0.1:1080 localhost"
}
これを上記のように機能させるには、以下を〜/ .ssh/configファイルに追加する必要があります。
Host vps
HostName <server address>
User <server username>
これを実行したくない場合(または実行できない場合)は、次のように機能します。
SERVERUSER="<server username>"
ssh -l $SERVERUSER -tR 1080:127.0.0.1:$1 <server address> "Sudo ssh -Nl \$SERVERUSER -L $REMOTE:80:127.0.0.1:1080 localhost"
Paypalの公式開発者ページに、簡単な解決策の1つが説明されています。
developer.Paypal.com-ローカルIPNテスト
秘訣は、このコンテンツを含む小さなHTMLファイルを作成することです。
<form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php">
<!-- start example variables: -->
<input type="hidden" name="SomePayPalVar" value="SomeValue1"/>
<input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/>
<!-- /end example variables -->
<input type="submit"/>
</form>
実際の結果を得るには、Paypalが送信するすべてのIPN変数をコピーする必要があります。これらの実際の変数は、IPN履歴の下のPaypalアカウントにあります。
相対メッセージIDをクリックして、「IPNメッセージ」コンテンツ(mc_gross = 27.00&invoice = Test-1&protection_eligibility = Ineligible&...のようなもの)をコピーする必要があります。これは、HTML非表示入力フィールドに変換する必要があります。例えば:
<input type="hidden" name="mc_gross" value="27.00"/>
<input type="hidden" name="invoice" value="Test-1"/>
<input type="hidden" name="protection_eligibility" value="Ineligible"/>
....
これらの変数をすべて設定してアクションURLを変更したら、ブラウザでファイルを開いて、このフォームを送信できます。
http:// localhost が検証されない場合は http://127.0.0.1 を使用します
問題なく動作するはずですが、戻りURLとIPNメッセージURLに「無効なURL」を送信すると、うるさい場合があります。つまり、cancelURLが http://localhost/cancelpaypal.php で送信すると、URLが無効であることが通知される場合があります。
しかし、そうは思わない。
通常のフローでのリダイレクトは通常の "Location:"ヘッダーであるため、ルーターポートを開く必要があるのはIPNの場合にのみ必要であり、サイト(localhost)にアクセスできる必要があるのはブラウザーです。
まあ、それはほとんど機能しますが、一時的なローカルDNSエントリを設定することもできます。あなたがしなければならないすべては:
したがって、Webサイトのブラウザークエリが127.0.0.1からフェッチされる場合、dns(/etc/init.d/nscd restart)をフラッシュする必要があります。
これですべてですが、運用の準備ができたら、必ずエントリを削除してください。