23

更新 1:

Using PayPal's Instant Payment Notification with PHPに関するこのチュートリアルによると、特定のルーター ポートが開かれていない限り、PayPal はローカルにホストされている Web サイトにアクセスできません。これは、Web サイトがIPNすべての PayPal API に関するものであるためですか、それともすべての PayPal API に該当するためですか?

元の質問:

私のラップトップでは、ライブに移行する前にLAMPを使用して Web サイトを作成するための環境がセットアップされています。http://localhost

新しいプロジェクトでは、PayPal API を使用する必要があります。ラップトップをインターネットに接続した場合、localhost を使用して PayPal API をテストできますか? または、ウェブサイトを別の LAMP ホストにアップロードする必要がありますか?

あなたはおそらく、なんてばかげた質問だと思っているでしょう。うまくいくかどうか試してみてください。試してみましたがうまくいきません。次のステップに進む前に、この質問を除外したかったのです。

4

7 に答える 7

21

IPN コードをデバッグする場合は、何らかの方法でサーバーを公開する必要があります。これは、お客様がリクエストを送信した後で、PayPal がお客様のサーバーに非同期でポストバックできるようにするためです。通常、これはかなり速い (15 秒以内) と思いますが、それよりも長くなる可能性があります。

開発用サーバーを公開する簡単な方法の 1 つは、このリストにある、boringproxyなどのトンネリング ソリューションを使用することです。これにより、デバッグ モードでコードを実行して、通常どおり IDE で開発を続けることができます。PayPal がエンドポイントにポストバックすると、IDE ですぐにデバッグできます。これらのサービスがこれをまとめてくれるので、技術的なノウハウがなくても非常に簡単に行うことができます。

私の理解では、これは「リバース SSH トンネル」を使用して行われます。これにより、既に公開されているサーバーを介してサイトをプロキシすることでサイトを公開できます。これを行う前に、サイトが公開されると PayPal だけでなく、誰でもアクセスできることを考慮する必要があることに注意してください。そのため、最初にそれを考慮してください。

また、独自の公開ドメインを持っていて、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"
于 2012-07-17T12:08:20.043 に答える
8

1 つの簡単な解決策が PayPal の公式開発者ページに記載されています。

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 アカウントで見つけることができます。

IPNsの歴史

相対メッセージ 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 を変更したら、ブラウザでファイルを開いて、このフォームを送信できます。

于 2015-01-24T16:00:24.757 に答える
7

http:// localhostが検証されない場合は、http: //127.0.0.1を使用してください

于 2012-05-06T09:14:43.207 に答える
6

それはうまくいくはずです。昨年、ペイパルとの支払い統合を行いましたが、localhost で問題なく動作しました。

開発に Paypal サンドボックスを使用していますか? https://developer.paypal.com/

于 2011-04-01T08:53:55.240 に答える
3

問題なく動作するはずですが、リターン URL と IPN メッセージ URL に「無効な URL」を送信すると、うるさくなる場合があります。つまり、 http://localhost/cancelpaypal.phpを cancelURL として送信すると、無効な URL であることがわかる場合があります。

しかし、そうすべきではないと思います。

通常のフローでのリダイレクトは通常の「Location:」ヘッダーであるため、ルーター ポートを開く必要があるのは IPN の場合のみです。したがって、サイト (localhost) にアクセスできる必要があるのはブラウザーです。

于 2011-04-01T09:10:00.497 に答える
-4

IPN を使用するには、ローカルホストに Web からアクセスする必要があります。確実に機能するソリューションの 1 つは、仮想マシンを使用し、VPN サーバーをインストールし、VPN 経由で Clinet に接続し、仮想ホストを管理してローカル IP アドレスにリダイレクトすることです。そうすれば、VPN をオンにすると、外部からサーバーにアクセスでき、IPN を送信できます。

于 2012-01-07T10:09:55.620 に答える