From f2281ec7bc3fd65c49303e4d99a389503c9420a0 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Fri, 5 Apr 2013 17:54:10 -0700 Subject: [PATCH] Refunding stripe payments. --- apps/profile/models.py | 30 +++++++++++++++++++++++++++++- utils/feed_fetcher.py | 4 +++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/profile/models.py b/apps/profile/models.py index 2bc86a7d0..3269e5e6b 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -219,7 +219,35 @@ class Profile(models.Model): if most_recent_payment_date: self.premium_expire = most_recent_payment_date + datetime.timedelta(days=365) self.save() + + def refund_premium(self): + if self.stripe_id: + stripe.api_key = settings.STRIPE_SECRET + stripe_customer = stripe.Customer.retrieve(self.stripe_id) + stripe_payments = stripe.Charge.all(customer=stripe_customer.id).data + stripe_payments[0].refund() + logging.user(self.user, "~FRRefunding stripe payment: $%s" % (stripe_payments[0].amount/1000)) + self.cancel_premium() + + def cancel_premium(self): + self.cancel_premium_paypal() + return self.cancel_premium_stripe() + + def cancel_premium_paypal(self): + pass + def cancel_premium_stripe(self): + if not self.stripe_id: + return + + stripe.api_key = settings.STRIPE_SECRET + stripe_customer = stripe.Customer.retrieve(self.stripe_id) + stripe_customer.cancel_subscription() + + logging.user(self.user, "~FRCanceling Stripe subscription") + + return True + def queue_new_feeds(self, new_feeds=None): if not new_feeds: new_feeds = UserSubscription.objects.filter(user=self.user, @@ -557,4 +585,4 @@ class PaymentHistory(models.Model): 'payment_date': self.payment_date.strftime('%Y-%m-%d'), 'payment_amount': self.payment_amount, 'payment_provider': self.payment_provider, - } \ No newline at end of file + } diff --git a/utils/feed_fetcher.py b/utils/feed_fetcher.py index afd5b8112..3fe94be54 100644 --- a/utils/feed_fetcher.py +++ b/utils/feed_fetcher.py @@ -145,7 +145,9 @@ class ProcessFeed: self.feed.save_feed_history(304, "Not modified") return FEED_SAME, ret_values - if self.fpf.status in (302, 301): + # 302: Temporary redirect: ignore + # 301: Permanent redirect: save it + if self.fpf.status == 301: if not self.fpf.href.endswith('feedburner.com/atom.xml'): self.feed.feed_address = self.fpf.href if not self.feed.known_good: