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

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...