اذهب إلى المحتوى
  • 0

كيفية دمج بوابة الدفع بايبال مع إطار العمل جانغو

Ecommerce Vente

السؤال

Recommended Posts

  • 0

1. تثبيت تطبيق DJANGO-PAYPAL

pip install django-paypal

2. أدخل التطبيق في إعدادات DJANGO الخاصة بك

INSTALLED_APPS = (
  ...
  'paypal.standard.ipn',
)

3. أدخل نموذج PayPal عند العرض

from django.views.generic import FormView
from django.urls import reverse
from paypal.standard.forms import PayPalPaymentsForm

class PaypalFormView(FormView):
    template_name = 'paypal_form.html'
    form_class = PayPalPaymentsForm

    def get_initial(self):
        return {
            "business": 'your-paypal-business-address@example.com',
            "amount": 20,
            "currency_code": "EUR",
            "item_name": 'Example item,
            "invoice": 1234,
            "notify_url": self.request.build_absolute_uri(reverse('paypal-ipn')),
            "return_url": self.request.build_absolute_uri(reverse('paypal-return')),
            "cancel_return": self.request.build_absolute_uri(reverse('paypal-cancel')),
            "lc": 'EN',
            "no_shipping": '1',
        }

هذا FormView عادي والقالب paypal_form.html هو نموذج Django قياسي مثل هذا:

<html>
  <body>
    {{ form.render }}
  </body>
</html>

4. تقديم عنوان URL لـ PAYPAL IPN

path('paypal/', include('paypal.standard.ipn.urls')),

5. إنشاء صفحات للنجاح وفشل الدفع باي بال

#views.py
from django.views.generic import TemplateView

class PaypalReturnView(TemplateView):
    template_name = 'paypal_success.html'

class PaypalCancelView(TemplateView):
    template_name = 'paypal_cancel.html'
# URL.py
from . import views
urlpatterns = [
    path('/paypal-return/', views.PaypalReturnView.as_view(), name='paypal-return'),
    path('/paypal-cancel/', views.PaypalCancelView.as_view(), name='paypal-cancel'),
    ...
]

6. قم بإعداد الدالة التالية لاستلام مدفوعات PAYPAL الناجحة

from paypal.standard.models import ST_PP_COMPLETED
from paypal.standard.ipn.signals import valid_ipn_received

@receiver(valid_ipn_received)
def paypal_payment_received(sender, **kwargs):
    ipn_obj = sender
    if ipn_obj.payment_status == ST_PP_COMPLETED:
# تحذير ! # تأكد من أن البريد الإلكتروني للمستلم هو نفسه الذي قمنا بتعيينه مسبقًا في حقل "الأعمال". (يمكن للمستخدم العبث بـ # تلك الحقول في نموذج الدفع قبل أن ينتقل إلى PayPal)

        if ipn_obj.receiver_email != 'your-paypal-business-address@example.com':
# دفع غير صالح
			return
		# أيضًا: لنفس السبب ، تحتاج إلى التحقق من المبلغ
         # تلقى ، "العرف" وما إلى ذلك هي كل ما تتوقعه أو ماذا
         # مسموح به.
        try:
            my_pk = ipn_obj.invoice
            mytransaction = MyTransaction.objects.get(pk=my_pk)
            assert ipn_obj.mc_gross == mytransaction.amount and ipn_obj.mc_currency == 'EUR'
        except Exception:
            logger.exception('Paypal ipn_obj data not valid!')
        else:
            mytransaction.paid = True
            mytransaction.save()
    else:
        logger.debug('Paypal payment status not completed: %s' % ipn_obj.payment_status)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...