7

サブスクリプション ベースのメンバーシップを持っていますが、次の問題が発生しました。

  1. ユーザーは 2012 年 5 月 1 日に毎月無期限の支払いで定期購入しました。
  2. IPN がサーバーに送信され、サブスクリプションがアクティブ化されました
  3. ユーザーは 2012 年 5 月 3 日にキャンセルしました。
  4. IPN がサーバーに送信され、サブスクリプションがキャンセルされ、サーバーがメンバーシップをキャンセルしました。

ただし、ユーザーは 2012 年 5 月 1 日に定期購入したため、1 か月前に解約する場合、まだ数日残っています。これを解決する方法はありますか?PayPal は、この種の問題に対して IPN を送信しますか?

私が考えた解決策の 1 つは、毎晩 cronjob を実行して月が明けたかどうかを確認することです。

4

4 に答える 4

4

自社のWebサイトにサブスクリプションサービスを実装した場合、基本的に次のようなイベントを処理します。

  • サブスクリプションの確認-サーバー上のユーザーのサブスクリプションを「自動更新」としてマークします
  • 受け取ったお金-合意された期間(月次または年次)に基づいて、ユーザーのサブスクリプションの有効期限を移動します。試用期間を使用すると、このイベントは試用期間が終了したときにのみ送信されます
  • サブスクリプションのキャンセル-サーバー上のユーザーのサブスクリプションを「手動更新」としてマークします
  • 返金された金額-合意された期間に基づいて、ユーザーのサブスクリプションの有効期限を戻します。

ユーザーがサインインすると、サブスクリプションの有効期限が切れているかどうかが確認されます(これは、データベースに保存すると簡単です)。

基本的に、サブスクリプションイベントは支払いイベントとは別のものです。サブスクリプションはキャンセルできますが、それは支払いが払い戻されるという意味ではありません。それは別のイベントになります。

ところで、支払いとサブスクリプションのイベントは異なる順序で発生する可能性があります(たとえば、支払いが最初に発生し、次にサブスクリプション通知が発生する可能性があります)。それに応えることが重要です。

于 2012-05-26T15:51:05.847 に答える
2

ユーザーがサブスクライブすると、paypal は定期支払いプロファイルを作成します。つまり、ユーザーはサブスクライブした日 (例: 5 月 1 日、6 月 1 日、7 月 1 日) に毎月 (プロファイルに応じて毎年、毎日) 合計額を支払う必要があります。 . ユーザーがキャンセルすると、支払い自体ではなく、支払いプロファイルがキャンセルされます。その後、ペイパルは他の支払いを要求しません。残りの日数をユーザーに知らせたい場合は、サブスクリプションに関する情報を保存する必要があります。

購読した日とキャンセルした日をデータベースに保存できます。そこから、ユーザーがまだ何日残っているかがわかります。Paypal は、定期支払いプロファイルの作成時、支払い自体、およびキャンセル時に IPN メッセージを送信します。

IPN メッセージに関する情報は、 https ://cms.paypal.com/cms_content/US/en_US/files/developer/IPNGuide.pdf で確認できます。

于 2012-05-21T06:31:08.943 に答える
1

IPN メッセージの D/V ペアの 1 つは、next_payment_dateの後に次のように表示される日付です: 03:00:00 Jul 06, 2013 PDT

日付を YYYY-MM-DD に変換し、IPN メッセージに含まれるprofile_status値に加えてデータベースに保存します。個人がサブスクライブすると、データベースには単純な TRUE/FALSE サブスクライバー セルもあります。

そのため、サブスクライバーがキャンセルすると、データベース内のprofile_statusが「Cancelled」に更新され、サブスクライバーセルが FALSE に更新されます。

ユーザーがプレミアム コンテンツにアクセスすると、データベース内のサブスクライバーセルが TRUE であるかどうかがチェックされます。もしそうなら、彼らはコンテンツを手に入れます。FALSE の場合、profile_statusセルがチェックされ、そのセルが「Expired」または NULL の場合、コンテンツは取得されません。セルのコンテンツが「キャンセル済み」の場合、next_payment_dateデータが取得され、(タイムゾーンの問題に対処するために) 1 日追加され、現在の時刻よりも大きい場合は、プレミアム コンテンツが読み込まれます。現在の日付より前の場合、profile_statusセルは「Expired」に更新され、コンテンツを取得できません。

于 2013-06-07T18:52:28.637 に答える