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

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...