2017-02-12 9 views
0

私はpaypal paynowボタンでパススルーデータを送信しようとしています。支払い後にユーザーが「merchant」ボタンをクリックしたときに、そのデータをPHPページに返すようにしています。paypalボタンの返品機能が動作しない

私はこれをrm = 2と一緒にpaypalボタンの "return"機能を使ってすべてのデータをポストとして返送します。しかし、私はそれを働かせることはできません。ここに私のPayPalボタンのhtmlです:IPN通知で

<form name="paypal2" action="https://www.paypal.com/cgi-bin/webscr"  method="post" target="_top"> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="hosted_button_id" value="xxx"> 
<input type="hidden" name="invoice" value="testinvoice_fromcode2"> 
<input type="hidden" name="custom" value="testcustom_fromcode1"> 
<input type="hidden" name="on0" value="yes"><!--agreetc--> 
<input type="hidden" name="os0" value="<?php echo $aid; ?>"> 
<input type="hidden" name="on1" value="<?php echo $id; ?>"> 
<input type="hidden" name="os1" value="<?php echo $agent; ?>"> 
<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 
<input id="submit" type="image" src="https://www.paypalobjects.com/en_GB/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!"> 
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"> 
</form> 

、PayPalはレンダリング:option_selection1として OS0、option_selection2として OS1、option_name1として on0、option_name2としてON1 、

私はon0ことを知っているがとos0は名前の値のペアとして使用されるはずですが、最初にこのスクリプトを書いたときには2セットしか許されていなかったため、2009年には4つすべてを使用して値を運びました。

<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 

が機能しない理由

しかし、本質的には、私が理解することはできません。

Iいずれか

$aid=$_REQUEST['option_selection1']; 

又は例えば

$aid=$_REQUEST['os0']; 

などのように、受信スクリプトにphpvendorpaidad.phpをこれらの値を拾うことができません。

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

また、正常に動作しているIPNリスナーページもあります。別の方法は、IPNのリスナーのページにこれを構築することができますJavaScriptを使用して自動的にフォームのデータを送信するページonload?

答えて

1

実際にpaypalはあなたのリターンスクリプトにPOSTするかGETを使用しますか?後者の場合は、クエリ文字列にtxn_idとその他の情報が表示されますが、支払い詳細データ全体を取得することはできません。

自動返品をオン(ユーザーがボタンをクリックすることなくサイトに自動的にリダイレクトされることを意味します)している場合は、PayPalでGETリクエストを送信し、少数のアイテムのみを含めます。

スクリプト内のvar_dump($ _ REQUEST)およびvar_dump($ _ POST)を使用して、取得している内容を確認します。

+0

あなたの助けに多くのおかげです。私はAuto ReturnとPDTの有無にかかわらず、すべてを試しました。あなたが言っているように、私はGET転送(クエリ文字列付き)を、これらと一緒にAuto Return/PDT onとPOST転送で取得します。私はすべてのケースでURLとvar_dump($ _ REQUEST)に注意しましたが、Paypalは私のリターンスクリプト(つまりReturn to Merchant)に何もPOSTしていません。奇妙なことは、2009年に最初にスクリプトを書いたときにこれがすべて機能していたことです。ボタンはまだその時からです。 –

+0

私はこれで多くの時間を無駄にしました。今は、私のIPN処理/リスニングスクリプトの変数をjavascript form submitを使ってPOSTしようとしています。 IPN処理スクリプトは正常に機能しており、支払いは正常に完了しており(確認済みおよび完了済み)、すべての支払いデータは私に電子メールで送信されています。 –

+0

JBart、あなたは華麗です!私は誤って私のスクリプト修正コードで 'rm = 0'を残してしまったことを発見しました(私はこれをさまざまな方法でテストしていました)。 'rm-2'に戻りましたあなたの提案re var_dump($ _ REQUEST)のおかげで、すべての支払いの詳細がPOSTされました。 POSTされたデータは配列内にあるので、配列から取り出して、必要なものにする必要があります。何度も感謝しています。 –

0

実際問題は、当時の返品スクリプトにPayPalが送信していたGET変数を処理するために2009年に設定された返品コードのif/elseロジックに欠陥があります。このロジックは、私のサーバ上の前のフォームから受け取ったPOSTされたデータと、Paypalから受け取ったGETデータとを区別しなければなりませんでした。ペイパルは、2009年以来chengedているように見え、もはやこれはプログラムが働いて補正した後は

<input type="hidden" name="return" value=http://www.example.com/Admin/conpanel/privat/phpvendorpaidad.php> 
<input type="hidden" name="rm" value="2"> 

を経て復帰スクリプトへのデータが、POSTデータをGET送信します。

しかし、私は、JBartからvar_dump($ _REQUEST)(またはより簡単にprint_r($ _REQUEST)を読むこと)への素晴らしい提案のおかげで、問題を発見することができました。これがなければ、私はまだ暴行していたでしょう。あなたが近所にいれば、JBartに賞賛します。あなたが飲み物を買うことを愛するでしょう(NW London)!

いいえ、受け取ったPOST配列から変数を抽出する必要はありませんでした(上の私の最後のコメントを参照してください)。通常は '$ payment_status = $ _POST [' payment_status '];'です。これで私は "How can I get posted data passed along when the user is first redirected through Paypal?"の件名の別のスレッドを誤解していた

関連する問題