return link.href
-def create_agreement(amount):
+def create_agreement(amount, app=False):
try:
plan = BillingPlanModel.objects.get(amount=amount)
except BillingPlanModel.DoesNotExist:
"payment_method": "paypal"
},
})
+ if app:
+ billing_agreement['override_merchant_preferences'] = {
+ 'return_url': absolute_url('paypal_app_return'),
+ }
response = billing_agreement.create()
if response:
raise PaypalError(billing_agreement.error)
-def agreement_approval_url(amount):
- agreement = create_agreement(amount)
+def agreement_approval_url(amount, app=False):
+ agreement = create_agreement(amount, app=app)
return get_link(agreement.links, 'approval_url')
urlpatterns = (
url(r'^form/$', views.paypal_form, name='paypal_form'),
+ url(r'^app-form/$', views.paypal_form, kwargs={'app': True}, name='paypal_api_form'),
url(r'^return/$', views.paypal_return, name='paypal_return'),
+ url(r'^app-return/$', views.paypal_return, kwargs={'app': True}, name='paypal_api_return'),
url(r'^cancel/$', views.paypal_cancel, name='paypal_cancel'),
)
from django.http.response import HttpResponseRedirect, HttpResponseForbidden
from django.shortcuts import render
+from api.piston_patch import HttpResponseAppRedirect
from paypal.forms import PaypalSubscriptionForm
from paypal.rest import execute_agreement, check_agreement, agreement_approval_url, PaypalError
from paypal.models import BillingAgreement as BillingAgreementModel, BillingPlan
-def paypal_form(request):
+def paypal_form(request, app=False):
if request.POST:
if not request.user.is_authenticated():
return HttpResponseForbidden()
if form.is_valid():
amount = form.cleaned_data['amount']
try:
- approval_url = agreement_approval_url(amount)
+ approval_url = agreement_approval_url(amount, app=app)
except PaypalError as e:
return render(request, 'paypal/error_page.html', {'error': e.message})
return HttpResponseRedirect(approval_url)
@login_required
-def paypal_return(request):
+def paypal_return(request, app=False):
token = request.GET.get('token')
if not token:
raise Http404
active = check_agreement(resource.id)
BillingAgreementModel.objects.create(
agreement_id=resource.id, user=request.user, plan=plan, active=active, token=token)
- return render(request, 'paypal/return.html', {'resource': resource})
+ else:
+ resource = None
+ if app:
+ if getattr(resource, 'error'):
+ return HttpResponseAppRedirect('wolnelekturyapp://paypal_error')
+ else:
+ return HttpResponseAppRedirect('wolnelekturyapp://paypal_return')
+ else:
+ return render(request, 'paypal/return.html', {'resource': resource})
def paypal_cancel(request):