web-dev-qa-db-ja.com

PaypalサブスクリプションIPNのテスト

PaypalサブスクリプションIPNをテストしたいのですが、サブスクリプションの作成時に受信したものと、後で次の支払いで送信されたもの(サブスクリプションが月額$ xの場合は月次など)の両方です。

ただし、2番目のIPNを受け取るまで1か月または1日待つことはしたくありません。 Paypalまたはそのサンドボックスを使用して、IPNを1時間ごとなど、より迅速に送信する方法はありますか?

ドキュメントには、サブスクリプション期間として指定できるのは年、月、日、週のみであると記載されています。

37
Click Upvote

以前は、日数で指定された期間はテストサーバーによって分として扱われるため、「d3」を指定すると3分ごとに呼び出されていました。彼らはこれを削除したと思います、そして私はサブスクリプションをテストするための代替機能を知りません。

7
Remus Rusanu

Paypalの開発者サポートとドキュメントは彼らにとって恥ずかしいものです。しかし、この特定の制限は、最初は赤面しているように見えるほど衰弱させるものではありません。

テストのために、定期的な支払いをnotに無料トライアルを持たないように定義します。新しいサブスクリプションを作成すると、サーバーは2つのIPNメッセージをすばやく連続して受信します。1つはサブスクリプションを作成するためのもので、もう1つは支払いを適用するためのものです。基本的に、テストする必要があるのはそれだけです。

無料試用版がある場合は、基本的に同じメッセージのペアが表示されますが、試用期間があります。 :)

最初のメッセージ(「サブスクリプションの作成」)は次のようになります。 'txn_type'に注意してください。これは、2つのメッセージを明確にするための重要な情報です。

{
  "txn_type"=>"subscr_signup",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "btn_id"=>"1111111",
  "item_name"=>"Your Subscription Description",
  "recurring"=>"1",
  "period1"=>"1 M",

  # This example is from a "free trial" IPN notification-- if you don't have a 
  # free trial defined, there will only be 'period1' fields, and they'll
  # have the data that appears here in the 'period3' fields.
  "amount1"=>"0.00",
  "mc_amount1"=>"0.00",
  "period3"=>"1 M",
  "amount3"=>"34.95",
  "mc_amount3"=>"34.95",
  "mc_currency"=>"USD",

  "payer_status"=>"verified",
  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"[email protected]",
  "residence_country"=>"US",

  "business"=>"[email protected]",
  "receiver_email"=>"[email protected]",

  "reattempt"=>"1",

  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

この場合、2番目のメッセージはより興味深いメッセージです。これは基本的に、後で定期支払いが適用されたときに表示されるメッセージとまったく同じになります。これは次のようになります。

{
  "txn_type"=>"subscr_payment",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "txn_id"=>"payment_unique_id",
  "payment_status"=>"Completed",
  "payment_date"=>"12:45:33 Feb 16, 2010 PST",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "custom"=>"data-you-sent-in-a-custom-field",

  "id"=>"1",
  "payment_gross"=>"34.95",
  "mc_currency"=>"USD",
  "payment_type"=>"instant",
  "payment_fee"=>"1.31",
  "payer_status"=>"verified",
  "mc_fee"=>"1.31",
  "mc_gross"=>"34.95",
  "btn_id"=>"1111111",

  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"[email protected]",
  "residence_country"=>"US",

  "receiver_id"=>"your_merchant_id",
  "business"=>"[email protected]",
  "receiver_email"=>"[email protected]",

  "protection_eligibility"=>"Ineligible",
  "transaction_subject"=>"",
  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

したがって、1日待つことなく、ほとんどすべてのテストを実行できます。あなたがそれを釘付けにしたと思う時までに、あなたは翌日たくさんのサブスクリプションIPNメッセージを受け取るでしょう。

さらに、 ここ は、さらに参照するためのPaypalのドキュメントへのリンクです。

56
dondo

テストIPNを再送信することは可能であるため、テスト用に1つのサブスクリプションを「購入」するだけで済みます。サブスクリプションを1つ購入したら、次のようにします。

  1. Paypalサンドボックスにログインします売り手アカウント。
  2. 「プロファイル」=>「マイセリングプリファレンス」を選択します。
  3. 3番目の列から[即時支払い通知設定]を選択します。
  4. IPNが有効になっていて、URLが正しいことを確認してください。
  5. IPN履歴ページへのリンクをクリックします。
  6. 下にスクロールして、1つ以上のIPNにチェックマークを付け、[再送信]をクリックします。

確認すると、選択したIPNが指定したURLに再送信されます。同じIPNで無制限に繰り返すことができます。

@dondoによる優れた回答が残りをカバーしています。

8
Neil T

ねえ、私はニールに叫び声を上げたかったのです。それはまさに私が探していたものであり、返信したり賛成したりするのに十分な評判がないからです。

信じられないかもしれませんが、Paypalではまだipnファイルを使用したサブスクリプションテストを簡単に行うことはできません:/

それで、私がここでそれを見なかったという理由だけで、OPは彼らが教皇からの2つの可能な応答だけを期待しているという印象を受けているように聞こえました-

他の誰かが問題を抱えている場合は、テスト中に私のipnにヒットした他のtxn_typeがあります。

//when Paypal subscription profile is created for the subscriber
subscr_signup 

//payment made for a given billing cycle
subscr_payment 

//when subscription fails
subscr_failed 

//user cancels subscription - not
subscr_cancel 

//end of term - Paypal is "done" with that subscriber 
subscr_eot 

//why I was looking for this thread to begin with lol
recurring_payment_suspended_due_to_max_failed_payment

その最後の1つは、今朝、私のテストサブスクライバーの最後の1つすべてに対して私のIPNをヒットしました。それが何を意味するのかを調べていたとき、次のことも可能であることがわかりました。

recurring_payment_profile_created

recurring_payment_profile_cancel

recurring_payment_profile_modify

recurring_payment

recurring_payment_skipped

recurring_payment_failed

サブスクリプションと定期支払いはPaypalの目から見て技術的に異なるため(サブスクリプションは終了しない可能性がありますが、定期支払いには誰かが「サブスクリプション」に対して行うことができる合計支払いに上限があります)、それを取得するために何をしたのかわかりませんが、ドキュメント必ずしも簡単ではないので、わかりません。これはサンドボックスマーチャントアカウントによって生成されたサブスクリプションボタンだったので、私はまだ理解に取り組んでいますが、何でも。

幸せな頭痛:)

更新:私はちょうど今私の問題を理解しました-それで、私が何をしているのかを知っているように聞こえるので、説明します...

Paypalのサブスクリプションサンドボックス環境は徐々に衰退していると思います。先日、sandbox.Paypal.comをいじり回していると、「致命的な失敗」が何度も発生することに気づきました。ページを更新すると、ほとんどの場合これが修正されるようですが、画面が戻るまでに数回更新する必要がある場合があります。

IPNファイルをヒットしたときに同じ応答が返されます。これは、今日すべてのサブスクリプションが一時停止された理由を説明しています。 Neilのおかげで、IPN応答を再送信することができ、それをテキストファイルにキャプチャしました(笑)。次に、応答で読み取ったipnファイルをヒットして、Paypalに戻しました(これは、私が思っているよりも本当に複雑です)。簡単に聞こえるようにします)。

いずれにせよ、ページを更新することで、Paypalハンドシェイクをオンデマンドで多かれ少なかれ開始できます。そうすると、50/50になります。検証されたり、致命的な失敗が発生したりします。彼らのサンドボックスサイトで(致命的な失敗)。

以下は、私が彼らから得た失敗した応答の一部の例です...私は200を受け取ったので、彼らのサーバーにアクセスすることは接続の問題ではないと思いますが、ここで「致命的な失敗」のパターンが見られ始めています。これは私のよりも彼らの終わりを示しています

HTTP/1.1 200 OK 
Date: Tue, 29 Sep 2015 02:41:00 GMT 
Server: Apache 

Fatal Failure 
6
Rich

サンドボックスから手動でIPNを作成することもできます。

https://developer.Paypal.com/cgi-bin/devscr?cmd=_ipn-link-session

0
Sebas