2012-05-18 104 views
7

我有一個基於訂閱的會員資格取消的PayPal定期付款,但是我遇到了以下問題:的剩餘天

  1. 用戶簽約在2012年5月1日,每月支付不定。
  2. IPN發送到服務器,激活訂閱
  3. 用戶取消了5月3日2012年
  4. IPN發送到服務器,訂閱被取消,取消的服務器成員。

但是,當用戶在2012年5月1日訂閱時,如果他要在一個月前取消,他還剩下一些日子。任何方式來解決這個問題? PayPal會針對此類問題發送任何IPN嗎?

我想到的一個解決方案是每天晚上做一個cronjob來檢查月份是否到了。

回答

3

當我們在我們自己的網站上實施的訂閱服務,我們基本上處理的事件是這樣的:

  • 訂閱確認 - 我們將我們服務器上的用戶訂閱標記爲「自動續訂」
  • 收到的錢 - 我們將用戶的訂閱exp iry日期根據商定的期限(每月或每年);我們紀念我們的「手動更新」
  • 錢退還服務器上的用戶的訂閱 - - 我們把用戶的訂閱到期日的試用期,只有獲取在試用期結束
  • 訂閱取消發送此事件根據商定的期限退回。

在用戶登錄後,我們檢查訂閱是否已過期(如果將其存儲在數據庫中,這很容易)。

基本上,訂閱事件與付款事件是分開的。訂閱可以取消,但這並不意味着退款將被退還;那將是一個單獨的事件。順便說一句,付款和訂閱事件可以按不同的順序(例如,付款可以先到達,然後是訂閱通知);迎合這一點很重要。

2

當用戶訂閱時,paypal將創建一個定期付款資料,這意味着用戶將不得不每月(每年,每天取決於資料)支付該筆款項,在他訂購的那一天(例如,6月1日, ,7月1日)。 當用戶取消時,他會取消付款資料,而不是付款本身。所以之後,貝寶將不會要求任何其他付款。如果您希望爲用戶提供日期,則必須存儲有關訂閱的信息。

你可以在他訂閱的那天和他取消的那天存儲一個數據庫。從那裏你可以知道用戶還有多少天。 Paypal會在創建定期付款資料,付款本身以及取消時發送IPN消息。

您可以找到IPN消息在這裏的信息: https://cms.paypal.com/cms_content/US/en_US/files/developer/IPNGuide.pdf

+0

至少我可以有一個理由爲什麼倒投了? (只是爲了從我的錯誤中吸取教訓) – zolipapa

1

一個在IPN消息中的d/V對是next_payment_date隨後呈現這樣的日期:三點○○分00秒2013年7月6日PDT

我轉換的日期YYYY- MM-DD並將其存儲在數據庫中,除了IPN消息中包含的profile_status值。當一個人訂閱時,我在數據庫中也有一個簡單的TRUE/FALSE訂戶單元。

因此,如果用戶取消,他們PROFILE_STATUS在數據庫中「已取消」和用戶細胞更新爲FALSE被更新。

當用戶訪問優質內容時,將檢查數據庫中的單元格是否爲TRUE。如果是這樣,他們得到的內容。如果FALSE,那麼將檢查profile_status單元格,並且如果該單元格爲「Expired」或NULL,則它們不會獲得內容。如果單元格的內容爲「已取消」,則數據會被拉出,增加一天(用於處理時區問題),如果大於當前時間,則會加載高級內容。如果它小於當前日期,那麼它們的profile_status單元格將更新爲「過期」,並且它們不會獲得內容。