diff --git a/apps/profile/models.py b/apps/profile/models.py index 5debf98ad..b9386fdcf 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -88,6 +88,19 @@ class Profile(models.Model): price = "price_0KK5twwdsmP8XBlasifbX56Z" return price + @classmethod + def paypal_plan_id_to_plan(cls, plan_id): + if settings.DEBUG: + if plan_id == "P-4RV31836YD8080909MHZROJY": + return "premium" + elif plan_id == "P-2EG40290653242115MHZROQQ": + return "archive" + else: + if plan_id == "P-48R22630SD810553FMHZONIY": + return "premium" + elif plan_id == "P-5JM46230U31841226MHZOMZY": + return "archive" + @property def unread_cutoff(self, force_premium=False, force_archive=False): if self.is_archive or force_archive: diff --git a/apps/profile/urls.py b/apps/profile/urls.py index ee0fe36d7..6537bea41 100644 --- a/apps/profile/urls.py +++ b/apps/profile/urls.py @@ -15,7 +15,7 @@ urlpatterns = [ url(r'^switch_subscription/?', views.switch_subscription, name='switch-subscription'), url(r'^is_premium/?', views.profile_is_premium, name='profile-is-premium'), url(r'^paypal_ipn/?', include('paypal.standard.ipn.urls'), name='paypal-ipn'), - url(r'^paypal_webhooks/?', include('paypal.standard.ipn.urls'), name='paypal-webhooks'), + url(r'^paypal_webhooks/?', views.paypal_webhooks, name='paypal-webhooks'), url(r'^stripe_form/?', views.stripe_form, name='stripe-form'), url(r'^stripe_checkout/?', views.stripe_checkout, name='stripe-checkout'), url(r'^activities/?', views.load_activities, name='profile-activities'), diff --git a/apps/profile/views.py b/apps/profile/views.py index 51c3a0e12..c9a99e4c9 100644 --- a/apps/profile/views.py +++ b/apps/profile/views.py @@ -259,7 +259,23 @@ def set_collapsed_folders(request): response = dict(code=code) return response -@ajax_login_required +def paypal_webhooks(request): + data = json.decode(request.body) + logging.user(request, f"{data}") + + if data['event_type'] == "BILLING.SUBSCRIPTION.CREATED": + user = User.objects.get(pk=int(data['resource']['custom_id'])) + plan = Profile.paypal_plan_id_to_plan(data['resource']['plan_id']) + if plan == "premium": + user.profile.activate_premium() + elif plan == "archive": + user.profile.activate_archive() + user.profile.cancel_premium_stripe() + elif data['event_type'] == "": + pass + + return HttpResponse("OK") + def paypal_form(request): domain = Site.objects.get_current().domain diff --git a/media/js/newsblur/reader/reader_feedchooser.js b/media/js/newsblur/reader/reader_feedchooser.js index 4c97b73cd..e2df0add4 100644 --- a/media/js/newsblur/reader/reader_feedchooser.js +++ b/media/js/newsblur/reader/reader_feedchooser.js @@ -303,20 +303,23 @@ _.extend(NEWSBLUR.ReaderFeedchooser.prototype, { shape: 'rect', color: 'silver', layout: 'horizontal', - label: 'paypal', - + label: 'paypal', }, createSubscription: function (data, actions) { return actions.subscription.create({ - 'plan_id': plan_id + 'plan_id': plan_id, + 'application_context': { + shipping_preference: 'NO_SHIPPING' + }, + 'custom_id': NEWSBLUR.Globals.user_id }); }, onApprove: function (data, actions) { // Full available details console.log('Paypal approve result', data.subscriptionID, JSON.stringify(data, null, 2)); - // actions.redirect(NEWSBLUR.URLs.paypal_return); + actions.redirect(NEWSBLUR.URLs.paypal_return); }, onError: function (err) {