0

作業中のサイトに PayPal の「サブスクリプション」支払いボタンを設定しようとしています。これは、PayPal に送信されるフォームであり、トランザクションが正常に完了すると、ユーザーをリターン URL に送り返します。現在、これをテストするために PayPal Sandbox を使用しています。問題は、POST 変数がサンキュー ページ (参考までに PHP ページです) に送信されていないことです。

これが必要な理由は、データベースを更新していて、ユーザーがトランザクションを正常に完了した場合、返される変数を調べて、ユーザーが支払ったことを判断し、MySQL データベース内のユーザーの情報を自動的に更新する必要があるためです。 .

過去 2 週間、PayPal の担当者と連絡を取り合っていますが、どうにも助けてもらえないようです。私はまた、ウェブ全体とスタックオーバーフローを調査しましたが、現在の回答はどれも私の問題に対処していないようです. これが私が試したことです:

  • GET 変数を使用することから始めました (ただし、GET 変数はこの方法ではサポートされていません。これにより、戻り URL の末尾に変数のクレイジーな文字列が返され、ID 変数ではありませんでした (文字セットのようなものでした)。 PayPal 担当者は、私が使用する必要のある変数は POST 変数であると説明しました。

  • ホストに問題があるかどうかを確認するために、3 つの異なるサーバー/ホスティング パッケージにページを設定しました。私が使用した 3 つは、GoDaddy、JustHost、および 123-reg (英国) です。どれも機能しません。PayPalはどこにでもあるので、ホストは問題ないと思いましたが、念のために再確認しました. .htaccess ファイルが POST 変数の動作を妨げていないことはわかっています。これは、このサイトのフォームから PHP メール機能を既に使用しているため、すべてが機能するためです。

  • ここで提案されているように、 $_POST 変数の代わりに $_REQUEST 変数を試しました: Paypal Hidden variables does not work

2 つのページで使用されているコードを次に示します。これらのページにも自由にアクセスして、問題を自分でテストし、それが機能しないことを確認してください。

ページ

http://www.miller-media.com/sites/paypal_test/test_form.php

コード

<html>
<head>
</head>
<body>
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" id="paypal_form" method="post" target="_top">
        <input type="hidden" name="cmd" value="_xclick-subscriptions">
        <input type="hidden" name="item_name" value="Test Monthly Subscription">
        <input type="hidden" name="business" value="mbizz@paypal.com">
        <input type="hidden" name="a3" value="7.00">
        <input type="hidden" name="p3" value="1">
        <input type="hidden" name="t3" value="M">
        <input type="hidden" name="src" value="1">
        <input type="hidden" name="sra" value="1">
        <input type="hidden" name="no_note" value="1">
        <input type="hidden" name="custom" value="20130731 it worked">
        <input type="hidden" name="cancel_return" value="http://www.miller-media.com">
        <input type="hidden" name="return" value="http://www.miller-media.com/sites/paypal_test/mmiller.php">
        <input type="hidden" name="rm" value="2">
        <input type="submit">
    </form>
</body>
</html>

そしてリターンURL

ページ

http://www.miller-media.com/sites/paypal_test/mmiller.php

コード

<html>
<head>
</head>
<body>
    TEST FOR MILLER MEDIA

    THIS IS FOR POST 
    <?php
        echo ("Custom = " . $_POST['custom']);
        echo ("Transaction = " . $_POST['txn_id']);
        echo ("First name = " . $_POST['first_name']);
        echo ("Last name = ". $_POST['last_name']);
    ?>


</body>
</html>

上記のコードは、PayPal の担当者から提供されたものです (私のコードは、最初に設定したときとは少し異なりました)。このプロセスを (PayPal サンドボックス アカウントで) 実行すると、サンキュー ページ (mmiller.php) に変数は表示されません。

これは PayPal の担当者から提供されたメッセージで、変数が正しく機能していることを示しています。彼はローカルでテストしているように見えるので、それが何か関係があるかどうかはわかりません:

Here is the screenshot http://i.imgur.com/zno0UkK.jpg . But I just noticed I was using a Buy Now button but your button is a subscription.

The txn_id is not returned for subscription (that is by design) . Please see below for variables that are returned. https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables#id091EB0901HT

This is what I get with subscription signup http://i.imgur.com/BOrw1Hn.jpg . A txn_id is not returned.

Here is also the complete POST data :

POSTDATA=txn_type=subscr_signup&subscr_id=I-0RSGVWA904CF&last_name=Connor&residence_country=GB&mc_currency=USD&item_name=StormAware+Monthly+Subscription&business=mbizz%40paypal.com&amount3=7.00&recurring=1&address_street=1+Main+Terrace&payer_status=verified&payer_email=UKrealPro%40paypal.com&address_status=confirmed&first_name=John&receiver_email=mbizz%40paypal.com&address_country_code=GB&payer_id=UXPBYWUW8ZDHA&address_city=Wolverhampton&reattempt=1&payer_business_name=John+Connor%27s+Test+Store&address_state=West+Midlands&subscr_date=16%3A37%3A38+Aug+05%2C+2013+PDT&address_zip=W12+4LQ&custom=20130731+it+worked&charset=windows-1252&period3=1+M&address_country=United+Kingdom&mc_amount3=7.00&address_name=John+Connor%27s+Test+Store&auth=AOgsYFMneBuxymkc0UoZ6OI6D-BXCQmWRz5xyilJR1-7uCvNI1kB Om1eHPbogzB7YnoOUIAZZiFOrx0ZcUgN-gQ&form_charset=UTF-8

これは過去数週間私を苛立たせていたので、どんな助けも大歓迎です. 前もって感謝します!

4

1 に答える 1

1

返品ページに POST データを含めたい場合は、PDT (支払いデータ転送) を設定する必要があります。

ただし、これは、データベースの更新など、確実に発生する必要がある場合にはお勧めしません。自動復帰が有効になっていても、ユーザーが実際にサイトに戻るという保証はなく、間違いなくトランザクションが失敗することになるからです。正しく更新されません。

そのため、代わりに IPN が推奨されます。IPN は、ユーザーがサイトに戻るかどうかに関係なくトリガーされます。

お礼のページをシンプルに保ち、支払い後のすべての処理を IPN 内で行います。

于 2013-08-07T05:13:47.877 に答える