PayPal订阅Django

问题描述 投票:0回答:1

我试图在我的应用程序中实现PayPal订阅功能,这是我到目前为止的情况。我创建了一个处理支付过程的功能,并将用户订阅到所选的订阅计划,但我不知道如何为手动取消订阅创建类似的功能?这可能吗?我的意思是,我怎样才能以用户的身份取消订阅?

这是我的支付流程功能。

def process_order(request, plan_slug):
    host = request.get_host()

    plan = Subscription.objects.get(slug__iexact=plan_slug)
    request.session['plan_id'] = plan.pk

    order, created = Order.objects.get_or_create(
        plan=plan,
        user=request.user,
        total_cost=plan.sum_price,
    )
    if created:
        request.session['order_id'] = order.pk
    elif order:
        request.session['order_id'] = order.pk
        order.created = timezone.now()
        order.save()

    if plan.slug == 'some_slug':
        user = Customuser.objects.get(email=request.user.email)
        user.subscription_plan = plan
        user.sub_renewal_date = None
        user.save()
        messages.success(request, 'You are now some_slug plan!')
        return redirect('accounts:profile', user.email)

    paypal_dict = {
        "cmd": "_xclick-subscriptions",
        'business': settings.PAYPAL_RECEIVER_EMAIL,
        'a1': 1,
        'period1': '1 M',
        "a3": plan.sum_price,  # monthly price
        "p3": plan.plan_duration,  # duration of each unit (depends on unit)
        "t3": 'M',  # duration unit ("M for Month")
        "src": "1",  # make payments recur
        "sra": "1",  # reattempt payment on payment error
        "no_note": "1",
        'item_name': plan_slug,
        'item_number': order.pk,
        'invoice': str(order.pk),
        'custom': {
            'order': order.pk,
            'user': request.user.email,
        },
        'currency_code': 'USD',
        'notify_url': 'http://{}{}'.format(host,
                                           reverse('billing:paypal-ipn')),
        'return_url': 'http://{}{}'.format(host,
                                           reverse('billing:payment_done')),
        'cancel_return': 'http://{}{}'.format(host,
                                              reverse('billing:payment_canceled')),
    }
    form = CustomPayPalForm(initial=paypal_dict)

    context = {
        'plan': plan,
        'form': form,
    }
    return render(request, 'subscriptions/checkout.html', context)
django django-views paypal-subscriptions django-signals django-paypal
1个回答
0
投票

可以通过使用django-paypal离子信号来实现,这些信号由PayPal API发送回服务器。

© www.soinside.com 2019 - 2024. All rights reserved.