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

دمج بوابة الدفع ثواني في مشروع django

Ecommerce Vente

السؤال

Recommended Posts

  • 0

إن بوابة الدفع "ثواني thwani" لا تختلف عن نضيراتها من بوابات الدفع الأخرى ، بحيث يتم إرسال إستعلام POST والتي تحتوي على الحمولة pyload وبعض headers مثل api-key وغيرها 

  • إنشاء حساب على ثواني لجلب public key & secret key 
  • ثم إنشاء دالة إنشاء customer 
    def create_customer(payload,url,secret_key):
        payload = payload
        headers = {
        "Content-Type": "application/json",
        "thawani-api-key": secret_key
        }
        response = requests.request("POST", url, json=payload, headers=headers)
        response_to_dictionary = json.loads(response.text) # تحويل الاستجابة الى قاموس بايثون
        print(response_to_dictionary)
        if response_to_dictionary["success"]:
            return response_to_dictionary["data"]["id"] # إسترجاع معرف العميل لنستخدمه لاحقا في الدفع
        else:
            return None

     

  • بعد ذلك دالة لإنشاء session خاص بالدفع 

        def post(self,request,serial,slug):
            if "plan"in request.POST:
                THAWANI_PUBLISHABLE_KEY = settings.THAWANI_PUBLISHABLE_KEY
                THAWANI_SECRET_KEY = settings.THAWANI_SECRET_KEY
                URL = "https://checkout.thawani.om/api/v1/checkout/session"
                if request.user.is_authenticated:
                    customer = create_customer(payload={"client_customer_id":str(request.user.email)},url="https://checkout.thawani.om/api/v1/customers",secret_key=THAWANI_SECRET_KEY) # استدعاء الدالة السابقة لإنشاء معرف العميل
    
                    payload = {
                      "client_reference_id": str(request.user.id),# معرف العميل من قاعدة بياناتك
                      "mode": "payment",
                      "products": [
                        {
                          "name": "اسم المنتج",
                          "quantity": 1,
                          "unit_amount":100
                        }
                      ],
                      "success_url": "http://127.0.0.1:8000/payment_success",# لما يتم الدفع بنجاح يتم توجيهه الى 
                      "cancel_url": "http://127.0.0.1:8000/payment_cancel",# لما يتم الغاء الدفع يتم توجيهه الى 
                      "customer_id": str(customer) , # معرف العميل من قاعدة بيانات ثواني 
                      "metadata": {
                        "Customer name": request.user.username,
                        "order id": 0 # معرف الطلب يمكنك التلاعب به
                      }
                    }
                    headers = {
                      "Content-Type": "application/json",
                      "thawani-api-key": THAWANI_SECRET_KEY
                    }
    
                        response = requests.request("POST", URL, json=payload, headers=headers)
                        response_dict=json.loads(response.text)
                        print(response_dict)
                        try:
                            if response_dict["success"]:
                                try:
                                    session_id=response_dict["data"]["session_id"]
                                except :
                                    session_id =None
                                if session_id is not None:
                                    redirect_url = f"https://uatcheckout.thawani.om/pay/{session_id}?key={THAWANI_PUBLISHABLE_KEY}"
                                    print(redirect_url)
                                    return redirect(redirect_url)
                                else:
                                    messages.error(request,_("sinvalid session id "))
                            else:
                                messages.error(request,_("error invalid response "))
                        except:
                            return redirect('مكان الصفحة التي تريد ان يذهب اليها لو ان هناك خطأ ')
                    else:
                        messages.error(request,_("plan invalid "))
                else:
                    print("user not authenticated")
                    return redirect("login")

     

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...