2010-03-27 198 views
2

我正在使用PayPal訂閱和即時付款通知(IPN)來處理我的網站上的訂閱者。Paypal訂閱IPN - 用戶多次訂閱的問題

大部分它運作良好,但有一個偶爾遇到的問題。

通常,如果用戶取消訂閱,我會在禁用對我的網站的訪問之前等待「期末」(subscr_eot)通知。

因此,如果他們預付了整整一個月,然後立即取消,他們仍然可以訪問本月的其餘時間(因爲它應該是)。

但一些用戶有這個問題,他們:

  1. 取消其認購
  2. 的「期末」之前達到他們決定重新訂閱
  3. 當「期末「我們的應用程序會收到通知,並通過類似於」您的帳戶已被禁用,如果您想再次註冊,您可以點擊此處重新訂閱「等方式向用戶發送電子郵件。
  4. 這使他們感到困惑,因爲他們在想...這很奇怪,我以爲我訂閱像一週前(他們做到了)。所以他們再次訂閱。現在他們有兩個並行運行訂閱我的網站,我在一兩個月獲得支持電子郵件(「你嘴我兩次跆拳道本月混蛋!​​!」)

所以我還沒有找到一個很好的方法解決這個問題。我想最好的解決方案是在收到「收到期末」通知時要求進行額外的API調用,要求PayPal「嘿,這個人是否已經重新訂閱?」。如果是這樣,則不需要發送該電子郵件。但我還沒有看到任何方式來執行此API調用。

另一種解決方案是,當他們取消(「subscr_cancel」通知)時立即禁用他們的帳戶,但隨後我得到不同的憤怒支持電子郵件「嘿,我爲整個月預付了帳單爲什麼我的帳戶已禁用!!」。

其他人解決了這個問題?

回答

0

據我所知,如果您使用網站支付標準/專業按鈕,我認爲您沒有paypal api來檢查訂閱。

我通過在我的數據庫中保持active/cancel/resubscribe狀態來處理這個問題,並根據我從paypal獲得的IPN消息更新狀態。我將IPN消息映射到我使用的按鈕中的custom字段,該字段在每個IPN消息中發回。

還有很多第三方可以幫助您管理這個過程,因爲paypal的api在這方面有點虛弱。 Recurly是我已經看過並計劃實施的一個,也有其他人。

0

引用:Re: When is subscr_eot issued?

如果你開始接受預訂2009年11月後,該用戶的ID將啓動「I-」 - 在自己的時間到底會不會返回「subscr_eot」。 PayPal期望您保持他們訂閱多久的時間,並在該期限到期時更新帳戶降級(或其他),除非客戶在此期間再次支付。

+0

有趣的是,我不確定他在「配置文件ID」中的含義。我沒有從Paypal獲取任何配置文件ID。有一個交易ID,但它不是以I-或S-開頭的。 –

1

我知道這是一個古老的線程,但我還沒有看到這個問題的實際答案,所以如果有人碰巧想知道這個像我一樣,這裏有一個解決方案。

如果有人在他們的期限(subscr_eot)之前取消他們的帳戶(subscr_cancel),我會在我的數據庫中設置它來處理它。例如,如果數據庫中有一個「Users」表,只需添加一個新的「int」字段並將其稱爲「Term」。默認情況下,該字段應設置爲「0」。然後,在您的IPN內部,設置它,以便如果用戶在期限結束前取消訂閱,它將該用戶的「期限」字段設置爲「1」。如果該用戶返回並重新訂閱了您的服務,請讓IPN將該用戶的「期限」字段更新回「0」。

然後,在您的郵件腳本中,只需在該用戶運行期限結束時檢查該用戶的「期限」字段。如果設置爲「0」,則不要發送電子郵件。如果它設置爲「1」,則發送電子郵件說「Adios!」

0

How to prevent duplicate PayPal payments?

你會想要一個唯一的標識符添加到「發票」參數;並在您的賬戶中的「個人資料」>「我的銷售工具」部分啓用「阻止重複付款」,網址爲www.paypal.com